やりたいこと
久しぶりの投稿です。
クラクラは少し休憩です。
今回はポケモンのタイプの強さの数値的評価方法について考えてみました。この投稿で紹介しているコードは以下のノートブックにもまとめてあります。
https://colab.research.google.com/drive/1t0q9Fj6MNTY-itminHmxhe04_7S8GUoP?usp=sharing
はじめに
ポケモンのタイプは18タイプがあり、タイプ相性の関係が複雑であり、そのため、数値評価が難しい。そこでページランク手法を用いてタイプの強さを評価することを考える。ポケモンの強さを攻撃面と耐性面に分け、それぞれページランクを用いてそれぞれ数値化する。その後、タイプの強さを求めた攻撃面、耐久面の演算で評価するものとする。
ページランクとは
ページランクは、Webページの重要度を決定するためのアルゴリズムである.検索エンジンのGoogleにおいては,検索語に対する適切な結果を得るために用いられている中心的な技術である.Webページにおいては多くのページからリンクされている,良質なページからリンクされているとそのページの重要度が高くなる.
ページランクは $MP=P$ の解を要素の和が 1 になるように正規化することで求めることができる.ここで$M$は遷移確率行列,$P$は重要度のベクトルを表している.式の意味としては「注目したタイプの重要度=$\sum$(注目している度合 $\times$ 注目したタイプの重要度)」と考えることができる.
ポケモンの強さの数値化の説明
ここでは簡単のため、水、草、炎、氷の4タイプのみを用いてページランク手法について説明する。図で表すと以下のようになる。ピンク色の矢印が2倍、黒色が等倍、灰色が0.5倍の倍率を表している。
この相性関係を有効グラフとみなすと、隣接行列は以下のように表すことができる。
\begin{matrix}
炎 &水 &草 &氷
\end{matrix}
\\
\begin{pmatrix}
0.5 & 0.5 & 2 & 2 \\
2 & 0.5 & 0.5 & 1 \\
0.5 & 2 & 0.5 & 1 \\
0.5 & 0.5 & 2 & 0.5
\end{pmatrix}
\begin{matrix}
炎 \\
水\\
草\\
氷\\
\end{matrix}
耐久面の評価方法
まず、ページランク手法を用いるために先程の隣接行列の転置し、列ごとの総和が1になるように正規化する。そして、ページランクを用いてそれぞれのノードの大きさを求める。この値の意味について考えると、列が攻撃する側のタイプ、行が攻撃される側のタイプであるため,行の要素の和が大きいとそのタイプが受けるダメージが大きいことを意味している。つまり、$MP=P$において、
(ノードの重要度) = $\sum$ {(ノードnの重要度) $\times$(nからの攻撃の重み}
と考えることができる。そのため、弱点を疲れやすいタイプや等倍以上で入るタイプが多いほど大きな値となり、値が大きいと耐久面が低いと見なすことができる。4タイプでのの計算結果は炎0.21、水0.23、草0.29、氷0.25となった。
攻撃面の評価方法
有効グラフの矢印の向きを逆にしたものを用いることとする。耐久面の計算と同様に求めると$MP=P$は
(ノードの重要度) = $\sum$ {(ノードnの重要度) $\times$(nへの攻撃の重み}
とみなすことができ、今度は弱点をつきやすい、半減以下で受けられにくい(一貫性が高い)タイプほど大きな値となる。4タイプでの計算結果は炎0.27、水0.26、草0.26、氷0.20となった。
タイプの強さの評価
タイプの強さを(タイプの強さ)=(攻撃面)/(耐久面)でそれぞれ計算し、わかりやすいように全体の和が100になるように変換し、その値をタイプの強さと考える。4タイプでの計算結果は炎31.3、水27.5、草21.6、氷19.6となった。
#18タイプでのタイプの強さの数値化
結果は以下の通りである。
概ね合っているように感じられる。
ノーマルとドラゴンが低いようにも感じるが…
#今後したいこと
今回の評価方法では「耐久面で弱いタイプに耐久面で弱ければ弱い」「攻撃面で強いタイプに攻撃面で強ければ強い」という考え方の計算方法であるため、「耐久面で強いタイプに攻撃面で強ければ強い」のような計算方法ができればなおいいと感じた。
また、今回は単タイプに絞ってタイプの強さを評価したが、今後は複合タイプを考慮した相性関係について考えてみたいと思う。
2022/2/17 追記
複合タイプにて考察してた方がいたので、リンクを置いときます。
https://qiita.com/masaka_programming/items/503eaa2c1fa776dfdb19