2018-10-28

全国高等専門学校プログラミングコンテスト2018 競技部門に参加しました. 徳島県徳島市で開催され,1回戦敗退でした.(どうでもいいところで手間かかってるの草)

ルール概要

陣取りゲームで,2プレイヤーがそれぞれの2つのエージェントを2プレイヤー同時に動かしていきます.

../images/procon2018/rule.jpg

Rule

エージェントは8方向に動くことができます. エージェントが動いた後のマスは陣地となります. 陣地となったマスは相手チームのエージェントは入ることができません. 1ターン消費して.そのマスを陣地から解放する作業が必要になります. 得点としては2種類あって,まずは「占有得点」について説明します. 占有得点は,エージェントが通った後,陣地になったマスがそのまま得点となります. それぞれのマスに最大16点,最低-16点割り振られています. 一方,「包囲得点」は,陣地によってマスを囲むと,そのマスの絶対値が得点となります. つまり,-16のマスを占有で得点すると,16点引かれてしまうのに対して,囲って得点すると,16点もらえるということになります. 囲むときに,頂点の部分は陣地でなくても大丈夫です. エージェントの人と,司令塔は違う人です.エージェントの人とはトランプ通信でやり取りしなければなりません.

../images/procon2018/main.png

Image

詳しくは,オープンソースサロンの記事をご覧になると良いでしょう.

コンポーネント全体

フィールド情報がQRコードで渡されます. QRコードを読み取ったり,AIの手を表示したりするInterfaceと,思考するAIに分かれます. 私はすべてに関わりました.

IPC

前回,WCFを用いていましたが,.NET Coreでは使えないので,TCPソケット通信を用いたIPCをしました.

Interface

QRコードの読み取り,手の表示をしたりします. .Net Framework 4.7, WPF, ZXing.Netを用いました.

AI

交互ゲームとみなし,minimax法を用いました. 評価値の工夫として,そのままゲームの得点を使うのではなく,包囲得点を減点したり,自陣の分散度合いを吟味したりしました.

裏プロコン

本番がクソゲーだったので,学生間で裏プロコンが開催されました.(北九州高専さん呼びかけ)

vs 北九州

勝ち 19点差

相手は,ビームサーチでした.

../images/procon2018/北九州.png

vs Kitakyushu

vs 久留米

勝ち 53点差

相手は,ビームサーチでした.

../images/procon2018/久留米.png

vs Kurume

vs 茨城

負け 7点差

相手は,モンテカルロ+UCBでした.

../images/procon2018/茨城.png

vs Ibaraki

観想した感想

ゲームは良かったのになぁ…

ビームサーチにはとても勝てる,モンテカルロとは互角なのかなぁ…?といった感じでした. 茨城と100回ぐらい戦ってみたい.