シミュレーションコンペで銅メダル2つを獲得してkaggle Expertになった方法
はじめに
kaggleで開催されたチェスコンペと強化学習コンペに参加し、銅メダルを獲得しました。

これらのコンペは、シミュレーションコンペと呼ばれるコンペであり、通常のコンペとは異なります。通常のコンペに比べて、シミュレーションコンペの方が初心者の方やAIに慣れていない方はメダルを獲りやすいと思います。本記事では、その理由やコンペで取り組んだ内容を振り返りながら紹介します。
シミュレーションコンペについて
シミュレーションコンペとは、参加者が自作のbotを提出し、bot同士を対戦させることで順位を決める形式のコンペです。モデルの精度を競い合う通常のコンペとは異なり、Eloレーティングなどでお互いのBotの強さを測ります。開催頻度が少なく、2025年11月現在開催されているシミュレーションコンペはありませんが、1年の間に1~2回は開催されている模様です。
直近では、LLM20Q、チェスコンペ、LuxAIの3つのコンペが開催されました。
LLM20Qのように限られたターンでYes/No質問を通して単語を当てるものから、軽量なチェスエンジンの開発、さらに探索と収穫を両立させるエージェント設計を競うLuxAI3まで、題材は多岐にわたります。
おすすめの理由
シミュレーションコンペは特定のドメインの知識が前提にならないことが多く、開始時点のハンデが少ないのが魅力です。例えばチェスコンペなどでは、Grand MasterやMasterでもチェスエンジンの開発知識をはじめから持っている人は少なく、上位層と同じようなスタート位置からコンペに参加することができます。
また、AIの知識や実装力ではなく、アルゴリズムやソフトウェアの力でメダルを獲ることも可能です。コンペにもよりますが、チェスコンペと強化学習コンペでは、ソフトウェアの力のみで実際にメダルを獲ることができました。
さらに、シミュレーションコンペでは公開コードのコピー勢が下位〜銅圏に一定数存在するため、公開コードに小さな改良を積み重ねるだけでも順位を引き上げやすいです。また、新しいbotを作ったときに既存botと対戦させるだけで簡単に性能を検証できるため、開発サイクルが速く、リーダーボードにも反映しやすい環境が整っています。
マイナス点
一方で、シミュレーションコンペにはマイナスの点もあります。銀メダルや金メダルを獲りたい人には公開コードの改良では限界があり、1からモデルを設計して磨き上げる必要があります。シミュレーションコンペは公開コードが少ない傾向にあり、コンペの全体像の把握やベースライン構築が難しいです。また、最終サブ終了後にお互いのBotを戦わせる期間が2週間ほどあるため、この2週間は常にそわそわすることとなります。
上位を目指す勢にとってはシミュレーションコンペは難しい面もありますが、初心者の方やkaggleを始めてみたいがハードルが高いと思っている人たちにとってはメダルを獲るチャンスなので、是非参加すると良いでしょう。
チェスコンペ
では、チェスコンペについて解説します。

