こんにちは。この記事では,C#で作られた人狼知能エージェントをJavaで作られたエージェントたちと一緒に対戦させるためにやったことを紹介します。
なんかいろいろ詰まったのですが,最終的には(たぶん問題なく)動いたので,たぶん大丈夫です…。が,ここに書いてあることをお試しになるときは,ご自身の責任においてお試しくださいますよう,お願いいたします。
私がいろいろ迷ったので,もしかしたら これから迷うかもしれない どなたかのために…お役に立てたらいいなと思い,筆を執っている次第です。(キーボードですが😇)
忘れないうちに急いで書いています,笑。大ざっぱな感じになると思いますが,なにとぞご勘弁ください。(のちのち加筆するかもしれません。)
(実際,スクリーンショットの1枚もない不親切な記事になっております…。のちほど写真とかも増やせればいいなと思います。)
ちなみに
「人狼知能ってなに?」というかたは,こちら:人狼知能プロジェクトの公式サイト をご覧ください。
人狼ゲームをプレイする人工知能を「人狼知能」と呼んでいます。
おことわり
環境について
私はMacを使っています。
AIWolf.NETの「ClientStarter with runtime」は,OSによって違うようですので,Mac以外の場合は,いろいろ異なるかもしれません。
Mac以外のことは分かりませんです(Macだったとしても,あやしいくらい😇)。申し訳ありません!
正しさが保証できないことについて
一応,私の環境で動く(他のエージェントと対戦できた)ことを確認しましたが,本来の望ましいやり方と違う部分があるかもしれません。
私は正しさや安全性を保証することができませんので,その点ご留意の上でお読みいただければと思います。申し訳ありません。
事前準備
人狼知能プラットフォームをダウンロード・解凍しておいてください。場所はどこでも大丈夫です。
今回 私が使ったのは,バージョン0.5.6です。「AIWolf-ver0.5.6」です。
このフォルダを「AIWolf」フォルダと呼ぶことにします。
フォルダ内の「AutoStarter.sh」を実行するために,初回に,「AutoStarter.sh」のパーミッションを設定する必要があります。
ターミナルで「AIWolf」フォルダに行き,
$ chmod 755 AutoStarter.sh
を実行してください。(参考:http://aiwolf.org/archives/947)(ターミナルに「\$」を入力しないことにご注意ください)
C#で作られたエージェントとして,Udonさんのプログラムを動かすことを目標にします。
今回は,http://aiwolf.org/archives/2268 より,第1回人狼知能国際大会でのUdonさんのプログラムをダウンロードさせていただきました。
人狼知能プラットフォームのフォルダ内に解凍してください。解凍してできるフォルダを「Udon」フォルダと呼ぶことにします。
http://aiwolfsharp.github.io/AIWolf_NET/ から,「ClientStarter with runtime」をダウンロードします。
さきほどの「Udon」フォルダの中に解凍してください。
対戦させてみる
AutoStarter.ini の編集
「AIWolf」フォルダ内の AutoStarter.ini を編集します。
テキストエディタ等で開いてください。
5行目:どちらでもいいのですが,動いたときの喜びを大きくするため,
view=true
にすることをおすすめします,笑。
6行目:「C#」と書いてあるので関係ありそうですが,今回ご紹介する方法では,特に変えなくて大丈夫です。(逆に,これを使うときに,どうやるのか分からない💦)
8行目:もともと「#agent=5」と書いてあると思います。コメントじゃなくするため,先頭の「#」を削除します。数字はいくつにしてもいいのですが,とりあえず
agent=7
としておきましょう。
これでAutoStarter.iniの編集は終わりです。
(8行目は,コメントじゃなくすることで,参加するエージェント数を明示的に宣言することになります。「9行目以降に書いてあるJavaエージェントの人数+ $n$ 人」にしておくことで,C#のエージェントが $n$ 人参加できるようになります。今回は,「agent=7」としてあって,9行目から13行目までで5体のJavaエージェントが登録されていますので,C#エージェントが2体参加できるということです。)
編集後の AutoStarter.ini は次のようになります。
保存して,閉じます。
lib=./ log=./log/ port=10000 game=10 view=true #C#=PATH_TO_C#_CLIENT_STARTER setting=./SampleSetting.cfg agent=7 Sample1,java,org.aiwolf.sample.player.SampleRoleAssignPlayer,WEREWOLF Sample2,java,org.aiwolf.sample.player.SampleRoleAssignPlayer,SEER Sample3,java,org.aiwolf.sample.player.SampleRoleAssignPlayer Sample4,java,org.aiwolf.sample.player.SampleRoleAssignPlayer Sample5,java,org.aiwolf.sample.player.SampleRoleAssignPlayer #PythonPlayer,python,PATH_TO_PYTHON_PLAYER_FILE #C_SharpPlayer,C#,PATH_TO_PLAYER_DLL:CLASS_PATH,SEER
対戦会場(?)の準備
ターミナルで「AIWolf」フォルダに行きます。
$ ./AutoStarter.sh
を実行します(ターミナルに「\$」を入力しないことにご注意ください)。
add Sample5 add Sample4 add Sample3 add Sample2 add Sample1 Waiting for connection…
みたいに表示されると思います(私の場合は,add Sample5の前にJavaの例外の出力(?)が出てきますが,気にしなくて大丈夫だと思っています)。
待機状態に入りましたので,会場の準備はOKです。
このターミナルのウィンドウは,閉じずに置いておいてください。
C#エージェント参加
さきほど「AIWolf」フォルダの中に「Udon」フォルダ(=UdonさんのエージェントのZIPファイルを解凍してできるフォルダ)を置いたと思います。
そしてさらに,その「Udon」フォルダの中に,ClientStarter with runtime「ClientStarter-2.0.1-osx-x64.zip」を解凍してできるフォルダ「osx-x64」を置いたと思います。
それでは次に,ターミナルで,さきほどとは別のウィンドウを開きます。(Dockのターミナルのアイコンを右クリック→「新規ウィンドウ」)
カレントディレクトリを「Udon」フォルダにします。
$ ./osx-x64/ClientStarter -c WhiteWolf.ContestAgent.ContestUdonPlayer ./WhiteWolf.dll
を実行します。
そしたら,さっき対戦会場を準備したときのターミナルウィンドウを見てみます。なんとびっくり,
Connected:Udon
と書いてあるではありませんか!
これは,Udonさんエージェントがプレイヤーとして加わったことを表しています。
それでは,7人目のエージェントとして,Udonさんエージェントをもう1体参加させてみましょう。
また新しいターミナルウィンドウを開き,「Udon」フォルダに行き,先ほどと同じ文
$ ./osx-x64/ClientStarter -c WhiteWolf.ContestAgent.ContestUdonPlayer ./WhiteWolf.dll
を実行します。あせって「 \$ 」も入力してしまわないようにご注意ください。
実行したらすぐ,「AIWOLF」のウィンドウが出ると思います。
この村には 村人は4人,人狼が2人,占い師が1人いるらしい
とのこと。\(^_^)/
C#のエージェントを無事に対戦に参加させることができました!!!!!
よかった! うれしい! お疲れさまでした!!
さいごに
なんか,こう書いてみると,動かすために特に難しいことはしてないのですよね…。ただ,私は,これで動くということを発見するまでに けっこう迷いました。
先輩がアドバイスをくれて,いろいろいじっていたら…なんか気づいたらできました(!)先輩に感謝です🙏
おしまい
最後までお読みいただき,ありがとうございました。
もし「この手順は,こうしたほうがいい」「この手順が再現できない」などありましたら,お気軽にコメントいただければ幸いです (^_^)
コメント