CODE VS 4.0

CODE VS 4.0に参加した。27位、70点、6145ターン、102714ms。ターン数まで同じになることがほぼ無いので、意味が無いけど、思考時間はランキングに載っている100人の中でyosupoさんに次いで2位。

f:id:kusano_k:20150210002054p:plain

プレイ動画

ソース

https://bitbucket.org/kusano/codevs4/src

戦績

周回 chokudaAI colunAI gelb grun lila rosa schwarz zinnober silber
1
2
3 ×
4 × ×
5 × × ×
AIの概要

速攻型。資源マスの上にワーカーを置きつつ、ワーカーを1体右下に向かわせる。100ターンを超えたらワーカーの作成を控えて拠点を作る。拠点から戦闘ユニットを出して敵の城を探索し、敵の城に向かって戦闘ユニットを固めて送り込む。

資源マスの探索

9マスずつ間を開けてワーカーを走らせ、虱潰しに探す。資源マスを見つけたワーカーは資源マスに向かわせて、資源を確保する。最初は用が済んだワーカーは探索に戻っていたが、後から見つけた資源にワーカーを置く余裕が無かったので、止めた。

資源マスの確保

資源マスには5体までワーカーを置く意味がある。城や近くの村から送る手と、最初のワーカーが村を作り村でワーカーを作る手がある。どちらが得かは資源の距離と現在の生産量による。面倒なのでプログラムでシミュレートして、どこの資源に村を作るかあるいは作らないかを判断するようにした。ソースコード中のbuildVillage。資源ではないところに村を作るのが最善になることもありそうだけど、誤差でしょう。

拠点作成用ワーカー

最初から右下に向かって拠点を作ることを目指すワーカー。最初は専用のワーカーを使わず、たまたま一番右下にいるワーカーを使っていたが、専用のワーカーを用意した方が強かった。一応、敵を躱しながら移動するが、敵に追いやられて明後日の方向に行くことがあったので、ほとんど右か下かを選ぶだけ。

敵の城の探索

拠点から敵の城が存在する可能性のあるエリアの端に向けて戦闘ユニットを送る。最初は敵の城が見つかるまで送り続けていたが、各方向に1体だけ送るようにして、後は城が見つかるまでとりあえず右下に向かって攻撃部隊を送るようにした。たいていは敵の城を見つけられる。失敗して攻撃が遅れた例はプレイ動画のステージ20。

敵の城の攻撃

敵のユニットの攻撃範囲に味方のユニットが複数いるとダメージが分散されるので、固めたほうが強い。ルールに10体以上は10体とみなすとあるので、1マスには10体まで。10体, 20体, 30体と作る度に50体まで増やす。最初は、10体×2マスと、20体×1マスは同じことだと思っていたが、chokudaiさんの放送を見ていて、ルールでは「攻撃範囲に10体」ではなく「1マスに10体」だったと気が付いた。↓のツイートは嘘ではない。

味方の戦闘ユニットの攻撃範囲の敵は少ない方が良いので、戦闘ユニットの中心を敵の城に重ねるのではなく、攻撃範囲の先端が敵の城に当たるようにしている。

戦闘ユニットの種類を考えようと思ったが、grunがこちらの苦手なユニットを出してきたりして面倒なので、ランダムに生成している。

資源マスの奪取

発見済みで味方ユニットがいない(=敵に占拠されている)資源に、ときどきアサシンを送っている。

味方の城の防御

敵が近づいてきたらワーカーを生成する。戦闘ユニットに比べれば弱いけど、無いよりはだいぶマシになる。

反省

上位陣の多くがそうなので、資源の確保をちゃんとするべきだった。そのためには味方の城を一定期間守る必要があるので、拠点は城の上に作るべきだった。何となく守ってもじり貧かと思っていたけど、資源をちゃんと確保すれば守り切れるらしい。

他の人がやっていてなるほどと思ったこと

予想外の攻撃を受けたら近くに城がある。受けなかったら城が無い。ダメージを与えた敵が与えたと同時に死ぬ場合があるので、一工夫必要ではあるらしい。村の視界もちょうど10マスなので次のターンで村を作れば確実。上位陣にとっては当たり前だったらしく、誰も探索用のユニットをばらまいたりしていなかった。

敵AIによる思考ルーチンの切り替え。やはりこれをしないと全勝は厳しいらしい。拠点の場所などを見る手もあるけど、IDが全体を通して連番ということから敵のAI作成数が分かり、そこから推測できると。

(ルール変更前の)CODE VS 4.0 - ustimawのブログ

ステージごとの学習。ステージごとにプログラムが起動されるわけではないので、ステージごとの初期化を忘れてバグるたびに、何でプログラムが動き続ける仕様なんだと愚痴っていた。本戦で最初のステージで敵が速効だと分かったら対策をすると言っている人がいて、なるほどと思った。予選でも、あるAIが出てきたら次からは推測の候補から外すとかできるのかもしれない。

村による城の防御。全く思いつかなかった。スペック表を良く見たら、どう考えても城のほうが優秀だった。「【特徴4】 城の上に村が乗る!前代未聞!」という煽り文句をただのネタだと思っていたが、重要なヒントだったのか……。