DoreminKのブログ

ポケモンダブルバトルの構築記事

ポケモンの総合耐久指数を数学的に考察

 

こんにちは。共通試験だった人はお疲れさまでした。失敗した人も成功した人も2次試験頑張ってください。

 

 

 


ポケモンくそ雑魚勢どれみんです。

【呪術廻戦】7話のネタバレ|虎杖が宿儺に代わり特級呪霊と対決!?|マンガノジカン

先日やなぎさんがあげていた耐久調整の話に触発されて、自分も数字を使った記事を書きたくなったので、書いています。

↓やなぎさんの記事

note.com

今回の記事は「耐久指数とは何?」「耐久指数を上げるにはどうしたらいいの?」という内容です。(数式が出てくるため、パソコン推奨)

※今回の話の根本的な概念は筆者独自の案ではなく、既出のもので、以下のブログが初出だと思います。(違ったらすみません)

firefly1987.blog.fc2.com

 

耐久指数について

※物理耐久指数・特殊耐久指数の概念を理解している人は飛ばしてください

ご存じの通り、ポケモンはHP, 攻撃, 防御, 特攻, 特防, 素早さなどのステータスが数値として決まっていて、ポケモンにおけるダメージは、技の威力とステータス・特性や持ち物などによって決まります。実際、物理技で攻撃する場合は、

攻撃指数=技の威力×攻撃するポケモンの攻撃×攻撃ランク補正×・・・

防御指数=攻撃を受けるポケモンの防御×防御ランク補正×・・・

とすると、以下のような式になります。

\begin{equation}
ダメージ = \frac{攻撃指数}{防御指数}   (1)
\end{equation}

つまり、この攻撃を受けたポケモンの残りHPはポケモンのHP-攻撃指数/防御指数となります。

以下では、攻撃するポケモンや状況が同じであるときに、攻撃を受けるポケモンのステータスによって、耐久値がどう変化するか考察していきます。

ここで、耐久値とは何か考えたときに、(1)式で表されるダメージではポケモンのHPが考慮されていないので、「ダメージが攻撃を受けたポケモンのHPを占める割合(ダメージ割合)」を考えることが自然です。

さらに、式(1)を防御実数値Bとそれ以外の部分(a)に分け、ダメージ割合を表現すると、

\begin{align} ダメージ割合= \frac{a}{H B} (2) \end{align} となります。ここで攻撃を受けるポケモンのHPをHと定義しています。

式(2)で表現されたダメージ割合が小さくなる方が、耐久値が高いということができます。式(2)において、a は変化しないと考えると、ダメージ割合を小さくするにはHB を大きくすればいいことが分かります。この値HB 物理耐久指数といいます。この議論を、特殊技に対しても適応すれば、特防実数値をDとすると、特殊耐久指数HDと定義でき、物理耐久指数特殊耐久指数の和を総合耐久指数といい、次のようになります。

\begin{align} 総合耐久指数 = H(B+D)  (3) \end{align} 以降でも、攻撃を受けるポケモンのHP, 防御, 特防の実数値をH, B, Dとします。

H=B+Dについて

※H=B+Dの時に、総合耐久指数が最大になることを理解している人は飛ばしてください

物理耐久指数・特殊耐久指数・総合耐久指数について定義しましたが、これらをできるだけ大きくするにはどうすればいいでしょうか。もちろん防御や特防・HPを無限に大きくすれば、これらを無限に大きくできますが、実際の対戦ではできませんので、拘束条件を付けましょう。

\begin{align} H+B+D = k  (4) \end{align}

とおきました。なんか線形計画法みたいで懐かしいですね。

(3), (4)式を使って、この拘束条件で(3)が最大になる(H, B, D)を考えてみましょう。
代入して計算してみると、 \begin{align} 総合耐久指数 = H(k-H) = -(H-\frac{k}{2})^2+\frac{k^2}{4} \end{align}
となり、H=\frac{k}{2}の時、総合耐久指数が最大値をとることが分かります。これを(4)式に入れると、B+D=\frac{k}{2}となり、H=B+Dとなります。これは、長さの和が等しい長方形の面積が最大であるときは、正方形であることと同じですね。つまり、総合耐久指数が最大となるときは、H=B+Dだということが分かりました。

