CodeVS

なんかあるらしいんで参加してみた。
なにげにマラソン系は初参加。
ソースコードhttps://github.com/cos65535/CodeVS

12/01

VMwareからはできない様なのでVisual Studio 2010で書くことにしてみる。
入力を取るところまで書いてみて実行してみたらなんかやたら重い。
どうやら1回実行する度に1コアずつフルに使うという、ひどい仕様だったので直るまで放置することに。

12/02

CPUを使いまくるのは直ったっぽいんで真面目に参加することに。
とりあえず、敵の移動通路が存在するかどうか判定する関数と金の計算をちゃんとやってルール違反で負けないようにすることに。その2つができたんでタワーをランダムに配置するAIを作ったらクリアできてしまった…。
ルールを見ていたらレベル4ラピッドタワーが異様に強いように見えたんで、敵の出現地点の横に1個ずつ置いてみるAIを組んだら500kも残った…。上位はもうちょい頑張ってる気がしたけどやる気がなくなったのでまた放置することに。

12/03,04

微妙にAIを修正して507kまで稼いでみた。
1位の人の所持金がバグってたんで調べてみたら、レベル15000のタワーとかが作れた…。せっかくだからvalidな入力でアンダフローさせてみようと、タワーを1000万回立てたり壊したりさせる出力を作ってみたら一向に終わる気配が無かったんで諦めた。

12/14,15

放置してたら追加ステージができたんで小手調べでラピッドタワーを大量に置いてみたら50面くらいで金が尽きて死亡。研究室の発表だとか忘年会だとかで忙しかったんでそこそこで切り上げることに。
あと、そろそろシミュレータを作って手元で実行できるようにした方がいい気がしたんで作ってた。4重ループとかあって遅い気がしたがそんなことはなかった。

12/16

一つのゴール地点を除いて他はタワーで塞ぎ、塞いでないゴール地点からランダムウォークで道を作るAIを作ってみた。4000個くらい作ってスタート地点からの距離が一番遠くなる奴を採用する。バグが取れてとりあえず完成したら結構良い感じに敵を遠回りさせることに成功したけど、敵があほみたいに強くて70面くらいで金が尽きてどうしようもない状態に。

12/17

KMCの追いコンが始まるまでにクリアするつもりで作業を開始。
手始めに前作ったシミュレータを使ってダメージを食らう場合はタワーを増やす戦略を採用することに。金があるかぎり無敵のAIになった。ここの時点で76面くらいまで到達。死なないようになったので道を作る際には、とりあえず安いタワーにしといて後から増強することに。ここまでやってやっと全ステージクリアすることができた。

12/18

タワーを置いてスタートからゴールまでの距離が伸びる場合はとりあえず置くAIのバグを取って、道の長さを伸ばしてみたら10kくらい稼げた。さらにフリーズタワーでゴール1歩手前で敵が止まるようにしたら+10kくらいできて1位に。

12/21

インプットをよく見たら敵のパラメータは固定だということが分かったんで、それを使ってステージを複数回探索して見ることにした。

12/22-24

マップを400回くらい探索したら60k後半くらいまで伸びることが分かったけど時間が全然足りなくて40回くらいが限度だった。しかし飯を食いに行く途中にインプットの地形がほぼ同じだから20個くらいのインプットで良さげなタワーの配置を前計算しておけばいいことに気がつく。それを実装してみたら80kくらいまで伸びた。ついでにダメージを食らってでもお金を節約するコードを書いたら+2kに。

12/25,26

前半戦を強化することに。てきとうに探索するAIを書いたら520kくらいまで行ったけど遅すぎたので、やっぱり前計算させておくことに。半日くらい放置させておいたら普通に前半戦で52.9kを取れるようになってた。

12/27,28

いろいろ修正したりバグ取ってたら99,985とかいう寸止めを食らう。なんかやる気が無くなったんで、何も考えずに前処理を強化したら100k超えた。

1/6

予選終了。一応2位になった。colunさんに負けたのはたぶん2番目以降のスタート地点の距離を引き伸ばすのをさぼったのかフリーズタワーの使い方が下手なのが原因な気がする。

1/11-13

決勝用のコードを書く。g++でコンパイルできるようにして、プロファイルを見ながら主にタワーが置けるかどうかをチェックする部分を高速化した感じ。決勝用デモプログラムに食わせてみると39面で死亡。というか15*16のマップなのにスタート地点が4箇所もあるとかなってて、ステージがひどすぎた。しょうがないので、ダメージを食らいそうになったら迷路を作りなおすAIを作ったり、乱数を変化させたりして無理やりクリアしてみた。最終的には1マップにつき2,300msくらいでそこそこの解を出すようになったのでそのプログラムを提出した。

1/14 決勝

リハーサルのために朝5,6時くらいに起きて東京へ向かう。予想通りリハーサルは一瞬で終了して、本番が始まるまではひたすらにだべってた。
決勝自体は1回戦はほぼ不戦勝、2回戦はそこそこいい戦いをしていたけど、残金が少なかったし、敵の猛攻に耐え切れず死亡でjelliesさんに完全敗北した。
フリーズタワーを11個置かないといけないところを10個にしていた点が心残りだけど、それでも負けてた気がするし相手もそんな感じなこともあるんで言っても仕方がない。
決勝が終わった後は懇親会でやっぱりだべってた。AIの話をしたりとエンジニアの方とか普段話さない人と色々話せて良かった。

感想

2000面に拡張されて以降はアイディアを思いついて実装すればするだけ点数が伸びておもろかった。あとAIのメイン部分がランダムウォークなのは珍しいらしくユニークなのを作れて満足。ただマラソン系はやっぱり時間を吸われるなあと実感。

図でよくわかるAIの進化の歴史

12/15

12/16

12/17

12/18

12/21

12/24

01/04


決勝用デモプログラム 39面