ICFP Programming Contest 2012

去年に続いて今年ものとがわさんパンピーやった…(恒例)

問題はここ.落盤や浸水やヒゲなど複雑な形状を持ったLambda鉱床からLambda資源を掘り出すLambda探索ロボットを作るというもの.コンテスト開始時に与えられた障害要素の他,コンテストが進んでいくと前出の浸水やらWadlerのヒゲやらトランポリンやら高階Lambda鉱やらの追加アップデートがある.(この追加アップデートについては後述)

さて探査どうすんだこれと思って,よくわかんないから盤面評価値とっていいやつ残しながらランダムにフラフラ動き回ってみるだけのAIを作ってLightningに提出.最終提出物もまぁフラフラの範囲が広くなったりあまり手が進まないようならリセットしたりするようにしただけでLightningと然程変わらないという感じになった.要点に岩が落ちてくるタイプのマップとか大体対応できないし,そもそもだだっぴろいマップだと迷子になったまま死ぬ.まぁあいかわらずの画面見ない勢ップリである.しかもこの方法,進捗に合わせたビジュアライズができない.

もっとちゃんとやるとどうなるんだろう?TSPっぽい感じになっちゃうので,要点間の移動方法であるロボットアクション列をある程度バーっと作って持っておいて,要点間接続順と移動方法にどれを選ぶかとかでGA?とかだろうか?でも一度岩の横を掘っておいて掘った反対から岩を押して後々無害な箇所に移動させとかなきゃならない場合とか全然上手く対応できる感じしない.ある程度のパターンは覚えさせておく必要があるんだろうか.適当にLambdaに配置状況やDijkstraで取り易さを重み付けして取る→取った後の盤面状況から取り易さ再設定とかを繰り返す?

とりあえず実装はHaskellに決め打ち.試行回数の関係上,AIはともかくシミュレータは何も考えず速度出る言語選んだほうがいいのは毎年のことなのだが…わかってる.わかってるよ.しかしコード汚ない.SIGINT拾って探索止めなきゃなので,探索コードのループをcontrol-monad-loopにしといてSIGINT来てたらすぐexitしてるが雑すぎる.仕様追加に対する応答はまぁ悪くない.どうせ何かの型に要素追加して処理するので,HaskellerがHaskell薦めるときのお決まりの文言のひとつだが「どっかでミスってたら型エラー」.


今年の運営もコンテスト開いて頂いてありがとうございます.

なのだが,この追加アップデートがアルヨーという問題設定は正直賛否分かれる部分があるだろう.自分は否のほうだ.

3日という割と長い期間のコンテストなので,参加者を飽きさせないという意図でこういう措置を取ったのだろう.だけど,これは事実上コンテスト期間を最終追加仕様公開〜締め切りまでに縮めてるのと類似の効果がある.わざわざ3日という長い期間設定なのにもったいなさすぎる.最初から最後までずっとLightningみたいなもんだ.最後の仕様公開以後はプレイできないという事情な参加者が,とりあえず2日目までの結果でsubmit〜ということもしにくい.飽きさせないための施策としてはちょっと安易だったのではないか?個人的にはこれが来年以降の流れに反映されないようにと祈っている.

他にもちょっとこれエェー!?って感じの運営状況だった.前日に試行環境が変わったり,参加登録がEventbriteだったり,submitがGoogle Drive経由だったり,スコアボードが無かったり.まぁ,必ずしも独自システム作ってリアルタイムで他チームのスコア状況が観戦できるような問題設定しなきゃならないってわけでもないのだろうが…