CodinGame - Ghost in the Cell 参加日記

CodinGameのコンテストに初参加してみた。ゲームAIを作ってその強さを競うものなのだが、面倒な環境構築が不要でなかなか楽しかった。対戦動画も観ていて面白い。

https://www.codingame.com/replay/194505045
黄色が私。最終的にCyborgの数が多いほうが勝ち

ランキングはリーグ制。最初はウッドリーグ3部からスタートし、リーグボスを倒すごとにウッド2→ウッド1→ブロンズ→シルバー→ゴールドとランクアップする。また、途中でルールが追加されることもある。

ゲームルール概略

  • ターン制
  • マップ上にいくつかの工場がある
  • 工場間は長さの違う道で繋がれている
  • 工場は味方・敵・中立のいずれか
  • 工場は1ターンごと0~3体のCyborgを自動生産する
  • 1ターンごと、味方・敵同時に行動を起こす
  • 自工場からほかの工場にCyborg部隊を送ることができる
  • 敵または中立の工場にCyborg部隊が到着したら戦いが起こる
  • 戦いはCyborg数の多いほう勝利し、数の差分だけ生き残る
  • 戦いに勝ったら工場を占領できる
  • 最終的に相手を全滅させるか、400ターン後にcyborgの多いほうが勝ち
  • 1ターンに複数の部隊を送ることができる*
  • Cyborgを10消費して、工場のCyborg生産数を増やすことができる(3まで)*
  • 2回まで爆弾を送ることができる*
  • 爆弾を被弾すると、工場のCyborg数が半分、または10まで減る(小さいほう)*

(*はリーグが上がるごとに追加されたルール)

実装
1ターンの制限時間が50msしかないので、深く手を読む方針はとらなかった。基本的に、(1)危ない自工場があったら助ける(2)生産力のある中立工場があったら占領しようとする(3)敵に爆弾を送ってみる(4)敵工場を占領しようとする(4)遊んでる工場があったら前線に兵を送る、の優先順位で手の候補をいくつか作成し、そこから21手くらい先までシミュレートして局面評価がベストのものを採用した。

反省
序盤にいろいろ考えすぎて実装が遅れたのが良くなかった。Topcoderのマラソンマッチと違い途中でルールが変わるし、またリーグが落ちることは(たぶん)ない仕組みなので、軽いコードをどんどん書いてSubmitしていったほうがよさそうだ。シミュレーション中の手や評価関数がまったく詰められなかったのも反省点。

結果はぎりぎりシルバーリーグの103位/311人だった。次回はシルバー上位を目標にしよう。