I'm KUITARIDER.

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

ポケモンの対面相性を数値化してみる (Showdown シミュレーター使用)

これの応用。 

shingaryu.hatenablog.com

あとかなり昔に似たようなことやった気がする。精度が段違いだけど 

 

前回記事で第8世代に対応したポケモンAIが完成しました。

今回は対戦中の最善手探索とは視点を変えた自由研究です。

 

ポケモン対戦AI(Percymon)はMinimax計算により、最善手を局面の評価値とともに出力します。

この評価値は現局面の有利不利(※)を表します。大きければ大きいほど自分にとって有利な局面を表し、小さい評価値はより不利な状況を表します。

 

※正確には自分がその最善手を選択し、相手が"その最善手に対して"一番有効打となる手を選択した場合の、次ターンの局面を数値化したものです。

 

通常、Percymonはこの評価値を3 vs 3 もしくは 6 vs 6 のPT対戦において、両者の交代まで見込んで計算しますが、お互い1匹ずつしかポケモンを持たない1 vs 1 対戦を設定してやれば、この評価値は両者のポケモン1対1の純粋な相性(どっちがどれだけ強いのか)を表します。

 

そこで今回はポケモンソルジャーさんのシーズン2後期の使用率ランキングを参考にし、

環境上位16匹のポケモンの1対1の対面相性を計算してみることにします。

 【ポケモン剣盾】ランクマッチ シングルバトル集計とその考察【シーズン2後期】 | ポケモンソルジャー【ポケソル】

 

詳細条件は以下の通りです。

  1. 16匹のポケモン個体は通常ランクマッチで使われるのと同様に持ち物・個体値努力値・技・特性・性格 を適切に設定する(なるべく標準的な型を手動で設定する)。
  2. 局面の評価は、お互いのポケモンのHP割合の差 のみで判定する。(※2)
  3. 同じポケモン組で順番が異なるパターンを両方とも計算し、両者評価値の差を、0を中心に均等に振り分けてそれぞれの評価値とする(※3)
  4. 最大3手(≒3ターン)までの局面を予測する(3手読み)
  5. 同じポケモン同士の評価値は0とする
  6. ポケモンの組み合わせに対して100回ずつ評価値計算を行い、その平均をとる
  7. ダイマックスは使用不可

 

(※条件2について)

たとえば、

エースバーンの現在HP: 80/155 (51.6%)

アーマーガアの現在HP: 170/205 (82.9%)

のとき、エースバーン視点でのこの局面の(静的)評価値は

(51.6 - 82.9) / 100 * 1024 ≒ -320

つまり評価値は-1024 ~ 1024 の範囲の値をとる。

 

(※条件3について)

エースバーン vs アーマーガア の評価値 = 300 (エースバーン視点)

アーマーガア vs エースバーン の評価値 = -100 (アーマーガア視点)

と計算されたとき、評価値の差は300 - (-100) = 400 でエースバーン > アーマーガアなので

エースバーン vs アーマーガア → 200

アーマーガア vs エースバーン → -200 を最終的な評価値とする。

 

結果

対面相性表_16x16_20200213 - Google スプレッドシート

エクセルダウンロードもできると思います。シートが複数あります。

  • 3手読み
  • 2手読み
  • 1手読み
  • 3手読み値-2手読み値 (※)
  • 2手読み値-1手読み値 (※)

 

画像Ver.はこちら(3手読み最終結果のみ)

f:id:shingaryu:20200215222410p:plain

(画像版)対面相性表 3手読み

 (弁明: Showdownの英語表記が読めなくてカバルドン・水ロトムの持ち物を間違えてバンジのみにしてしまいました。オボンを持たせたつもりでした。)

 

※ (n手読み値 - (n -1)手読み値)について

ポケモン組のn手読みでの評価値から、n-1手読みでの評価値を引き算したものを同様に表でまとめたものです。

この値が大きい場合、n-1ターン目終了時点よりもnターン目終了時点の方が局面が好転しているということになります(下記の考察で使用)

 

