Hatena::Grouptopcoder

(iwi) { 反省します

TopCoder: [[iwi]] / Twitter: @iwiwi

 | 

2011-06-22

ICFP Programming Contest 2011 反省

23:51 | ICFP Programming Contest 2011 反省 - (iwi) { 反省します を含むブックマーク はてなブックマーク - ICFP Programming Contest 2011 反省 - (iwi) { 反省します ICFP Programming Contest 2011 反省 - (iwi) { 反省します のブックマークコメント

問題が神がかり的に面白かったし,割と本気度の高い 6 人チームで参加していた. とても楽しかったが,成績は振るっていない (と思う). 反省度高い.

チーム名は Unagi The Gathering です.何故か Joho というチーム名であると勘違いされまくっている.

今年の ICFPC の問題

概要

まず,ICFPC (のアタリ年) のアツさを (特に優秀な友人であり潜在的に未来の僕のチームメイトである) 皆に知ってもらいたいのでタスクの話からしてみる.

今年の問題は,2 人対戦のカードゲームの AI 開発. 両チーム 256 個のスロットを持ち,各スロットが HP を持ち,死んだり,殺されたり,生き返らせたりする. 皆殺しされたりしたら負け.

各スロットは,関数または値を保持する. 各ターン,プレイヤーは,1 つのスロットに決められた関数・値 (これがカード) のうちの 1 つを,スロットに適用するorスロットに適用されることができる.

カードの種類によって,攻撃できたり回復できたりして,引数によって,何処を対象にするだとか,量とかが決まる.

カードは,攻撃とか回復というようなカードだけでなく,カード達はラムダ計算っぽくなっていて,例えば「S」とか「K」とか (ラムダ計算を習うと出てくるアレです) があったりするので,色々組み合わせると,一気に凄い量殺せたりもする.

面白さ

このタスクは,はじまった瞬間,「は? AI つくるだけ? げ…」 と思いそうになったが,問題文を読み始めると盛り上がりはじめ,取り組み始めると神がかり的に楽しい問題であった. やばかった.

例えば,このゲームは,非常に面白い要素が詰まっていたと思う.参加者がやった (かもしれない) 事は以下のよう:

  • 処理系開発
    • プレイヤーが状況を把握するために,ラムダ計算っぽい処理系を開発
    • 処理系が間違っていると訳分からなくなるので,念入りな検証
  • コンボ開発
  • AI 開発
  • 対戦系開発
    • 与えられた処理系が微妙なので,特に対戦ログなどを容易に観覧でき解析できるような仕組みの開発
    • 手元で開発してきた AI 達を自動的に対戦させ,強さを調べたり,出荷前の検証にしたりする仕組みの開発

ゲームのパラメータや仕組みもかなりよく調整されており,良かったと思う.しいて言えば,与えられた処理系が微妙なのと,デュエルサーバが微妙だったのはもうちょいなんとか.

経緯

ICFPC は岩田 (とたまにキタマサ) と,割とゆるく (例えばリアル集合はせずに) 参加していた.

しかし去年の問題は,なんやかんやかなり楽しかったし,よく知る人たちのチームである pure pure が優勝していたのも大きな刺激となり,ICFPC 頑張りたいと去年から思っていた.

(2009 も日本人様が優勝しているけれどその時は問題全然面白いと思わなかったのでホゲーという感じだった)

と思っていたけどしばらく忘れていたが,imos が東京に着て参加したいというので,そこまでするなら本気参加するという感じで,メンバーを少し良い感じの人数まで増強した.メンバーは:

  • iwiwi
  • wata
  • imos
  • ir5
  • hos
  • tos

何気に,全員が何らかのプログラミングコンテストでの世界大会進出の経験を持ち,TopCoder の Max レートを平均すると 2800 に至るチームとなっていた.

また,皆良い個性を持っていたと思うし,その上で他の分野への理解も無くはない感じで,まあ悪くないチームだったとは思う.


参加記

http://d.hatena.ne.jp/wata_orz/20110621/1308674762

大体これですのでいいや.

僕は,最初にちょっとコンボ開発の議論に参加していたが,その後はほぼずっとコーディングマシーンだった.

ラムダ計算処理系AI フレームワークAI (の半分ぐらい) を書いた. C++

ラムダ計算処理系は,メモリがやばいなーみたいな感じになっていたので,到達可能なノードにマークし残ったノードを delete するガベージコレクタ (笑) を書いてたまに動かすようにしていた.

おもったこと

感想

ICFPC はすごい楽しい. (問題の質に毎年ばらつきが有りますが…)

普通のプログラミングコンテストと,問題の大きさが全然違うため,自由度や,問われる能力の幅広さが全然違う.

世の中の多くの道具が使用可能であり,それらを活用しつつ自分でツールや環境を作ったりするところから始めなければならず,それらの質によって後々の作業効率が変わってきたりする,というのが面白い.

また,チームで参加するのが面白い.ICPC もチーム戦ではあるけれど, 3 人 1 台 PC という不自然な制限になっているのに対し,ICFPC は,作業を上手く分散させ,チームで上手くスケールさせていかなければならない.

こう言うのは,もちろん好みがあって,逆に,問題解決の綺麗な上澄みである,ほんの一部の決まった形式となる部分だけを出題される普通のコンテストの方が好き,という人も居るのだろうな.

昔も自分はそうだったと思うけれど,今では (それら普通の) コンテストだけでなく色々な能力をつけたい・アピりたいと思っているし,ICFPC はそういう力試しとしてめっちゃくちゃ面白い.


反省

これも大体岩田が書いてた.

  • 作業 (に取り掛かるの) 遅すぎ
    • 処理系できたのは多分,2 日目昼とか?
    • AIゾンビぶっぱなした後の戦略を組み始めたのが最後の夜とか?
    • orz
  • プログラミング言語
    • 始まる前は,最大公約数的に C++ でやりましょうと言っていて,反対していたのは C++ 全然できない岩田だけだったけど,なんやかんやいろんな言語のコードがリポジトリに散らばっておりディストピア
    • 普通にインスコされる処理系で動かず誰も使えない,とか,コードを C++ に移植する作業を長らくしてる人がいたとか,同じ機能持ったプログラムが何本も開発されてるとか,ワロタ
    • まあただ C++ はやっぱシンドイのは確かで,皆好きな言語使って簡単に協力できればベストなのだけれど.
    • messagepack-rpc とかワンチャンあるのかもしれないけれど,やっぱ普通に合体するより詰まらんミスでハマって時間ロスりそう.
    • どうするべきなんかなあ
  • チームワーク
    • 分担に関しては,そこそこ上手く分業して特に中盤は上手くスケールしてたとは思うけれど,結果的には,バランスが悪かったようだ.
      • 最初は色々
      • その後は,コンボ開発&戦略チーム:wata, tos, hos,AIプログラム開発チーム:iwi, ir5,その他いろいろ(チーム内対戦システム等):imos というかんじだった
    • 特に,最後は,コンボ開発チームは寝てて,AI 開発チームが修羅場ってた (うえに間に合わなかった+バグを残していた)

ぐぬぬ

http://www.paraiso-lang.org/Walpurgisnacht/store/scoreboard.html

これ観てると,終了後にバグを取ったバージョン (Revised) はかなり強いらしい,欝だ….

コードの結構な部分が僕なため当然ではあるが,バグの原因は結構が僕で,申し訳ないと思う. ただ,バグはどうやったら気づけたんかなあ. 少なくとも,自分は最後まで負荷率低くない感じだったので,役割分担が原因にあるのも確実だと言い訳したい.

もっとバグを恐れて,処理系の検証をしっかりシステマチックにやるであるとかするべきだったと思う.

あとは,戦闘で変な挙動をしないかを確認するため,やはり多くの AI を作り,色々対戦させ,ログをしっかり読む (ちゃんと読みやすいシステムを作った上で) べきだったのかなあ.

ただ,そういう仕事って,若干地味なため,皆やりたがらないのだよね…

まあそれ以前にもっと修行して出直したい.

LibertyLiberty2011/07/22 10:23Dude, right on there brtoher.

gvjpfyxqtggvjpfyxqtg2011/07/22 18:18I2JbIp <a href="http://btmgiyiretpv.com/">btmgiyiretpv</a>

ybbwznuupybbwznuup2011/07/23 18:429IBDGA , [url=http://ycsjdsfmjsjk.com/]ycsjdsfmjsjk[/url], [link=http://dmwozmntholb.com/]dmwozmntholb[/link], http://gfwltecbktfn.com/

jqsjrmovjqsjrmov2011/07/24 22:15SZXlmq <a href="http://dvuzdqalmvig.com/">dvuzdqalmvig</a>

zevmldzevmld2011/07/25 02:50XwSQK5 , [url=http://xkkxdmfexnfd.com/]xkkxdmfexnfd[/url], [link=http://vyjlenakuaws.com/]vyjlenakuaws[/link], http://bnvhqucxhyvh.com/

 |