Pokemon Showdown用のAIを発掘した
こんばんわ!城ヶ崎美嘉だよ!
がりゅうです。
ちなみにデレマスで一番好きなアイドルは堀裕子です。
東京都、ラジオネーム「オオアリクイ」さんからのお便りです。
「がりゅうさん、どうもこんばんは。突然ですがぼくは最近ポケットモンスターサン・ムーンにハマっています。プレイしていて思ったのですが、同じ対戦ゲームでも将棋とか囲碁のAIは人間が勝てないくらいすごく強いのに、ポケモンのCPUはとても単純で、ゴリ押すだけで勝ててしまいますよね。がりゅうさんはポケモン対戦のAIって聞いたことありますか?」
ということでポケモン対戦のAIプログラムをまた試してみたので紹介します。
「また」っていうのは、こういうこと。
それでは、
今回ご紹介するポケモン対戦AIはこちら!
笑顔がステキですね。なんかスタンフォード大の学生らしいですよ。
ここではshowdownbotという名前になっていますがReadmeを読むとPercymonという名前にしたいらしいです。それでは今からPercymonと呼ぶことにしましょう。
-----
PercymonはPokemon Showdown※サーバー上で動くポケモン対戦AIです。
セットアップは簡単で、
npm install
で必要なモジュールをインストールしたあと、
{
"username" : "sillybot",
"password": "arbitrary password",
"message" : "gl hf"
}
のようなログイン情報を記したファイルを作り、
node bot.js --startchallenging
で実行だ! Yo!
-----
(忙しい人のための意訳です、内容は理解しなくていいです)
※PokemonをShowdownするやつです。適当にググってください
なるほどね。
いいねぇ~~~~
(ソースコードをダウンロードする音)
(ログインファイルを入力する音)
node bot.js --startchallenging ポチ
Uncaught SyntaxError: Unexpected end of input
は?
動かんやんけ
それもそのはず、なんとこのプログラム、最終更新が大体3年前とかである。
一応今年4月にちょこっと更新してあるのだが、実際今動かないのだから困る。
本当にFixed some incompatibilities with the lastest versions of Node and Pokemon Showdown したのだろうか。extraなsemicolonをfixしている場合ではないぞ。
まあ、
自力でアップデート&修正した。
そこらへんの苦労はなんかまた別の機会に書きましょう
showdown側のファイル構成が2017年5月頃に大きく変わっているのでとりあえずその前までの変更に対応しました。サンムーンが発売して一段落経っている時期なので十分でしょう。
それではお待ちかね、動作の様子(^^)/~~~
まず、プログラムの起動とは関係なく、先にブラウザでshowdownにログインしておきます。これは対戦の様子を実際に確認するために必要で、Percymonは裏でshowdownサーバーとの通信(対戦相手検索、コマンド選択、、)のみを行います。
Percymonは、いわゆるコンソールプログラムです。ソースコードのあるディレクトリ上で起動コマンドを打ちます。
(ディレクトリにたどり着くまでに上の方でめっちゃ間違えてますが気にしないでください。)
数秒程度でログイン完了(Successfully logged in)の表示が現れ、同時に対戦相手の検索が始まります。
対戦相手の検索とは、showdownの「unrated random battle」と呼ばれるルールで現在対戦募集しているユーザーを検索します。showdownのルール区分は未だによく分かりませんが、要はフリーの6vs6シングルです。
PTはどこで用意した?と疑問に思うかもしれませんが、このルールでは、PTはランダム生成されます。
マッチング成立後はすぐに対戦が始まります。このとき、あらかじめ開いておいたブラウザ上のshowdownで、対戦画面が開かれます。
技および交代のボタンは通常通り表示されていますが、コマンド選択はPercymonが自動で行うためこれらのボタンは一切触りません。
同時にPercymonを起動しているコマンドプロンプトではAIの最善手探索が始まり、ものすごい勢いでログが流れていきます。
デフォルトの2手探索だとだいたい数秒程度で終わり、同時にサーバーにコマンドが送信されます。
その後も全自動で対戦が進みます。対戦の状況が逐一Percymonに送信され、それを元に計算された最善手がサーバーに送信されるような仕組みになっています。
まあ、とにかくこんな感じですよ
っていうのを見せるためにshingaryu(Percymon AI、手前) 対 sayuri1024(ぼく、奥) のテスト対戦のリプレイを載せます。
中盤のカプ・ブルルの活躍ような、適切な受け出しと正確なダメージ感覚に感心します。特に今回は6 vs 6なのでダメージ計算のパターンが多く、コンピュータに有利な状況だと思います。
とりあえず今はここまで。テスト対戦までシュッといけたように書いてありますが実際はソースコードの改修に2週間かかっています。
でも埋もれた化石を発掘したような感じで気分がいいのと、これから以前の自動PT生成のような応用が期待できます。
乞うご期待
(写真左側はアトミックモンキー所属、新人女性声優の青木瑠璃子