AI対戦サーバープログラム作成のヒント
Author:久住 涼
まだ作成中ですよ
何年もAI対戦を見てきて思ったことと、CEDEC2013AIChallengeプロジェクトに参戦して便利だと思ったこと、調べたことをまとめたTipsです。
AI対戦のプログラム作成の役立ててやってください。
過去のAI対戦では、サーバーとクライアントの情報のやりとりには、次のような手段が使われてきました。
「同じ実行ファイルにまとめる」とは、AIプログラムもサーバプログラム内に入れてコンパイルする手法のことです。
VC++やVisualStadioで言えば、同じプロジェクトファイル内にサーバプログラムとクライアントプログラムの両方を含めてコンパイルすることで、1つの実行ファイルとして出力、実行します。
「同じ実行ファイルにまとめる」では、サーバプログラムとクライアントプログラムを別々の.exeファイルで作成します。
データ通信は、サーバからクライアントへは実行時引数として渡し、クライアントからサーバへはプログラムの返り値を行動としてサーバプログラムに返す手法です。
これら手法はそれぞれ、プログラムの作成が楽であったり、既知の技術だけで実装できるなどの利点がありますが、以下のような欠点もあります。
この項では、上にあげた2つの手法の欠点を上げたいと思います。
この手法では、今までこの問題に苦しめられてきました。
サーバとクライアントを同じ実行ファイル内に入れてしまうため、無限ループの検出や実行エラーへの対処はクライアント側に依存していました。
そのために、苦汁を舐めた人もいました。
また、AIプログラムを書き換えるたびに全体をコンパイルしなおさなければならず、これは大変な手間となります。
この手法の欠点には、次が考えられると思います。
つまり、各ターンの行動を毎回決めなければならず、数ターン分の行動をまとめて決められないということです。
モンテカルロ法などのアルゴリズム(詳しくは調べてね)で得られた情報を捨てなければならないのは、クライアントにとって大きな損失です。
そこで、これらの欠点を解消する情報の伝達方法として、次を提案します。
これは、サーバ(クライアント)の標準出力がクライアント(サーバ)への標準入力となる方法です。
これには、プロセス間通信について触れる必要がありますが、一度使いこなせれば、非常に心強い武器となります。
ここから、プロセス間通信による情報転送のやり方について説明します。