<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>競技プログラミング on mumeinosato Lab</title><link>https://mumeinosato.com/categories/%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/</link><description>Recent content in 競技プログラミング on mumeinosato Lab</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Sun, 24 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://mumeinosato.com/categories/%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/index.xml" rel="self" type="application/rss+xml"/><item><title>SuperCon2025に参加しました</title><link>https://mumeinosato.com/post/supercon2025%E3%81%AB%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</link><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><guid>https://mumeinosato.com/post/supercon2025%E3%81%AB%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</guid><description>&lt;h2 id="はじめに"&gt;はじめに
&lt;/h2&gt;&lt;p&gt;去年の夏、SuperCon2025に参加しました。本選終了からかなり時間が経ってしまいましたが、振り返りと供養を兼ねて記事にしておこうと思います。&lt;/p&gt;
&lt;p&gt;結論から言うと、チームcornbeefは予選を通過し本選に参加しましたが、本選ではランキング外でした。悔しい結果ではありましたが、初めてのSuperCon参加で予選を突破できたことを考えれば、まずまずだったと思います。&lt;/p&gt;
&lt;p&gt;ちなみにチーム名の「cornbeef」は、「SuperCon → スパコン → スパイシーコンビーフ → cornbeef」という流れで適当に決めました。特に深い意味はありません。&lt;/p&gt;
&lt;h2 id="予選"&gt;予選
&lt;/h2&gt;&lt;h3 id="問題"&gt;問題
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.supercon.cii.isct.ac.jp/attwiki/index.php?plugin=attach&amp;amp;refer=SupercomputingContest2025&amp;amp;openfile=SuperCon2025%E4%BA%88%E9%81%B8%E5%95%8F%E9%A1%8C%280601%E4%BF%AE%E6%AD%A3%E7%89%88%29.pdf" target="_blank" rel="noopener"
 &gt;こちら&lt;/a&gt;から問題を閲覧できます。&lt;/p&gt;
&lt;p&gt;要約すると、t&lt;sub&gt;10&lt;/sub&gt;におけるひずみの状態N&lt;sub&gt;e&lt;/sub&gt;が与えられるため、t&lt;sub&gt;0&lt;/sub&gt;におけるひずみの状態を求めることが目標です。&lt;/p&gt;
&lt;h3 id="解法"&gt;解法
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;与えられた最終状態から逆算して、おおよその初期状態を求める&lt;/li&gt;
&lt;li&gt;その値を用いて2・3級のコードでシミュレーションし、最終状態との差を評価する&lt;/li&gt;
&lt;li&gt;最終状態に近づくように繰り返し調整する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;いわゆる焼きなまし法を用いました。&lt;/p&gt;
&lt;h3 id="余談"&gt;余談
&lt;/h3&gt;&lt;p&gt;2,3級のコードは、チームメンバーのAが実装しました。1級兼予選問題は、提出期限の前日に私が徹夜で実装をしました。&lt;br&gt;
こんな即席のコードで予選を通過したと知ったときは、何かの間違いかと思いました。&lt;br&gt;
私には計画性が欠けていますね。反省しています。&lt;/p&gt;
&lt;h2 id="本選"&gt;本選
&lt;/h2&gt;&lt;p&gt;日程は5日間ありましたが、実際に作業できる時間は約3.5日間であり、夜間はスパコンへアクセスできませんでした。&lt;br&gt;
昼間だけでは時間が足りないため、夜間は自宅サーバーに環境を構築し、自宅でも開発を進められるようにしました。しかし、大会で使用するスパコンにはGPUが搭載されている一方、自宅サーバーにはCPUしかなかったため、GPU環境を利用できないのはかなり痛手でした。(RTX PRO 6000 Blackwellが欲しい)&lt;/p&gt;
&lt;p&gt;チームメンバーには、VSCode Live Shareを利用して私の環境に参加してもらう形で開発を進めました。&lt;/p&gt;
&lt;h3 id="問題-1"&gt;問題
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.supercon.cii.isct.ac.jp/attwiki/index.php?plugin=attach&amp;amp;refer=SupercomputingContest2025&amp;amp;openfile=SuperCon2025_final_problem.pdf" target="_blank" rel="noopener"
 &gt;こちら&lt;/a&gt;から問題を閲覧できます。&lt;/p&gt;
