ちゃっくのメモ帳

ちゃっくがメモしときたいことをメモしとくよ

ICFPC2018に参加しました

チームIQ1はICFPC2018に参加しました

メンバーは すごぷろ(@jken_ull)、kuwa(@lrmystp),zakuro(@emotionalcattle),chakku(@chakku_000)でした。
チームリポジトリはこちら
github.com

結果はLightningで17位、Fullで45位


1日目(Lightning)
10時過ぎにメンバーが集まる。
ルールを確認して、とりあえず僕はデフォルトのトレースを圧縮とFlipをできる限り遅らせる方針、すごぷろさんはBFSをしていき、harmonicsをできるだけLowにする方針。
kuwaさんはencoder,decoderを実装。さらにインタプリタを実装した。
zakuroさんは、headless chromeを使ってローカルでテストを回せるようにし、更にseleniumを使って全てのテストケースの複数角度からのスクリーンショットを取るとかした。

kuwaさんがencoder,decoderを作ったのはプログラミング言語の差異を埋めるためで僕がC++、すごぷろさんがpython、kuwaさんがOcamlを使っていてこの言語間をテキストファイルを使って受け渡していたが、流石に遅すぎたので途中からzakuroさんがC++用のencoder,decoderを作ってライブラリ化し、僕はmodelのdecoderをライブラリ化した。

すごぷろさんは実装に苦しんでて、Lightningはとりあえず僕のデフォルトの圧縮とFlipをできるだけ遅くする方針で提出。

2日目(Full 1日目)
11時過ぎにメンバーが集まる。
ルールの変更に伴ってすごぷろさんはAssembleの並列化を行っていた。
僕はとりあえずDiassemble,Reassembleのデフォルトトレースの圧縮をした。
気がついたらzakuroさんとkuwaさんはencoder,decoderを新しいルールに適用していた。
zakuroさんが再び全ケースのスクリーンショットを取って「恒等関数っぽいものがある」って話しをしてたがハッシュを取ったら違っていた。
夜にはすごぷろさんがAssembleの並列化に成功した。
僕とzakuroさんはDisassembleを8個のロボットの並列で行う実装をしていたが実装が辛い。
kuwaさんはReassembleのFlip最適化をしていたがどうなったか知らない。
合間の時間にFHCを2つだけだしたら1つ目が落ちた。

3日目(Full 2日目)
すごぷろさんはお仕事があるので会社に出勤。
zakuroさん、kuwaさん、僕は授業とゼミがあって時間がとれず。
とりあえずzakuroさんが並列Assembleを逆順にしてDisassembleを最適化した。
僕は12時位にReassembleのFlip最適化を実装したが残り1分で提出したら出すファイル間違えて提出失敗した。


感想

チームが正しい点数計算できるならば提出する必要がないため、バンバン提出してたIQ1は途中の順位は良かったが、基本的にデフォルトトレースを改善する方針をとっていたため最終的な順位は良くなかった。
ロボットの分裂を使うと実装が重くなって辛かった。
チームで「こういう方針どう?」みたいな相談をしながらやるのはかなり楽しかった。
バイナリファイルに対する最適化をいくつか持っておいて誰かが出力したトレースファイルを入力にして改善したトレースファイルを出力するみたいな感じになってる部分があって、これは分業という観点では優れていたが、結局並列ロボットの最適化は難しいので、デフォルトトレースファイルが最初の入力になってしまい、最終スコアがなかなか伸びなかった。
会社によっては合宿場とか使ってやってていいなぁって思った(僕らは研究室に集まってやってたが、朝来るのと夜帰るのが面倒くさくなってしまう)。
僕らも合宿場でやりたい....