2019年10月17日こんにちは、ひがしです。先日行われたprocon30の競技部門に参加したのでそちらの参加記を。敗者復活戦第二セッションHリーグ1位セカンドリーグ第二セッションHリーグ3位という結果です。ファイナルリーグに進むことはできず。今年のルール今年のルールは簡単にいうと陣取り合戦。お互いのコマを動かし、タイルにかかれているポイントとタイルを囲うことで取得できる領域ポイントを奪い合うというゲームである。去年も似たようなルールだったが、今年コマの数が試合によって変わる、事前にフィールドの情報が公開されるフィールドを用いた試合が行われる、人がコマとしての役割を担うのではなく、サーバーに回答を送信する、というような変更が加えられていた。今年のルールは見ていて盛り上がれる、やっていて楽しいという控えめに言って最高のルールだった。今年は僕以外プロコン本戦経験者もいない上にsolverを書いたことのある人が誰一人いないというチーム編成になり、聞いたときは本番が人力にならないか心配だった。僕らのチーム、「<ESC>押したら異世界転生した件について」は以下の4つを軸に試合を行う予定でスケジュールを組んでいた公開フィールド用solver非公開フィールド用solverGUI運営サーバーと通信するためのローカルサーバーが、本番で動いたのは非公開フィールド用のsolverと通信部分だけだった。これは僕の進捗管理力不足が原因。僕たちのチームはビームサーチ法とモンテカルロ木探索を中心に試合を行うために2つとも実装した。残りターン数の多い前半はビームサーチ法で枝刈りをしつつ探索を行い、残りターン数が少なくなってくる後半はモンテカルロ木探索を使う予定だったが、ビームサーチが落ちるバグに見舞われ最初からモンテカルロ木探索を使用することになってしまった。前期の話4月を全部溶かした。言い訳をさせていただくと僕が別の大会に出ていたからである。5月からkurokoji先輩の手を借りながら予選資料に着手した。solverを書くのも初めてなのでアルゴリズムの話とかをいろいろ聞きながらなんとか書き上げた。チームメンバーには日本語の添削をしてもらっていた。6,7月は何をやっていたのか覚えていなかったのでcommitを見てみたら貪欲法でsolverを実装していた。夏休みは、ビームサーチ、原始モンテカルロを実装していた。合宿が始まり、僕がビームサーチと原始モンテカルロを実装し終えたあたりで流石にテスト用のゲームサーバーを書かないといけないのでシステム詳細説明書を他のメンバーに投げ、そちらの開発に集中した。その後、なんやかんやあってGUI側の通信部分を僕が書いていた。Javaを一切触ったことがなかったのにかけたのは褒めてほしい。10月に入ってからはモンテカルロ木探索の実装をスタート。僕のアルゴリズム力不足でkurokoji先輩には終始質問していた。ちなみにモンテカルロ木探索の実装は大会の3日前に完了。大会0日目GUI、公開フィールド用solverは完成していない、非公開フィールド用のsolverは弱いと散々な状況だった。焦りしかなくてむちゃくちゃ怖かった宿には12:00頃にはついたのでお昼をマックで済ませ、開発をしていた。このときはパラメータの調整をひらすらやっていたが、一向に強くならず、焦りとイラつきがどんどん募っていた。夜中11時ごろかららずにテストプレイをさせつつ、僕はその横でパラメータの調整をする作戦に切り替えた。持ってその通り過ぎて草しか生えない。テストプレイのおかげでsolverの動きが少しずつ良くなってきたあたりで疲れてそうだったのでらずには寝てもらった。他のメンバーも長旅の疲れと開発の疲れで寝始めたので一人でパラメータと通信部分の調整を続けていた。「そもそも通信に失敗するんじゃないか」とずっと考えていて泣きそうだった。ちなみに不安は見事的中した。大会1日目1時間半の仮眠なんかで無事なわけはなく、体が無駄に暑い、食欲は一切なし、頭が痛いといった最悪のコンディション。会場に向かい、参加者連絡会議に出席し、開会式の会場に行った。開会式の直前に問題が発生、試合用のPC3台のうち、1台のOSが壊れた。なんでこんなタイミングで壊れるのか、直すべきなのかといろいろ考えていたら開会式が始まってしまい、直さずに予行演習とファーストリーグでは僕のX220を使用することにした。予行演習GUI、公開フィールド用のsolverは完成していないため、運営サーバーとの通信部分と非公開フィールド用solverのみでやることになったが問題発生、データが送信できない。僕は頭が真っ白になり、慌ててプログラムを落として見直すことしかできなかった。バグの原因も何もわからず予行演習が終わり、恐怖で頭がいっぱいになっていた。ファーストリーグお昼ご飯を食べずにひたすらプログラムの見直しをしていた。見直して運営が配布してくれていた簡易回答システムとの通信を確認して修正したプログラムを他2台に適応してる間にファーストリーグが開始。見直し、バグの原因らしき部分も修正していたため、「次は動く」という自信があった。僕らの試合が始まり、司会の方の「はじめ」の声でシステムを起動して、真っ先に起こったのはsolverが落ちたことだった。えびなとかりんとからも「solverが落ちた」との報告があり、慌ててエラーを読み、問題箇所を確認したところ、あまりにもひどいミスを見つけた。そのミスを修正し、もう一度solverを起動した頃にはもう非公開フィールド戦の後半がスタートしていた。通信できることは確認できたため、ファーストリーグ終了後、敗者復活に備えるべく、すぐに宿に帰りsolverの修正を始めた。夜GUIと公開フィールド用のsolverは完成する気がしなかったので開発を中断、非公開フィールド用solverの調整を手伝ってもらった。バグの修正をして、通信部分の最終確認、パラメータの再調整をした。この日の夜はめっちゃ眠かった。かりんとが必死に起こしてくれていた。敗者復活戦これで負ければ終わりだったのでめちゃくちゃ緊張していた。Slackを確認するとkurokoji先輩から「応援しています」というメッセージが競技組のチャンネルに届いていた。見た瞬間泣きそうだった。試合が始まりsolverを起動したところ、エージェントが動かなかった。頭は真っ白、プログラムを止め、また見直しを始めようとしたところ、かりんとのほうから「エージェントちゃんと動いてます」という報告が入った。そのおかげで冷静になり、すぐにバグを修正、その試合は勝つことができた。セカンドリーグテストプレイ中に一度も出会ったことのなかったエージェントが全員左下に進みそのまま停止するバグに遭遇した。そのまま負け、セカンドリーグ敗退という結果で終わった。負けた直後は「残念だったなぁ」くらいしか思っていなかったが、ファイナルリーグを観戦していろいろ考えるうちに悔しい気持ちが大きくなり、油断するとすぐに泣きそうだったのでその日の夜と翌日の移動日はぼーっとしてることが多かった。このブログを書いている今も勝てなかった悔しさとサポートしてくれていた先輩、チームメイトに申し訳ない気持ちでいっぱいである。進捗管理が全然できていなかった。僕がリーダーをするのが初めてだったというのもあるが、単純に自分の担当区分だけでいっぱいいっぱいで周りに気を配れなかった。そのせいで周りには進捗を聞いているだけで僕から指示を出すということができず、GUI、公開フィールド用Solverが完成しなかったという事態を招いた。通信部門敗退の高専が多かった今年の競技部門で、通信を成功したチームと当たった上で僕が書いたsolverを使って勝つことができた。すごく嬉しかったし、自信にもなった。来年の話solverの書き方が一切わからなかった僕がsolverをかけるようになったことはかなりの成長だと思う。来年も競技部門に出場して優勝を目標に活動する。年内にチームを結成、1月から全員でsolverが書けるように勉強をして、ルール発表後、すぐに動けるようにしたい。今年と同じミスはしない。最後にサポート、応援してくれた先輩方、不甲斐ないチームリーダーについてきてくれたチームメンバー、教授、本当にありがとうございました。チームメンバーにとって実りのある半年であったことを願います。最後に沖縄高専競技部門のリポジトリのURLを載せて僕のprocon30を終わりにする。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイトご意見、ご感想をお願いします。次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。2019参加記こんにちは、ひがしです。