神戸市立高専 第34回高専プロコン競技部門(参加記・戦略編)
はじめに
第34回大会の競技部門、自由部門、課題部門に参加してきました! この記事では競技部門について書いていきます。「無双職人~チームから追放された俺が闇の力で世界最強に!?~」というチーム名で参加しました。
戦略
今回のルールは結構色々な戦略(以下solver)が考えられるな~と思い、どのようなものが最良かシミュレートしていくことにしました。
競技のために我々が作ったsolverの動きを以下に示します。
- solve1
一番近い城から順番に囲んでいく、一番単純なsolver。単純ながらシミュレート時点では凄く強かった。
- solve2
フィールドの周りを囲む、理論値を目指すsolver。試してみると全然ターン数が間に合わないし妨害対策も大変そうなので結構ぽんこつ。
- solve3
solve2の強化版。しかしやはり役には立たない。
- solve4
職人自身の回りを城壁で囲いながら、ある程度の重みを設けた乱択で移動先を決定するsolver。要するに市松模様を描きながら移動する。乱数の気分によって強さが変動する。
- solve5
斜め方向の城壁が破壊できないことを悪用して、相手チームの職人が侵入できない領域を作り、その中を囲っていくsolver。特定のフィールドでかなり強い。
- solve6
点対象のフィールドがあることを悪用して、相手チームと点対象な向きに同じ行動を行うリアルファイト不可避なsolver。しかし使うことはなかった...
- solve7
職人を建築役と妨害役に分けて活用させるsolver。結構完成がギリギリだったのでどのぐらい強いか試していない...
そして色々試した結果、一部のsolverは人力で誘導することでより強い動きが出来ることが分かったため、GUIから指示を送れるようにして挑みました!
これが大当たりでsolve4が物凄く強い動きを見せてくれるようになり、本番はほぼsolve4のみを人力で誘導しながら挑みました。
企業賞の考察
出場した結果は惜しくも上位16位地点で敗退しましたが、嬉しいことにアバナード様から企業賞を頂くことが出来ました!
なぜ受賞できたのか、これは恐らくシステムの完成度によるものだと思います。システム編で細かく書こうと思っていますが、かなり様々な機能が容易に扱えるように設計したことが大きかったのでしょう…実際、かなり完成度が高いものができたので満足しています。
コンテスト時の流れ
という事でここからは実際のコンテストの際での動向や完成度などを適当に。結構ギリギリでした。
2日前まで
HTTPリクエストについて何も知らなかったため、システムやGUIの基本的動作が出来上がったのが1か月前くらいでした() そこからsolverの開発や運営に提出する資料の作成、次から次へと出てくるバグ修正等を行っているとあっという間に1週間前に。
その時点でようやくバグがほぼなくなったため、急いでシミュレータを回して考察しながらプレビュー機能(preview.py)を作っていました。ちなみにこの時点で人力誘導システムは未完成(なんなら未着手)、solve4,solve5もあまり完成度は高くありませんでした。
前日~1日目朝
ホテルに到着し、前日の受付を終えて夕食を食べてから徹夜での開発が始まりました。特にこの日の朝に人力システムを作ることを決めたため、サンダーバードでの移動中から作成し続けて23時半ごろに完成させました。これの実装が無ければ恐らくかなり初期の段階で負けていましたね...
またsolve6や様々なsolver、機能の改良を朝まで続けていました。人力システムを急に追加したため、それに対応したプログラムに変更しなければならないなど、かなりどたばたしていました。
ファーストステージ競技中
事前にシステムをしっかり構築していたためか、通信部は問題なく動いてくれました。正直まだまだ修正点が多かったため、予行演習中、本番の競技中にもsolverの改良、バグ修正を行っていたりしました。
ファーストステージ第1試合は鈴鹿高専との競技でした。C13は相手の妨害を全く受けることのないsolve5に少しだけ指示を与える形で広範囲を囲う戦略で快勝しました。
第2試合は大分高専と当たりました。閉鎖的な空間が無いためsolve4を人力で誘導しました。かなり良い動きをさせることが出来、すぐにファイナルステージへ出場できることに。
1日目会場
ファーストステージが終わって時間に余裕ができたため課題部門、自由部門を少し見てから続きの修正をやっていました。
その間セカンドステージを見ていたのですが、物凄い高得点が次々に出ていて恐怖していました...めちゃくちゃ得点しまくってましたがあれは攻撃全振りにしてたんですかね?
1日目夜~2日目朝
1日目の試合データが公開されていたのでプレビューできるようにしたり、対戦相手の分析をしながらsolve1,solve4の調整をやっていたりしました。
特に複数試合対応の誘導機能が出来ていなかったのでその機能を実装したり、solve4のアルゴリズムの改良をしたりと細かい部分を詰めていました。ちなみに1日目の夕食はソースかつ丼でした。
ファイナルステージ競技中
ファイナルステージのフィールドはC17、B17とどちらも侵入不可な領域を作れないフィールドだったので誘導ありのsolve4のみで挑みました。
第一回戦での高知高専との試合は上手くいったのですが、第二回戦でハノイ工業大学と当たってしまい、500点の僅差で負けてしまいました...頑張って妨害してもいつの間にか得点が伸ばされているという、なかなか恐ろしい感覚を味わされました。流石4位。
結果はTOP16。行動の決定方法にはかなりシンプルなものを使っているため、結構上位まで行くことが出来て満足です。特に4位のハノイに対してかなり善戦できたのは嬉しかったです。
敗退~ファイナルステージ決勝戦
ファイナルステージで敗退してからすぐアバナード様から企業インタビューを受け、そこでsolverの説明やsimulatorシステムを一通り説明しました。これが企業賞に繋がったと思うと、ちゃんと説明するのって大切ですね...
インタビューが終わってからファイナルステージの決勝・第3位決定戦を見ていました。点の取り合いやギリギリの駆け引きが素晴らしかった...やはり上位層は動きが凄い。
閉会式
企業賞の発表が始まってすぐ、1番目に呼ばれたのでとても驚きました。競技部門へ贈られる企業賞は6年ぶりとのことらしいです...アバナード様、本当にありがとうございました!
大会終了後
いくつか大会が終了してから実装した機能もありました。ターン数をGUI入力できるバーや2日目の試合の記録、いくつかのバグ修正も行っています。
でもまだ全て完璧には動いてくれないです...知識不足で微妙な事をしている箇所もありますし、本番では完璧に動いてくれて本当によかったなぁと感じています。