I'm KUITARIDER.

がりゅうさんのサイキックミラクルブログ

Pokemon Showdown用のAIを発掘した

こんばんわ!城ヶ崎美嘉だよ!

 

がりゅうです。

ちなみにデレマスで一番好きなアイドルは堀裕子です。

 

東京都、ラジオネーム「オオアリクイ」さんからのお便りです。

「がりゅうさん、どうもこんばんは。突然ですがぼくは最近ポケットモンスターサン・ムーンにハマっています。プレイしていて思ったのですが、同じ対戦ゲームでも将棋とか囲碁のAIは人間が勝てないくらいすごく強いのに、ポケモンのCPUはとても単純で、ゴリ押すだけで勝ててしまいますよね。がりゅうさんはポケモン対戦のAIって聞いたことありますか?」

 

ということでポケモン対戦のAIプログラムをまた試してみたので紹介します。

 

「また」っていうのは、こういうこと。

shingaryu.hatenablog.com

 

 

それでは、

 

 

 

今回ご紹介するポケモン対戦AIはこちら! 

github.com

笑顔がステキですね。なんかスタンフォード大の学生らしいですよ。

 

ここでは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年前とかである。

f:id:shingaryu:20171028231434p:plain

 

一応今年4月にちょこっと更新してあるのだが、実際今動かないのだから困る。

本当にFixed some incompatibilities with the lastest versions of Node and Pokemon Showdown したのだろうか。extraなsemicolonをfixしている場合ではないぞ。

f:id:shingaryu:20171028231527p:plain

 

 

 

 

 

まあ、

 

 

 

 

自力でアップデート&修正した。

 

そこらへんの苦労はなんかまた別の機会に書きましょう

showdown側のファイル構成が2017年5月頃に大きく変わっているのでとりあえずその前までの変更に対応しました。サンムーンが発売して一段落経っている時期なので十分でしょう。

 

 

それではお待ちかね、動作の様子(^^)/~~~

 

まず、プログラムの起動とは関係なく、先にブラウザでshowdownにログインしておきます。これは対戦の様子を実際に確認するために必要で、Percymonは裏でshowdownサーバーとの通信(対戦相手検索、コマンド選択、、)のみを行います。

f:id:shingaryu:20171028234741p:plain

 

 

f:id:shingaryu:20171028234112p:plain

Percymonは、いわゆるコンソールプログラムです。ソースコードのあるディレクトリ上で起動コマンドを打ちます。

(ディレクトリにたどり着くまでに上の方でめっちゃ間違えてますが気にしないでください。)

 

 

f:id:shingaryu:20171028235432p:plain

数秒程度でログイン完了(Successfully logged in)の表示が現れ、同時に対戦相手の検索が始まります。

対戦相手の検索とは、showdownの「unrated random battle」と呼ばれるルールで現在対戦募集しているユーザーを検索します。showdownのルール区分は未だによく分かりませんが、要はフリーの6vs6シングルです。

PTはどこで用意した?と疑問に思うかもしれませんが、このルールでは、PTはランダム生成されます。

 

 

f:id:shingaryu:20171029000042p:plain

マッチング成立後はすぐに対戦が始まります。このとき、あらかじめ開いておいたブラウザ上のshowdownで、対戦画面が開かれます。

技および交代のボタンは通常通り表示されていますが、コマンド選択はPercymonが自動で行うためこれらのボタンは一切触りません。

 

 

f:id:shingaryu:20171029000405p:plain

同時にPercymonを起動しているコマンドプロンプトではAIの最善手探索が始まり、ものすごい勢いでログが流れていきます。

デフォルトの2手探索だとだいたい数秒程度で終わり、同時にサーバーにコマンドが送信されます。

 

f:id:shingaryu:20171029000558p:plain

その後も全自動で対戦が進みます。対戦の状況が逐一Percymonに送信され、それを元に計算された最善手がサーバーに送信されるような仕組みになっています。

 

 

 

まあ、とにかくこんな感じですよ

っていうのを見せるためにshingaryu(Percymon AI、手前) 対 sayuri1024(ぼく、奥) のテスト対戦のリプレイを載せます。

replay.pokemonshowdown.com

 

中盤のカプ・ブルルの活躍ような、適切な受け出しと正確なダメージ感覚に感心します。特に今回は6 vs 6なのでダメージ計算のパターンが多く、コンピュータに有利な状況だと思います。

f:id:shingaryu:20171029001708p:plain

f:id:shingaryu:20171029001720p:plain

f:id:shingaryu:20171029001728p:plain

 