&lt;p&gt;要約すると、風車後流(ウェイク)の影響を考慮しながら、発電量が最大となるよう風車を配置することが目標です。&lt;/p&gt;
&lt;h3 id="1日目"&gt;1日目
&lt;/h3&gt;&lt;h4 id="昼"&gt;昼
&lt;/h4&gt;&lt;p&gt;まず問題の理解とスパコンへの接続確認を行いました。&lt;/p&gt;
&lt;p&gt;また、ローカルで書いたコードを自動でスパコンへ転送し、そのまま実行・検証まで行えるスクリプトを作成しました。その間、チームメンバーには問題分析を進めてもらいました。&lt;/p&gt;
&lt;h4 id="夜"&gt;夜
&lt;/h4&gt;&lt;p&gt;この日は特に作業をしませんでした。&lt;/p&gt;
&lt;h3 id="2日目"&gt;2日目
&lt;/h3&gt;&lt;h4 id="昼-1"&gt;昼
&lt;/h4&gt;&lt;p&gt;実際にコードを書き、サンプルコードよりスコアを伸ばす方法を模索しました。貪欲法よりランダムで埋めたほうがスコアが高かったのは衝撃でした。とりあえず貪欲法改善し初期解を最適化しようとしました。&lt;/p&gt;
&lt;p&gt;ここで思ったことがあります&lt;br&gt;
＿人人人人人人人人人人人人人人人人＿&lt;br&gt;
＞　どうやってGPUに乗せるんだこれ　＜&lt;br&gt;
￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y￣&lt;/p&gt;
&lt;h4 id="夜-1"&gt;夜
&lt;/h4&gt;&lt;p&gt;解の確認のため、ビジュアライザーを作成しました。&lt;br&gt;
前回大会では配布されていたらしいのですが、今回は配られる気配がなかったため、自作することにしました。グリッドと風車の位置を描画するだけの簡易的なものでしたが、他チームではウェイクまで可視化しているところもありました。&lt;/p&gt;
&lt;h3 id="3日目"&gt;3日目
&lt;/h3&gt;&lt;h4 id="昼-2"&gt;昼
&lt;/h4&gt;&lt;p&gt;ここにきて問題修正&lt;/p&gt;
&lt;p&gt;貪欲法で初期解を生成し、焼きなまし法で改善するという方針を取っていましたが、スコアが伸び悩んできました。
AIに相談したところ、LNSや遺伝的アルゴリズムを試してみると良いとの提案を受けたため、実装してみました。&lt;/p&gt;
&lt;p&gt;なお、今回の大会ではAIの利用は禁止ではなく、むしろ推奨されていました。&lt;/p&gt;
&lt;p&gt;3日目終了直前にスパコン(スケジューラ)がお亡くなりになりました。&lt;/p&gt;
&lt;h4 id="夜-2"&gt;夜
&lt;/h4&gt;&lt;p&gt;ローカルにはCUDA環境がなかったため、勘を頼りにGPU対応を進めました。&lt;/p&gt;
&lt;h3 id="4日目"&gt;4日目
&lt;/h3&gt;&lt;h4 id="昼-3"&gt;昼
&lt;/h4&gt;&lt;p&gt;当初の予定では、この日の12時までがスパコン利用時間でした。&lt;/p&gt;
&lt;p&gt;GPUコードの調整を行いました。&lt;/p&gt;
&lt;p&gt;スパコンが死亡（２回目）&lt;br&gt;
スパコンが死亡（３回目）&lt;br&gt;
スパコンが死亡（４回目）&lt;/p&gt;
&lt;p&gt;という状況になり、提出期限とスパコン利用時間が延長されました。&lt;/p&gt;
&lt;p&gt;さらに、&lt;/p&gt;
&lt;p&gt;スパコンが死亡（５回目）&lt;br&gt;
スパコンが死亡（６回目）&lt;/p&gt;
&lt;p&gt;大会期間中は学校から参加していたため、スパコンが停止している間に学食へ行こうとしました。しかし、この日に限って学食が休業日だったため、昼抜きで作業しました。&lt;/p&gt;
&lt;p&gt;利用時間は延長されたものの、延長時間中はフルノードを使用できず、本番環境と同じ条件で実行することができませんでした。&lt;/p&gt;
&lt;p&gt;とりあえず、動作するコードを提出できたとこの時は思っていました。&lt;/p&gt;
&lt;h3 id="5日目"&gt;5日目
&lt;/h3&gt;&lt;h4 id="結果発表"&gt;結果発表
&lt;/h4&gt;&lt;p&gt;予想どおりランキング外でした。&lt;/p&gt;
&lt;p&gt;最後の方で、フルノードで動かすことができない環境でコードを調整していたため、10ケース中2ケースしか動いていませんでした。&lt;/p&gt;
&lt;h4 id="終了後"&gt;終了後
&lt;/h4&gt;&lt;p&gt;他のチームも同じように、貪欲法+焼きなまし法を採用しているところがほとんどでした。&lt;br&gt;
焼きなまし法自体が、CPU向けのアルゴリズムのためH100*4基をフル活用するのは難しいと思います。&lt;/p&gt;
&lt;p&gt;来年こそ入賞したいと思いましたが、そのためには留年するしかありません。そして何事もなく卒業してしまったため、今回が最初で最後のSuperCon参加になりました。&lt;/p&gt;
&lt;p&gt;大学生版SuperCon、待っています。&lt;/p&gt;</description></item></channel></rss>