表の見方

  • 縦の列が自ポケモン、横の列が相手ポケモンと理解してください。
  • ギルガルド@弱点保険 はパルシェン@タスキ に対して評価値が701で、圧倒的有利です。
  • ギルガルドの全ポケモンに対しての評価値を合算すると2010で、今回の16匹の中では上位に入ります。
  • 表内部の値は上位/下位10%を緑/赤で、合計値は上位/下位20%を緑/赤で示しています。

 

考察

注1)あくまで1対1の対面相性です。個々のポケモンの性能を広い意味で示しているわけではありません。

注2) ある程度ポケモン対戦をやり込んでいる方々にとっては当たり前のことが書いてあります。

 

・ダルマの火力がヤバイ

表の「合計」欄を見た方は誰しもヒヒダルマの4463という値がずば抜けていることに気づいたことでしょう。

無償突破(評価値1024)も2匹のポケモンに対して実現できています。

メモ: このダルマはスカーフです。

 

 

ミミッキュの万能感

合計評価値第2位がミミッキュです。まあ当たり前でしょう。特性により1ターン多く行動できるので。

物理受けのアーマーガアや特性を無視してくるドリュウズパルシェンにはちゃんと(?)不利を取っています。(計算がある程度正しい証明)

 

 

・サポート型は対面性能は高くない

例えばカバルドンは、地震が通らない相手はほとんどHPを削れず結果として最小値に近い評価値を出しています。

前述の通り、今回の計算はあくまでHP割合のみで評価値を割り出しています。そのためステロや、あくびを撒き後続のサポートをする効果は数字には現れていません。

  

 

・「先制で落とす」 ということの重要さ

Googleスプレッドシートの"2手読み値-1手読み値"のシートを使って説明します。

この表での値が高いポケモンは、1ターン目終了時点よりも2ターン目終了時点の方が局面が好転していることになります。

その要因の最たるものは、2ターン目に先制して相手を倒している、というパターンです。この場合、1ターン目には食らっていた相手ポケモンからのダメージを食らわずに2ターン目(というか試合自体)が終了するので当然HP割合の差は有利になります。

 

下の画像は表の2,3 行目付近です。2行目はタスキエースバーン、3行目はタスキパルシェンです。

この2体は2ターン目終了時点で評価値を大きく伸ばしています。つまり2ターン目に先制で相手を倒すパターンが頻出しています。

エースバーンはタスキで耐えた1ターン目との合算ダメージ、パルシェンは同じくタスキで耐えたことによる積み技やこおりのつぶてで先制で相手ポケモンを戦闘不能に持ち込んでいることでしょう。

f:id:shingaryu:20200216014016p:plain

 

あくまでHP割合の差で評価した場合の議論であることは注意すべきですが、太古の昔よりポケモン対戦で素早さ能力値が重視されてきたことの裏付けとなっています。

 

耐久ロトムカバルドンには逆に、倒されるターンに評価値が激落ちする傾向があります。

 

 

 ・弱点保険、スカーフ、タスキ は対面相性を覆す

上の例だとそもそもエースバーンがタスキを持っていなかった場合、ギャラドスの滝のぼりで一撃で倒されエースバーンに2ターン目の行動はなかったことでしょう。

さらにタスキの効用が分かりやすいのは物理タスキドラパルトと特殊メガネドラパルトの比較です。

スカーフヒヒダルマ・スカーフサザンドラには本来(特殊ドラパルトは)先制で倒されますが、タスキドラパルトの方はタスキで耐えられるため致命的に低い評価値とはなっていません(返り討ちにした場合にもHPは1しか残らないので、今回の評価方法ではあまり高い評価値にはなりません)。

f:id:shingaryu:20200216014756p:plain



また、全体的にギルガルドが異様に強く評価されていることが弱点保険の強さを裏付けています。今回両者の行動パターンはMinimaxで計算しているので、単に抜群技を打ち合うのではなく等倍技で削り→抜群技でフィニッシュという立ち回りも選択されているはずなのですが、それでも弱点保険は1対1対面では強いようです。

 

課題点

・HP割合だけの局面評価は妥当か?

