2019-10-13

全国高等専門学校プログラミングコンテスト2019 競技部門に参加しました. 宮崎県都城市で開催され,1回戦敗退でした.(チームの多くが通信できない)

ルール概要

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

../images/procon2018/rule.jpg

Rule

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

../images/procon2019/Solver8.jpg

Image

コンポーネント全体

サーバと通信したり,AIの手を表示したりするInterfaceと,思考するAIに分かれます. 私はすべてに関わりました.

IPC

前回から変更なしです.

Interface

通信や,手の表示をしたりします. .NET CORE 3.0, WPF, ZXing.Netを用いました.

../images/procon2019/Interface2020.jpg

Image

AI

2体の場合は,交互ゲームとみなし,minimax法を用いました. エージェントの多い場合は,1体ずつ動かして,探索します. 評価値の工夫として,そのままゲームの得点を使うのではなく,包囲得点を減点したり,自陣の分散度合いを吟味したりしました.

乾草した感想

JSON解析部門ってマジですか!?

テストプログラム事前に公開するって言ってたのに…約束守ってよ…ドキュメントも不明瞭でアッ…

文句集

(Q.下級生のプログラミングの授業で,これを発表させられる人間の気持ちを答えよ(これ発表してよかったんか…?))

というか時間制限のあるゲームでREST APIとJSON使うな