2017.07.12
第2回 人狼知能エージェントを戦わせてみよう
人狼知能プロジェクトでは、人狼知能エージェント作成のためのツールとライブラリをまとめた「人狼知能プラットフォーム」を提供しています。今回は、これを利用して人狼知能エージェントを対戦させる方法について説明していきます。
1. 人狼知能エージェント
人狼ゲームをプレイするプレイヤープログラムには、隠された他のプレイヤーの情報を推定しながら思考する機能と、他のプレイヤーとコミュニケーションを行う機能が必要です。このようなプログラムをエージェントと呼ぶことが多いので、ここではプレイヤープログラムを「人狼知能エージェント」または単に「エージェント」と呼ぶことにします。
2. 人狼知能プラットフォーム
「人狼知能プラットフォーム」は、エージェント開発をサポートする基盤ソフトウェアで、Javaで開発されています。.NETでエージェントを作成したい場合は、筆者が開発している「AIWolf.NET」(http://aiwolfsharp.github.io/AIWolf_NET/)を利用できます。
人狼知能プラットフォームは、http://aiwolf.org/server/(図1)からダウンロードできます。執筆時点での最新版はバージョン0.4.9です。
ダウンロードしたaiwolf-ver0.4.9.zipを展開すると、AIWolf-ver0.4.9というフォルダが作られ、その中には表1に示した15個のファイルが格納されています。
ファイル名 | 説明 |
---|---|
aiwolf-client.jar | サンプルエージェントのクラスが入ったjarファイル |
aiwolf-common.jar | 人狼知能サーバと人狼知能エージェントが共用するクラスが入ったjarファイル |
aiwolf-server.jar | 人狼知能サーバ関連のクラスが入ったjarファイル |
aiwolf-viewer.jar | ログビューワやGUIスタータなどのクラスが入ったjarファイル |
AutoStarter.bat | AutoStarterを実行するためのバッチファイル(Windows用) |
AutoStarter.ini | AutoStarterの設定ファイル |
AutoStarter.sh | AutoStarterを実行するためのシェルスクリプト(Linux、macOS用) |
jsonic-1.3.10.jar | JSONエンコーダー/デコーダーライブラリ |
SampleSetting.cfg | ゲームの設定ファイル |
StartClient.bat | エージェントを実行するためのバッチファイル(Windows用) |
StartClient.sh | エージェントを実行するためのシェルスクリプト(Linux、macOS用) |
StartGUIClient.bat | エージェントを実行するためのバッチファイル(GUI版、Windows用) |
StartGUIClient.sh | エージェントを実行するためのシェルスクリプト(GUI版、Linux、macOS用) |
StartServer.bat | 人狼知能ゲームサーバを実行するためのバッチファイル(GUI版、Windows用) |
StartServer.sh | 人狼知能ゲームサーバを実行するためのシェルスクリプト(GUI版、Linux、macOS用) |
3. サンプルエージェント同士を対戦させてみよう
それでは、人狼知能プラットフォームに付属しているサンプルエージェントを使ってゲームをプレイさせてみましょう。
人狼知能エージェントを対戦させる方法はいくつかあるのですが、初めての場合には「AutoStarter」を使うのが簡単です。Windowsの場合はAutoStarter.batを、LinuxあるいはmacOSの場合はAutoStarter.shを実行します。実行すると、図2のようなゲームビューワが表示されます。
ゲームビューワの上部にはエージェントがアイコンで表示され、下部にはゲームサーバからのメッセージやエージェントの発話が表示されます。図3に示すように、エージェントのアイコンには、エージェント番号、エージェント名、エージェントの生存・死亡、そしてエージェントの役職が表示されます。
[NEXT]ボタンを押すと、図4のようにゲームが進行していきます。
エージェントの発言によっては、図5のように対象となるエージェントへの矢印が表示されることがあります。
[Auto]ボタンを押すと、いちいち[NEXT]ボタンを押さなくても、その日の最後までゲームが自動的に進行します。[SKIP ALL]ボタンを押すと、最後までゲームが一気に進みます。ダウンロードしたままの設定では、ゲームが終了するとすぐ次のゲームが始まります。指定回数のゲームが終わると、各エージェントの役職ごとの勝率と総合勝率を集計した結果が標準出力に出力されます。図6に1,000ゲーム終了後の集計結果の例を示します。この例では、人狼(Sample1)と占い師(Sample2)のエージェントが固定されていて、その役職のみで1,000ゲーム対戦しています。
4. ゲーム構成を変更してみよう
では、ゲームの構成を変更してみましょう。ゲームの構成は、AutoStarter.iniファイルに記述されています。ダウンロードしたままのデフォルトのAutoStarter.iniの内容は図7のようになっています。
それぞれの行の意味を説明していきましょう。
1行目は、ライブラリの場所を指定します。初期値は、AutoStarterを実行したフォルダです。自作エージェントをゲームに参加させる場合、エージェントのjarファイルをここに置きます。2行目は、ゲームログファイルの場所を指定します。初期値は実行フォルダ内のlogフォルダです。ゲームログファイルについては、後で説明します。
3行目は、サーバとエージェントを接続するためのTCPポート番号を指定します。初期値は10000番ポートです。1台のコンピュータで複数のゲームを並列に実行する場合には、ゲームごとに異なるポート番号を指定します。
4行目では、実行するゲームの回数を指定します。初期値は10回なので、先の実行例のように、ゲーム終了後ただちに次のゲームが始まります。
5行目は、ゲームビューワを使用するかどうかを指定します。初期値は「true(使用する)」です。「false(使用しない)」を指定すると、ゲームビューワを起動しないで高速にゲームを実行します。6行目では、ゲームの設定ファイルを指定します。ゲーム設定についての詳細は、書籍を参照してください。
7行目では、エージェントの数を指定します。先頭が「#」となっている行はコメント行になります。つまり、この例では「5」と指定されているのをコメントアウトすることで指定を省略しています。省略した場合、次で説明する指定エージェントの総数になります。
8~12行目では、エージェントを指定しています。エージェント名、エージェントのクラスパス、希望役職をカンマで区切ったものです。エージェント名は重複してはいけません。希望役職は省略可能で、省略した場合、ランダムに空いている役職が割り当てられます。デフォルトでは、5体のサンプルエージェントを指定し、Sample1は人狼を、Sample2は占い師を希望役職として指定しています。
エージェント数を15として、すべて希望役職なし、ゲーム回数は1回と構成を変更したAutoStarter.iniの内容を図8に示します。
変更後にAutoStarterを実行すると、図9のように指定した構成で開始し、ゲームを1回実行して終了します。
5. ログビューワを使ってみよう
ゲームビューワは眺めているぶんには楽しいのですが、人狼知能大会のように多数回ゲームを実行する場合には向きません。そういった場合には、AutoStarter.iniで次のように設定すると、ゲームビューワを使わずにゲームログだけを作成できます。
終了後、作成されたゲームログをログビューワで確認するとよいでしょう。なお、ダウンロードした人狼知能プラットフォームにはログビューワ用の実行ファイルが含まれてないので、次のようにして、用意する必要があります。
Windowsの場合はAutoStarter.batをGUILogViewerStarter.batとして、LinuxあるいはmacOSの場合はAutoStarter.shをGUILogViewerStarter.shとしてコピーします。コピーしたファイルをエディタで開き、次のように書き換えます。
このGUILogViewerStarterを実行すると、図10に示すウインドウが表示されます。ここにゲームログファイルをドラッグ&ドロップすれば、AutoStarterと同じユーザーインターフェイスでゲームを再現できます。
6. コンソールログとゲームログファイル
人狼知能ゲームを実行したときに、図11のようにコマンドプロンプト(Windows)やターミナル(Linux、macOS)に出力される情報を「コンソールログ」と呼びます。
コンソールログは、前日の発話会話や囁き、行動投票や占い、その結果としての各エージェント状態をまとめたもので、1日に1回、標準出力に出力されます。コンソールログはゲームが進行していることを確認するのに役立ちます。
一方、AutoStarter.iniで指定したフォルダに作成される「ゲームログ」は、ゲームの進行をリアルタイムで記録し、1ファイルに1ゲームずつ書き込まれています。図はゲームログの例です。
ゲームログは、人に読まれることを想定していない形式なので読みにくいのですが、ゲーム進行のすべての情報が時系列で書き込まれています。ログビューワは、このゲームログにしたがってゲームを再現しています。
ゲームログの内容を理解すると、人狼知能のゲーム進行の詳細や人狼知能エージェントが実装しなければならない機能が見えてきます。ログの読み方や実際のエージェントの作り方については、書籍に詳しく記載されているので、そちらも参照してください。