【人狼知能】C#のエージェントを動かす

人狼

こんにちは。この記事では,C#で作られた人狼知能エージェントをJavaで作られたエージェントたちと一緒に対戦させるためにやったことを紹介します。

なんかいろいろ詰まったのですが,最終的には(たぶん問題なく)動いたので,たぶん大丈夫です…。が,ここに書いてあることをお試しになるときは,ご自身の責任においてお試しくださいますよう,お願いいたします。

私がいろいろ迷ったので,もしかしたら これから迷うかもしれない どなたかのために…お役に立てたらいいなと思い,筆を執っている次第です。(キーボードですが😇)

忘れないうちに急いで書いています,笑。大ざっぱな感じになると思いますが,なにとぞご勘弁ください。(のちのち加筆するかもしれません。)

(実際,スクリーンショットの1枚もない不親切な記事になっております…。のちほど写真とかも増やせればいいなと思います。)

【2020年3月11日 追記】下のようにやらなくても,できそうです。のちほど改めて記事にできればと思っているのですが,いつになるか分かりません…。(できそうなのですが,(少なくとも私の Mac では)「ウェブからダウンロードしたこのファイルを開いてもいいですか?」みたいな感じの警告がいっっぱい出てきて,大変でした。そのあたりがちょっと分からないですが,なんか根気よくボタンを押したりしていたら,できたので,とりあえずできるのだと思います。よい方法(?)があるのかもしれませんが…)

ちなみに

「人狼知能ってなに?」というかたは,こちら:人狼知能プロジェクトの公式サイト をご覧ください。

人狼ゲームをプレイする人工知能を「人狼知能」と呼んでいます。

おことわり

環境について

私は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#のエージェントを無事に対戦に参加させることができました!!!!!

よかった! うれしい! お疲れさまでした!!

さいごに

なんか,こう書いてみると,動かすために特に難しいことはしてないのですよね…。ただ,私は,これで動くということを発見するまでに けっこう迷いました。

先輩がアドバイスをくれて,いろいろいじっていたら…なんか気づいたらできました(!)先輩に感謝です🙏

おしまい

最後までお読みいただき,ありがとうございました。

もし「この手順は,こうしたほうがいい」「この手順が再現できない」などありましたら,お気軽にコメントいただければ幸いです (^_^)

コメント

タイトルとURLをコピーしました