また、総合耐久指数を使わなくても、ある条件においてはH=B+Dが良いとも示されています。

総合耐久指数について

さて、ここまでの話は多くのポケモン勢は知っていることだと思います。が、総合耐久指数って何でしょうか?なんで、物理耐久指数と特殊耐久指数の和をとっているのでしょうか・・・。「そりゃ物理技と特殊技のそれぞれのダメージの合計は足し算なんだから、当たり前じゃね?」と思うかもしれませんが、実は違います。

ここでは、より直感的な総合耐久指数を定義してみます。以下では、物理技と特殊技の防御(特防)ステータス以外の要素が同じであると仮定します。

この仮定において、物理技と特殊技のダメージ量の合計は次のようになります。

\begin{align} ダメージ = \frac{a}{B} + \frac{a}{D} (1)' \end{align}

よって、ダメージ割合は

\begin{align} ダメージ割合 = a(\frac{1}{HB} + \frac{1}{HD}) = a\frac{B+D}{HBD} (2)' \end{align}

よって、総合耐久指数は、

\begin{align} 総合耐久指数 = \frac{HBD}{B+D} (3)' \end{align}

という式が妥当だと思います。

それでは、この総合耐久指数が最大になるときはどういうときなのでしょうか?

拘束条件を考え、式(4), (3)'から総合耐久指数が最大になるときを求めてみましょう。

式(3)'のような多変数関数に拘束条件が存在するときの、最大値や最小値を求めるときはラグランジュの未定乗数法が有効です。(工学部の院試で超頻出!!!)

詳しい説明はヨビノリさんのyoutubeがおすすめ。

ラグランジュの未定乗数法の気持ち【条件付き極値問題】 - YouTube

難しいことは置いておいて、式を立ててみます。まず、わかりやすくするために

\begin{align} f(H, B, D) = \frac{HBD}{B+D}\\\ g(H, B, D) = H+B+D-k \end{align}

と関数の形で記述しておきます。この時、f(H, B, D)が最大値をとる必要条件は次のようになります。

\begin{align} \frac{\partial f}{\partial H} - \lambda \frac{\partial g}{\partial H} = \frac{BD}{B+D} - \lambda = 0 \\\ \frac{\partial f}{\partial B} - \lambda \frac{\partial g}{\partial B} = \frac{HD^2}{(B+D)^2} - \lambda = 0 \\\ \frac{\partial f}{\partial D} - \lambda \frac{\partial g}{\partial D} = \frac{HB^2}{(B+D)^2} - \lambda = 0 \\\ g(H, B, D) = H + B + D -k = 0 \end{align}

ここで、 \frac{\partial f}{\partial H}偏微分を表し、微分と同じでHを変化させたとき、fがどのくらい変化をするか表します。また、\lambdaはただの定数で、特に意味はないのですが、式と未知数が共に4つなので、連立方程式を解くことができます。

この連立方程式を解くと、解は H = B+D, B=D となります。つまり、先ほど定義した総合耐久指数が最大になるときは、

防御と特防の実数値が等しくかつ、HPの実数値が防御と特防の和であるとき

と言えるでしょう。先ほどの議論と結果はほとんど同じですが、B=D である必要もわかりました。

これまでの議論における注意点をまとめておきます。この結論は、H+B+D が一定であるときに成り立つので、性格補正をどこにかけるかで、H+B+D が変化する場合は成り立ちません。また、総合耐久指数は攻撃を耐えるか耐えないかは考慮できていないことにも注意してください(ダメージ割合が0.99か1.01の差は実際はかけ離れているが、このモデルでは表現できていない)。

最後に、この式はH, B, Dの値自体に制限をかけていません。そのため、極論Hがマイナスの場合もあります。重要なのは、

 H = B+D, B=D がどのポケモンも実現できるわけではない