もちろんこれだけで十分な評価ができているとはいえず、改良すべき点ですが、個人的には下手に状態異常、天候状態、タイプ相性などを機械的に評価に組み込むよりは安全だと。

たとえば対面のポケモンのタイプ相性で評価値を補正しようと思っても、「ふゆう」という特性、ヒヒダルマのダルマモードなど戦闘中にタイプが変わる例、フリーズドライというタイプ相性を一部無視する技、など例外が多すぎて対処しきれません。

ロトムが型破りドリュウズ地震を等倍で受けてしまうようなポケモンシミュレーターは嫌です…

 

・3手読みは妥当か?

耐久ポケモンに対しては妥当ではありません。例えば画像は"3手読み値-2手読み値"ですが、鉄壁アーマーガア、ビルドアップアーマーガア共に2ターン目→3ターン目 で評価値を大きく伸ばしています。4手読み、5手読み、、、と手数を伸ばしたらより有利が広がる可能性があります。

計算手数を伸ばすとそれまで計算時間(今回の計算は全体で5.5時間要しています)が伸びるので、それとの兼ね合いになります。

なお、大多数の並耐久ポケモンについては3ターンで大体決着がつくので(2ターン目→3ターン目で評価値があまり変わらない)、3手読みで十分だと思います。

f:id:shingaryu:20200216003139p:plain

 

・技外し、ひるみ、など低確率なリスク要素の過剰な考慮

Minimax計算のアルゴリズムを知っている方ならピンとくるかもしれませんが、

Minimaxは簡単にいうと「一番リスクの少ない選択をとる」アルゴリズムです。

 

実際に水ロトム vs ミミッキュ対面で説明すると、

Minimaxは「鬼火(willowisp)」というこちらの選択に対して相手の技4パターンに対する今後の局面をそれぞれ計算します。

重要なのは、この「鬼火(willowisp)」という選択に対する評価値は、相手の4つの技に対応する4つの評価値のうち、最小値(Min)を採用する ということです。

何が問題かというと、鬼火(命中率85%)は4回のうち1回くらいは外れます。鬼火が外れた局面は、この先何をやっても不利は覆りません。その先の局面をすべて計算した上で、その鬼火外しの局面は相手の技「shadowsneak」に紐付けられた評価値として、非常に低い値(-419)が記録されます。前述の通りこの-419という評価値は鬼火(willowisp)という選択の評価値にもなります。 このアルゴリズムは「相手プレイヤーは自分一番嫌な(評価値を下げさせる)選択を取る」という原理原則に基づいています。

ゲーム木の計算全体は100回の積算を行っていますが、個々の計算内で高確率で鬼火の効果が過小評価されてしまいます。 

 

トゲキッスの先制エアスラッシュなどでも同様の問題が発生します。この場合は、4回の試行で一度でもひるまされると、そのときの自分の選択自体が「不利な行動」と判定されてしまいます。

 

f:id:shingaryu:20200216004046p:plain

この問題は…アルゴリズムの適用限界でもあるのでより根本的に解決したいと思います。 

 

 

ポケモンの型の多様性

条件のところで各ポケモンの個体について「なるべく標準的な型を手動で設定する」と書きました。卒論発表会であれば教授から必ず突っ込まれる部分です。

ポケモン努力値振り・持ち物などによる結果のズレを考慮し、ポケモンの型自体をパラメータの一つとしてこの計算に組み込むというのはまた難解な課題です。

 

A努力値180だとあるポケモンが倒せなくて、A努力値188にするとそのポケモンが倒せる、この188という数字を見つけられたら嬉しいみたいな話は、ある1匹の仮想的に対しては実現できたとしても、環境全体に対して最適化しようとすると計算量が膨大になってしまうのでレイヤーを分けて考える必要があります。

 

ということでしばらくは、型の異なるポケモン個体を手動でいくつか作って別々に評価値を出していこうと思います。

ちなみにポケモン個体はShowdown本家のTeamBuilderで作成し、テキストをエクスポートしてプログラム内で読み込んでいます。

f:id:shingaryu:20200216011601p:plain

 

 

 チャオ!