とりあえず今はここまで。テスト対戦までシュッといけたように書いてありますが実際はソースコードの改修に2週間かかっています。

でも埋もれた化石を発掘したような感じで気分がいいのと、これから以前の自動PT生成のような応用が期待できます。

 

 

乞うご期待

(写真左側はアトミックモンキー所属、新人女性声優の青木瑠璃子

 f:id:shingaryu:20171029010754j:plain

クイタランオンリーシングル3on3! 使用構築(クイタランクイタランクイタラン)

I'm KUITARIDER. I'm always full throttle.

というキャッチコピーをぼくが売りにしていることはあまり知られていませんが、Twitterのアイコンの通り自他共に認めるクイタラン好きであるので、タイトルにあるクイタラン統一大会に参加しました。

 

chanmiss.blog.fc2.com

タイトルが全てを表しています。クイタランオンリーの3 on 3 シングルバトルです。

 

f:id:shingaryu:20171011224910j:plain    f:id:shingaryu:20171011224928j:plain

こんな感じです。e-sportsですね。

 

こんな感じの環境予想をしてからPTを組みました。クイタラン環境ってなんだ

・仮想敵がクイタラン(炎タイプ)しか居ないので、攻撃技は水・地面・岩のどれか1つを持てば十分

・特性:しろいけむり の存在のため、能力ランクを下げる技はあまり有効ではない

・火力が乏しく、積み技も少ないため耐久型が相対的に有利

ポケモン自身の能力がカスなので持ち物がめちゃくちゃ重要

 

実はポケモンで真面目にPTを考えて育成するのは軽く1年ぶりとかだったので、意味不明なクイタランを3匹育て上げるだけで社会人の貴重な土日を潰してしまい軽く鬱病になりました。

というかいざ育成を開始してみたら、こんなアイコンしてるぼくが第6世代で一匹もクイタランを育てていなくてキレました。

 

~~~構築紹介~~~

f:id:shingaryu:20171011215320g:plainf:id:shingaryu:20171011215430g:plainf:id:shingaryu:20171011215452g:plain

 

 

f:id:shingaryu:20171011220345g:plain

クイタラン(NN: ホリタラン) ♂ @ジメンZ

しろいけむり

ようきAS 161-149-86-×-86-128

・あなをほる

・はたきおとす

・ちょうはつ

ギガインパクト

ジメンZ芸人。実はジメンZあなをほるは今大会のルール上唯一確1をとれる超人気技である。そのため6回の対戦中半分くらいは最速ジメンZ同士のアツイ決闘を見ることができた。

初手で同速勝ちして1匹落とせたらほぼ勝ち。身代わりとかで適当にかわされたときや、1匹落としたあとの2匹目には はたきおとすorちょうはつを打って起点にならないように後続に繋ぎます。 

単発のあなをほるのメタられ方がハンパなかったので、がんせきふうじと両立させた方が動きやすかったと思いました。

 

 

f:id:shingaryu:20171011220345g:plain

クイタラン(NN: ヒロイタラン) ♂ @ウイのみ

くいしんぼう

ひかえめBCベース  160-×117-172-86-87

・めざめるパワー岩

・リサイクル

・どくどく

・まもる

最初に環境を予想したとき、「みんなこんなアリクイのためにめざパ粘んないだろうし物理技環境やろーー」と思ったのでB振りです。実際はみなさんクイタランに真剣だったのでそんなことありませんでした。あとは同族意識でSに12振っています。

どんな相手にもそこそこ対応できるオールラウンダー、あるいはミッドフィルダー(真ん中にいるので)。タイマンではまずどくどくから入り、まもるで様子を見た後普通に打ち勝てそうであればめざパ、持ち物ありめざパなど超火力相手にはまもるリサイクル連打と後続への交代でなんとかターンを稼ぎます。

2番目に置いてましたが、相手の型が分かってからの方が動きやすいのと、交代ができないラス1相手にはどくまもが強いので、最後の方までとっておくことも多かったです。

個人的にはクイタランの特性と技をうまく活用できたベストな型だと思う。ただSはもう少し上げてもよかったかも

どうでもいいですがこいつを育て上げるためにサンムーンで初めてポケモンをレベル100にしてぎんのおうかんを使いました。時間と金をかけて子供を高等教育機関に送る親の不安な気持ちがよくわかりますね。

 

 

f:id:shingaryu:20171011220345g:plain

クイタラン(NN: ネムリタラン) ♂ @じゃくてんほけん

しろいけむり

わんぱくHBD 192-117-116-×-98-86

・がんせきふうじ

・ねむる

・ねごと

・たくわえる

本PTのラスボス。恐怖のアリクイ(みんなアリクイだが)。

舐めた火力の物理相手に繰り出して弱保を発動させた後、ねむるねごとたくわえるがんせきふうじで好き勝手に料理します。そもそも本ルールは基本的に抜群技しか使わないので弱保が強いです。それに加えてZ技以外の火力はせいぜい特化めざパで5割程度といったところなので、たくわえる一回積むだけでも抜群の安心感が生まれます。

努力値は持ち物なし特化めざパ確3調整、残りH→Bです。これにより大抵の技は2発耐えるのでねむるが間に合うようになります。

まあ実際はねごとでねむるが連発したり、、、Z技で葬られたりしたり、、、事故も多かったですが、先発のアタッカークイタランの補完として繰り出しが効く高耐久なクイタランは立ち回り上使いやすかったです。

実は通信対戦でNNが見えることを知らなかったのでめちゃくちゃネタバレなNNにしてしまいました。こんな名前してるのにどくどくを打ってくれた対戦相手の方、公平な対戦をしてくださりありがとうございます。

 

 

 

一応回し方みたいなのは

ルート1: 先発ジメンZ→(動いて1匹落とせたらまあ勝ち)

ルート2: 先発ジメンZ→(同速負けして落とされる)→ネムリタランで起点にして2匹ぐらい落とす→最後にヒロイタランで確殺

です。クイタランミラーでの立ち回りを考慮しないといけないのなんて今大会くらいなんじゃないでしょうか

 

-----------------------

結果は以下にまとめてくださっていますが4-2で全体3位でした。こんなカスポケモン相手に結構頑張って考察したので優勝したかった… 悔しさをバネに来年(是非開催してくださいお願いします)も頑張ります。本当に楽しかったです。

chanmiss.blog.fc2.com

 

 

I'm KUITARIDER !!

f:id:shingaryu:20171011225728j:plain

 

 

 

 

 

初めてジムカーナの練習会に参加してきた

一つ前の記事にあるように最近バイクを買った

ジムカーナ用である。

 

まあなんで借金をしてまで今買ったのかというと、今シーズン中にジムカーナを始めたかったから。なのでホントはもっと早く練習会に参加し始める予定だったけど自然の脅威に勝てなかったので今日が初参加になりました。

21世紀にもなってなぜ人類は台風なんかに翻弄されているんだ

 

概要とか

二輪ジムカーナの公式団体が主催する、JAGE練習会です(以下J練と略したりします)。

二輪ジムカーナ主催者団体協議会(JAGE)

日時: 2017年10月7日 9:30~15:30

場所: トミンモーターランド(茨城県)

内容: 自由走行によるジムカーナ練習会

 

正直なところJAGEのHPは更新が中途半端だったり、初心者にとって情報が少なかったりするので個人的に気になった点をまとめ。

・予約はたぶん必要ない(そもそも予約を受け付けてるのか結局聞かなかったが、普通に飛び入りでいけた)

・適当な時間に来ていい(特に時間で区切ったイベントがあるわけではないので)

・車体の検査とかはない、公道仕様のまま走っていい(ただ、ミラーは簡単なので外すのが普通っぽいです)

・初心者なら、申し出ればスタッフが色々教えてくれる+初心者専用ゼッケンを見て周りも気を使ってくれる

 

装備(服装)ですが、僕はヘルメット・グローブの他にライジャケとライディングパンツとレーシングブーツで行きました。どれくらいまで許されるか分かりませんが周りも大体同じ格好でした。バイクって感じの服装してればいいとおもいます。

 

当日の流れ(ぼくの日記)

当日、トミンモーターランドの外周まで辿り着くとこんな感じの風景が遠目に見えました。13時半ぐらい。朝は雨が降っていたので仕方なくこの時間着になりました。

ちなみにここに辿り着く前にバイクでの初高速道路を体験して途中小雨に振られたりしたので、3連休初日の高揚感がなければ途中で帰ってたと思う。ワンチャン来年のお盆に天国から実家に帰ってたと思う。

f:id:shingaryu:20171007234945j:plain

 

なんか入り口がめっちゃ小さいと思った。横幅が力士4人分ぐらい

初参加イベントあるあるですが、受付までどう行けばいいか分からなかったので適当にオレンジ色ゼッケンのスタッフの人に教えてもらいました。無知は晒していけ

 

ちなみに朝から来た場合の通常の受付の流れは、サーキットの入り口から対角線上にある駐車エリアまで行って、荷物を置いてから受付にバイクと共に向かう感じらしい。

受付で同意書を書き、参加費を払ってゼッケンを着けたら後は自由。

今回の場合会場内にコースは3つあって、そのうち1つがタイムアタック用だった。よくわからなかったので1つしか使ってないけど。

 

受付時にホンマもんの初心者(交通安全教室すら行ったことなし)だと伝えてあったので最初はスタッフの人が案内・先導してくれました。下の写真みたいな感じのコース。

とりあえずついて行きながら3週ぐらい走った。1週目はウワキツだったけどそんなにタイトなコーナーはなかったので、まあ完走はできた。速いかどうかは知らん。

派手にすっ転んだりパイロンふっ飛ばしたりしなかったんで危険人物とは思われなかったのか、3周ぐらいの先導が終わったらあとは自由に、ということになった。

 

f:id:shingaryu:20171008000821j:plain

 

割とそっけない気はしたが、教習所でもないし指導はこんなもんかな、と気ままに走っていたところ、休憩がてら止まったタイミングで別のスタッフ(おじいちゃん)に声をかけられた。

「どう?走ってみて」

「お、いいもん持ってんじゃん (タンデムステップを指差しながら)」

 

ジムカーナ初心者に対してしばしば行われると噂の、2ケツ指導が始まった~

 

ジムカーナは低速走行だから、体重移動はいらない」

「加減速で生じるGに体を乗せていく感じ」

いやヤバイ。おじいちゃんスタッフが前、俺がその後ろに乗りコース上を実際に走りながら走り方を教えてくれたのだが、速すぎて振り落とされそうになるから説明を聞くどころの話じゃない。ジェットコースターかよ。バブル時代の遺産みたいなクソ田舎の変な遊園地よりはスリルあるぞこれ。

そもそもそんな走りを初めて乗るバイクで、タンデムでできるおじいちゃんスタッフがヤバイ。おじいちゃんの面を被ったプロのおじさんなんじゃないか????

 

 

まあ、指摘された内容はとても的確だったので、以降はアドバイスを参考にしながらちょっとずつ感覚を掴んでいきましたとさ。感謝(手を合わせる絵文字)。

 

 

 

f:id:shingaryu:20171008003139j:plain

別角度からの写真

ご覧の通り青ゼッケン(初心者ゼッケン)を着けた俺がトコトコ走ってても他の人たちは普通に来ます。でも大丈夫。みんな青ゼッケンを見てそれなりに間隔を空けてスタートしてくれます。パイロン倒しても大丈夫。スタッフが直してくれます(たぶん余裕があれば多少は自分でも直したほうがいい)。

 

 

途中ガス欠になりかけて茨城のクソ田舎をガソリン探しに走り回ったとかはあったけどあとは普通に終了時刻まで1つのコースをグルグルしてました。

ちなみにめっちゃ汗かいた。休憩なしだと体力1時間ぐらいしか持たなかった。三宅麻理恵かな?

 

 

終了時刻になるとスタッフが各コースの入り口に立って終了の合図をしてくれます。今日はだいたい16時ぐらい。そしたら素直に撤収です。ちなみにこの時刻?を過ぎると会場内は出場するとき以外エンジンをかけるのが禁止になるので注意です(16時をだいぶ過ぎてから、荷物取りに行くときに走っていったら止められた)

 

 

せっかくなんで今日同じ青ゼッケンで同じように練習していた人に話しかけてみた。個人情報なんであんまり晒せないが、両親にジムカーナを教わってるらしい。

あとは荷物取りに行ったときに同じく自走で来たVTR乗りの方にも話しかけてもらえた。自走が少なかったので親近感湧いた。

2人とも同じ会場で翌日に行われるDUNLOP・月刊オートバイ・CUP! ジムカーナ JAPAN にも来るらしい。俺はまだまだ参加しないけど2日連続で走れるのすげえなあ

 

 

まとめ

ということで結果的には飛び入りで単騎凸しても皆さん優しくしてくれたし普通に楽しめた。イマドキのコンテンツ(ゲームとか声優ライブとか、要するに10~30代のオタクが好きなやつ)に比べると、SNSやWebでは情報が少ないので閉鎖的な感じが否めないのだが、一度入ってみると普通に新参には優しい印象がある。単にインターネットが浸透してないだけかな?

 

練習会の流れまで含めて今回記事を書いたのは同じような初心者の方に参加してもらいたいからなので、初心者の方は是非ジムカーナやりましょう。というか一緒に出ましょう。今のところジムカーナ友達が居ないオタクなので。