ということです。この課題を解決するために、H=B+D, B=D を実現できないポケモンの総合耐久指数を高めるためにはどこに努力値を振ればよい議論します。

総合耐久指数を最大にするためには?

さて、H=B+D, B=D を実現できない場合、総合耐久指数をできるだけ高めるにはどうしたらよいでしょうか。ここでは先ほどの偏微分を利用します。 \frac{\partial f}{\partial X}Xを変化させたとき、fがどのくらい変化をするか表すので、 \frac{\partial f}{\partial X}が大きいほど、Xを少し大きくしただけで、fが大きくなることを示します。よって、 \frac{\partial f}{\partial H}, \frac{\partial f}{\partial B}, \frac{\partial f}{\partial D}の大小関係を比較して、一番大きくなる変数に努力値を割けばよいといえるでしょう。

まず、改めて偏微分の値を求めておきましょう。

\begin{align} \frac{\partial f}{\partial H} = \frac{BD}{B+D} (5) \\\ \frac{\partial f}{\partial B} = \frac{HD^2}{(B+D)^2} (6) \\\ \frac{\partial f}{\partial D} = \frac{HB^2}{(B+D)^2} (7) \end{align}

この式を見ると、B, Dについて対称なので、まずは、\frac{\partial f}{\partial H}が最大になるときを考えていきます。

\begin{align} \frac{\partial f}{\partial H} - \frac{\partial f}{\partial B} >0 \Leftrightarrow H < \frac{B}{D}(B+D) (8) \\\ \frac{\partial f}{\partial H} - \frac{\partial f}{\partial D} >0 \Leftrightarrow H < \frac{D}{B}(B+D) (9) \end{align}

となるので、式(7), 式(8)を満たすとき\frac{\partial f}{\partial H}が最大になり、Hの実数値を上げるべきだといえます。

式(7), (8)をよく見ると、\frac{B}{D}, \frac{D}{B}は少なくとも一方が1以下であることから、

H \gt B+D であるときは、\frac{\partial f}{\partial H}が最大にはなりえない

ということが言えます。

では、 H\lt B+Dとなるとき、\frac{\partial f}{\partial D}, \frac{\partial f}{\partial B}のどちらが最大になるのでしょうか。

\begin{align} \frac{\partial f}{\partial B} - \frac{\partial f}{\partial D} > 0 \Leftrightarrow B < D \end{align}

よって、H \gt B+D であるときは、B, Dの実数値が小さいほうに努力値を割くべき

だといえます。

次に、H \lt B+D の時を考えてみます。式(7), (8)は必ずどちらかに含まれるような関係になっていて、それはB, Dの大小関係で決まっています。B \lt D と仮定すると、 H \lt \frac{B}{D}(B+D)を満たすとき、Hの努力値を振り、満たさないときはBの努力値を振るべきだといえます。

以上をまとめると、

  1. HB+Dを比較する。
  2. H \gt B+D ならB, Dの小さいほうに努力値を振る
  3. H \lt B+D なら、B, Dの実数値が低いほうを参照して、H, k(B+D)の小さいほうに努力値を振る(k \lt 1B, Dの比)

以上の操作で、総合耐久指数を最大にすることができます。

※性格補正などH+B+Dが変化するときや物理と特殊の攻撃を等しく食らわないことを想定する場合などはまた別の議論が必要になることに注意してください。

結論

  • 物理耐久指数はHB, 特殊耐久指数はHDで表される
  • 総合耐久指数はH(B+D)\frac{HBD}{B+D}で表される
  • 総合耐久指数が最大であるときは、H=B+D かつB=Dであるとき
  • H=B+D かつB=Dを満たせないときは、kB, Dの比とするとHk(B+D)を比較して、小さいほうに努力値を割けばよい

見てくれる人多かったら、性格補正を考慮したバージョンと合体ヘイラッシャの振り方についても記事を書こうと思います。

 

長い記事を見てくれてありがとうございました!

質問があれば、@NakayamanKKまで

 

p.s

明日の俺、早く修論やれ