第30回全国高等専門学校プログラミングコンテスト競技部門に参加しました

はじめに

優勝しました。


開発について

 去年のリポジトリを参考にしつつ、汚くなったコードの書き直しも兼ねて新しいリポジトリで開発を始めました。 開発はLinux環境で例年通りC++とQtを使い、基本的なフォルダ構成などは去年と同じものを使う事にしました。


 開発初期に異常なやる気が生えるのはどこも恒例の事だと思うのですが、うちの部門もそんな感じでした。4/1のテーマ発表と同時にリポジトリ作成がされ、Visualizerの仮完成とゲーム進行部分の仮完成が4/3、各エージェント独立の簡単なBeamSearchができたのが4/4らしいです。


 基本的な部分が終了した後はcsv入出力関連の整備とかboostを使ったPythonとの通信とかロクに使わないアルゴリズムの整備とか適当な事をやっていました。5月から7月辺りでちょっと時間をかけて機械学習方面や強化学習をやってみたのですが、いやこれ無理でしょ、みたいな気分になって終わりました。

6月以降になるともう既にやる気を失っていて、8月辺りになると他の行事(SuperConとかJOI夏季セミナーとか)もあって自分はほぼ開発をしていませんでした。戦略を思いついたのは8月の後半あたりでした。

9月の前期期末試験が終わった辺りから流石に危機感を覚えたので、8月に思いついたものを実装して、通信部分を完成させて、10月に入った辺りで暇ができたので余った一週間ぐらいで通信確認+模擬対戦用のサーバーを実装しながら適当にバグ修正と本番向けの練習をして本番に臨みました。


 開発フローとか各自の担当部分なんですが、だいたい適当です。行動情報やフィールド情報のjsonへの変換部分とPythonを用いたサーバーとの通信部分と、あとはUIを中心としたちょっとした修正とか機能追加を他の人に投げたりしました。


アルゴリズムについて

NAPROCKがあるので一応それまで書かない事にしますが、だいたい他チームが想像している通りだと思います。


本選時の様子

比較的真面目な文体で書くのがつらくなってきたので、この辺から適当です

日曜日(本選1日目)

当日に組み合わせ発表があって、予行でもファーストステージでも仙台名取(去年の優勝、決勝でボロ負けした相手)と戦う事になった。実質決勝(?)

予行演習

うちの見立てでは大体半分とか6割ぐらいが通信失敗だろ〜みたいな感じだったんだけど、予行演習をすると7割とかのチームが死んでてびっくりした。
うちのチームは情報取得や通信に失敗する事なく動いたのでよかった。普通に動いて3勝とかすると微妙に注目される気がしたので、人力操作でエージェントを初期配置に戻して踏んだタイルも消す遊びをしてて、ちょっと楽しかった。

ファーストステージ

仙台名取がとてもこわかった。一戦目は相手が数ターン行動に失敗したりしてたから余裕があったんだけど、二戦目はこの大会中でうちが戦った中で一番負ける可能性が高かった気がする。(初戦での点差があったからある程度は負けても一位だったし、二位でも通ったからまぁ問題なかったけど)

月曜日(本選2日目)

前日の対戦結果からだいたいの組み合わせが分かっていたので、それらのチームのファーストステージでの様子とかを確認していた。連絡会議で決勝8エージェント10秒とか書いてあったのでマジかってなった。(8エージェント15秒になると思ってた)

セカンドステージ

前方に与謝野明子がいて面白かった。

準々決勝

ここから同時対戦がなくなって、1対戦を3人で見れるようになったのでけっこう楽になった。

準決勝

相手がすごい強くて、いい勝負だった。公開フィールドの方の勝負の終盤辺りが特に面白くてよかった。(いい感じに領域を潰しあえたので楽しかった)

決勝

非公開フィールド戦の辺りからカメラが後ろに回ってきて、いろいろ微妙な事にならないかなぁって言ってた。非公開フィールドが明らかに領域を取る前提の設計だったんだけど、最終的にはタイル点で数百点レベルの差が取れてよかった。

感想

今年も例年通り(特に事前の情報関連で)たくさんガバがあったと思うんだけど、まぁいつもと比べるとけっこうよかったと思う。

人力で勝った感じがあってとても申し訳ないんだけど、高専プロコンはアルゴリズムコンテストではないと思っているので・・・(人力コンテストです、ごめんね)


これは燃えそうな発言なんだけど、通信関連で失敗しない+30分で書けるビームサーチぐらいの強さがある 辺りが戦える最低限のラインだと思っていて、そうなっていないチームがかなり多かった気がする そもそもこの大会向けに時間をかけて開発しているチームが全然いないんじゃないかと思いました(それはそう?)(うちみたいに半年かける所って実際どのくらいあるんでしょうか、分からない)

あと機械学習とか強化学習の方面をやるチームがとんでもなく多かった、パンフレットを見たらだいたい半分ぐらいのチームがそうで、うちが上手くできてなくて実はめっちゃ強いものが完成する、とかだとアルゴ書いた人間(ぼく)の責任になってしまうのでこわかった。