ポケモン対戦の最適戦略解析ツールのご紹介

はじめに

本記事では、最近開発したポケモン対戦の最適戦略解析ツールを紹介いたします。本ツールが解析対象とするのはバトル中の戦略です。具体的には、バトル中の状況変化に応じて、どの技を選択&どのポケモンに交代すればいいのかを解析します。

本ツールでは、ゲーム理論に基づいて、理論的に最適な戦略(正確には均衡戦略)を算出します。その分、計算量が多くなりますので、詳細な設定は反映できず、簡易的な設定のみを扱えます。扱える設定に制約はありますが、設定は変更できるように実装していますので、ご興味に合わせてカスタマイズいただけます。(例えば、最近目にした話題ですと、一撃技を使った方が良いか、不意打ちを使った方が良いか、などの解析にも使えそうです。)

本記事では、そのツールを用いて解析できるゲーム設定と解析例を紹介いたします。紹介を通して、このツールを使ってどのようなことができるのか&どのような出力が得られるのかを知っていただき、興味を持っていただけると幸いです。

ツール

以下のレポジトリからご使用いただけます。使い方はまだ記載できておりません。私の体力的にいつ提供できるか分かりませんので、ご使用になりたい方はtwitterにて個別に連絡くださいますと幸いです。各々が解析したい設定へのモデリングについても、私の興味の持てる範囲であれば協力しますので、連絡くださいますと幸いです。

github.com

本記事で扱うゲーム設定

本記事で解析例として説明するゲーム設定を説明します。以下の設定はあくまで一例です。前述の通り、設定は変更できるように実装していますので、ご興味に合わせてカスタマイズいただけます。

  • 一般的なシングルバトルを簡素化したもの
  • ポケモン
    • 最大HPは固定(最大HP=1.00;計算量の都合で0.25区切り)
    • タイプに応じた技を保持(草水タイプ→草タイプ技・水タイプ技)
  • 選出
    • 事前にポケモン3匹(うち先頭の1匹)を選出
    • 相手がどの3匹を選択したかは互いに既知
  • バトル
    • 各プレイヤは攻撃か交換を同時に選択
    • 互いに攻撃の場合はランダムに先行後行が決定
    • 攻撃のダメージ量は攻撃側の技タイプと防御側のポケモンタイプのみで決定
    • 等倍の場合を0.5としてタイプの倍率を乗算
    • どちらかのプレイヤのポケモンが全滅するまで繰り返し

解析例

一般的に良い選出であるといわれているサザンガルドマリルリを3匹に選出した解析例を紹介いたします*1。バトル開始時の対面はサザンドラギルガルドといたしました。

算出した最適戦略に基づくバトル例を通して、本ツールからどのような出力が得られるのかを説明いたします。

まずは、バトル例スライドの見方&本ツールで得られる出力を説明いたします。

各盤面の情報は以下となります。

本ツールでは、各盤面の情報を入力とし、以下の情報を出力します。

  • 各盤面の評価値(プレイヤ1がこの盤面から勝利する確率):上のバー
  • 各プレイヤの最適な行動選択割合:中央下の表
  • 行動の組に対する評価値:中央下の表

中央下の表(利得表)の見方は以下です。

  • 行(列)の行動:プレイヤ1(プレイヤ2)の行動
  • 行動の右(下)に書かれている数値:最適戦略における行動の選択割合
  • 行と列に対する利得表の値:選択の組に対する評価値
  • *印の付いた選択:バトル例で選択された選択

1ターン目を例に、さらに本ツールの出力のイメージを膨らませます。1ターン目はサザンドラギルガルドの対面です。サザンドラは悪技を持つのでギルガルドに対して有利です。具体的にはプレイヤ1の勝率が53%ということで、3%有利と分かります。プレイヤ1のサザンドラは悪技が第一候補に挙がりそうです。これに対して、プレイヤ2は悪技受けのマリルリへの交換も選択肢に入ってきます。これに対して、プレイヤ1はマリルリに有利なギルガルドへの交換も考えた方がよさそうです。このように、相手の各選択に対して有利となる自身の選択があるので、最適な行動は一つには定まらないことが多いです。ここで、本ツールを使えば、各選択の組に対して最適な選択割合が分かります。

おわりに

計算時間とメモリ量を改善したい。

*1:サザンガルドはとても有名ですのでこの2匹を例として選んだことに異論は少ないかと思います。最後の1匹としてマリルリを選んだのは「サザンガルド」をgoogle検索するとオススメとして「マリルリ」が出てきたからです。あくまで一例としてお考えいただけますと幸いです。