I'm KUITARIDER.

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

シングルバトルの選出アルゴリズムを考えよう(2)

コレの続き
shingaryu.hatenablog.com

 

(3)有利対面数法

計算手順:

(1)自分PT(6匹)と相手PT(6匹)のポケモンごとの相性を表す対面相性値表を用意する。

(2)自分PTの中から3匹を選出として選ぶ。

(3)選出された3匹について、各相手ポケモンに対して対面相性値が0より大きい(→有利対面)かどうかを表すテーブルを新たにつくる。(分かりやすくするため)

(4)各相手ポケモンごとに、自分の選出ポケモンの中に有利対面をとるものが存在すればTRUE、しなければFALSEを割り当てる。

(5)相手ポケモン6匹のうち、手順(4)でTRUEとなった割合をカバー率と定義する。

(6)手順(3)で作ったテーブルに存在する有利対面の総数を有利対面数と定義する。

(7)すべての自分の選出(20通り)について以上を計算する。

(8)カバー率が最大(大抵は1.0)となる選出のうち、有利対面数の多い選出を採用する。

f:id:shingaryu:20201205193621p:plain

感想:

相手ポケモンの対策に穴を作らない範囲で、有利対面の数が多い選出を選ぶ。対面相性値(現状は-1024~1024)を簡略化して各対面が「有利」か「不利」かだけを考えている。

おそらく、対面構築の理論にはかなりハマっている。対面構築が想定している、相手倒す→相手死にだし→自分倒される→自分死に出し→相手倒す→… の一直線のフローにおいては、役割対象とはつねにHP満タン状態で対峙することになる。これは対面相性値の計算条件と同じ。そして、つねに相手ポケモンに対して有利なポケモンを死に出しできるかが重要なので、期待値的には、対面相性値から抽出した有利対面の数が多い選出が強くなる。(すべて理想的なケースでの話です)

ただし、特定の相手ポケモンに全く何もできない(穴がある)選出をしてしまうと、もしそのポケモンを繰り出されたとき容赦なく3タテされてしまうし、普通の相手ならそのような"刺さっている"ポケモンはほぼ出してくるので、手順のところに記載した「カバー率」という最低基準を設けている。

 

どんな選出でもカバー率が1.0にならない相手PTの場合、カバーできなかったポケモンを出されるとほぼ負けだが、出されないことを祈ってとりあえず有利対面数が多い選出を選ぶしかない。ただ、そもそもカバー率 < 1.0 が頻繁にでるような場合、一度PT構築を見直したほうがいいともいえる。

 

 

主な課題点:

・「有利」か「不利」かの境界線を対面相性値=0におくと、ある特定ポケモンの処理をギリギリ勝てる程度のポケモンに一任するような選出が出てくる。リスクを考えると対面相性値100か200あたりを境界線にしたほうがよさそう

・たとえば有効対面数が同じ9となる選出でも、内訳を考えると(6, 2, 1)という1匹が全抜きできそうなケース、(3, 3, 3)というどのポケモンも対等に貢献しているケースがあるがどっちがいいのか?

 

サンプル計算結果

自分: マリルリハッサムサザンドラカビゴンローブシンヒートロトム

相手: パッチラゴン・ヒヒダルマ(スカーフ)・トリトドン・オーロンゲ・ハピナス・ウーラオス

同じ条件の他の選出アルゴリズム(過去記事)と比較すると面白いかも。強い選出はどのアルゴリズムでも上位にきます。

 

最適選出: マリルリハッサムサザンドラ (評価値1105)

次善選出: マリルリサザンドラヒートロトム (評価値1095)

※評価値の計算式は適当なので大小だけ注目してください

 

f:id:shingaryu:20201205203553p:plain

 

最適選出 内訳:

f:id:shingaryu:20201205203734p:plain

 

次善選出 内訳:

f:id:shingaryu:20201205203752p:plain

 

 

体感では、結構勝てます。

AI使ってどのアルゴリズムが強いのか実証実験したいですね