概要
チェスコンペは、極端に厳しい制約のなかで軽量なエンジンを設計するコンペでした。実行時メモリは5MB以下、ファイルサイズは64KB以下、さらに1手あたりの制限時間は10秒+0.1秒という設定で、いかに限られた資源を使うかが勝敗を分けます。5MBという上限の中でニューラルネットを動かすのは難しく、いかに既存OSSのエンジンを削ぎ落として機能を保つかが焦点になりました。
ポイント
公開されているnotebookの中ではfruitが強力で、私たちのチームもfruitを起点にして軽量化と探索効率の両立を図りました。評価関数をNNUEのようなニューラルネットワークに頼らず、メモリを食うテーブルの整理や探索に効くキャッシュの設計変更を優先することで、制約下でも安定したパフォーマンスを目指しました。
取り組んだ内容
具体的には、Fruitのポーンのハッシュテーブルを4分の1に縮小し、局面の固定化が起きやすい特性を逆手にとってキャッシュ領域を抑えました。さらに1手あたりの推論時間の配分を見直し、遷移表(Transposition Table, TT)のサイズを2MBに固定して再訪局面の再利用効率を高めました。
また、Fruitを使ったBotとは別にOSSのEtherealをもとにしたBotも提出しました。Ethereal 9を用い、TTと関連ファイルを外して実行時メモリを5.8MBから4.6MBまで落とし、コメントアウト等の整理で配布物のサイズも60KBまで切り詰めるなど、軽量化を進めました。
実行時メモリの削減やファイルサイズの削減は、OSSを読み、変更すべき個所を特定し、いかにエラーに対処するかが重要なのです。これらはAIの実装ではなく、完全にソフトウェアの実装力がものを言うコンペでした。
上位解法
リーダーボード上位ではCfish+NNUEの構成が1位・3位・10位を占め、Stockfish+HCEが2位、Obsidian+NNUEが5位、Cfish+SPSAが9位といった顔ぶれでした。ここでいうHCEとは、人手設計の評価関数のことで、NNUEよりも挙動を制御しやすい一方で表現力の限界もあるため、競技の局面分布に合わせた細やかな設計が光りました。SPSAは近いパラメータ同士を直接対戦させ、勝者側を採用する実戦指向の最適化で、探索の深さと安定を高い水準で両立させています。
差をつけたポイント
銅メダル圏では公開コードのfruitを丁寧に軽量化し、TTやpawn tableを要所で縮めることで十分に戦えます。ただし銀上位から金メダル圏になるとCfishを基盤に、NNUE・HCE・SPSAといった評価関数や最適化の選定まで含めた総合設計が求められます。
LuxAI
次に、LuxAIについて紹介します。
概要
LuxAIでは、24×24のグリッド上で16体のエージェントが行動し、黄色いマス周辺の5×5領域に存在するリワード上に留まることでポイントを獲得します。移動やステイにはエナジーの消費が伴い、1ゲームは100ステップを5回繰り返して総得点で勝敗を決めます。エナジーをチャージできるマスは、ステップごとに位置が入れ替わります。また、視野に入った敵には「sap」と呼ばれる攻撃を仕掛けることができ、エナジーが尽きたエージェントはマップの隅へ戻されます。

ポイント
5ゲームのうち、序盤の数ゲームはチャージと位置探索にリソースを割き、後半は収穫効率の最大化へ切り替える構成が有効でした。公開のルールベース実装にはsap機能が含まれていないことが多く、自前での拡張が不可避です。金や銀を見据えるなら、ルールベースの限界を見切り、強化学習や模倣学習による戦術の自動獲得を取り入れる必要があります。
取り組んだ内容
次に、私たちの取り組んだ内容について紹介します。私たちはリワード検知後にエージェントをその場に留めるharvestの徹底から着手し、敵陣側のリワードを見つけた際の侵攻時sapと、自陣への侵入に対する迎撃sapを実装しました。notebookもこちらに公開しているので、upvoteしてもらえると幸いです。経路探索はBFSにヒューリスティックを重ねたA*で運用し、探索途中で全エージェントが停止してしまうバグが公開コードにはあったため、リワード発見後もランダムに動く挙動を差し込むことで回避しました。複数エージェントが同一マスに重なる衝突も解消し、ルールベースのエージェントを改良しました。
うまくいかなかったこと
こちらも強化学習を一切使わずにルールベースのアルゴリズムのみでメダルを獲ってしまいました。模倣学習にもトライしましたが、エージェントが一方向に偏って進んでしまい、安定した方策が得られませんでした。2次元のマスやその他の情報をどう状態として持つかの難しさを痛感しました。上位勢では模倣学習や強化学習を行っていたところもあったので、実力の差が出たと思います。
上位解法
優勝したチームはマルチエージェントRLに加え、24×24マスに約1000の特徴量を重ねた入力をConv–ResNet–LSTM–Transformerで受ける構成でした。敵予測、リワード予測、行動の各ヘッドを分け、特にsapと移動を別系統で扱う設計が効いています。コンペ期間中は模倣学習対策として、強いモデルを15%、弱いモデルを85%混ぜる学習配分を取り入れ、ほかのチームに模倣されるのを避けながら探索していました。2位と5位はPPO+ResNet、3位・4位・7位はU-Netを使った模倣学習が主体で、25位や92位にルールベースが位置していました。
さいごに
本記事ではkaggleのシミュレーションコンペについて紹介しました。初心者の方やkaggleをやってみたいけどハードルが高いと感じている方は、シミュレーションコンペなどから始めると良いと思います。また、シミュレーションコンペ以外にもサンタコンペなど面白いコンペも毎年開催されているため、AIはあまりやったことがないが、システム開発や競プロはやったことがあるという方も是非kaggleに参加してもらえればと思います。
Discussion