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人だった。次回はシルバー上位を目標にしよう。