02:57しばらくマラソンはお休みのつもりだったけれど、大型連休と重なったので参加しました。問題http://www.topcoder.com/longcontest/?module=ViewProblemStatement&rd=13795&pm=10410一人遊びゲーム。ランダムに与えられるタイルを、ある規則に従ってN*Nの平面上に置いていく。何回かは続けてパスできるけどパス回数を使い切ったらおしまい。できるだけ長く続けましょう、という問題(いろいろ端折ってるおおざっぱな説明)。次のタイルは何かに関する情報は得られないので、一手ごとにその時点での盤面の情報だけを基にして置く場所を決めないといけない。盤面がどれだけ有利な状態かどうかの評価関数を作って、評価が一番高いところに置いていく、という感じで。一列そろえることはあまり考えずともよさそうです。長く続けられるようにしておいたら、自然とラインはできて消滅していくので。評価関数の調整は主に試行錯誤です。あとは、スタートして10手くらいで詰んじゃってるような上手くいっていないケースをローカルのテスト結果から見つけて、どうして詰んじゃったのかをビジュアライザで確認して、それを回避するような処理を入れていきました。環境構築、自明解(とにかく最初に見つかった配置可能位置に置く)で提出。次のターンでパスしないといけなくなる可能性を最小にする位置に置くようにした。コピーするのではなく差分管理するようにして高速化すると、最悪でも5秒程度で収まるように。囲まれている箇所に優先的に置くようにしたらけっこう上がった。パスできない状況かどうかで評価関数を変えてやると少し改善。改善要素が思いつかなくなったのでひたすらパラメタ調整でチューニングするもほとんど上がらず。5/131感想スコアリング方法がちょっと特殊だったので、改善度がローカルテストで測りがたかったです追われる身は気分的につらい。スロースターターの方が穏やかな気持ちで戦えますね。やったけれども、山登り法とか使ってプログラム的に決めてやるべきものなんだと思います今回もまた最後のほうでソースコード管理がぐだぐだになってしまった。次回こそはちゃんとバージョン管理システム使うビジュアライザのマニュアルモードでやったら自分が組んだアルゴリズムに結構負けて「情報科学すげー」と思った今回は連休中だったせいか日本人の参加が多かったようです。参加者増えてくれるといいなぁ。Japan(東京大...>。