見出し画像

【原神】聖遺物の最適な配分比からのずれ

こんにちわ。最近リア友が原神ユーザーとわかって原神熱が再発してるぴらんです。

先日エゴサしていたら素晴らしい記事を見つけましてその紹介も兼ねて発展させてみたいと思います。


要約

聖遺物の最適な配分について多くの先行研究が出ています。一方最適な配分からずれた場合についてはあまり詳しい調査はこれまでなされていません。今回はダメージ関数に放物線近似を適用することでずれの影響が大きく出る変数、出ない変数について調査しました。

結果、低労力帯を中心に会心率と会心ダメの比を1:2に保つことが重要であり、1:2さえ保っていれば会心系のステータスに割く労力の多寡は相対的に重要性が低いことがわかりました。

はじめに

会心率と会心ダメージの比は1 : 2 が理想であると言われています。
では、会心率と会心ダメージの比が 1 : 2 からどれくらいずれていた場合修正するべきで、どれくらいの誤差なら無視してよいのしょうか。また攻撃力等会心以外のステータスと会心の比に関してはどうでしょうか。

このテーマについては多くの先行研究がなされ、またそれらをまとめたとってもすばらな総説が出ています。(まじで良いので是非ご一読を!)

結論を引用すると以下のようになります。

$$
D=A_M(S_A) \times C_M(S_R,S_D)\times定数
$$

ただし$${D}$$は与えるダメージ、$${S_A,S_R,S_D}$$はそれぞれ攻撃力、会心率、会心ダメに費やす労力、$${A_M,C_M}$$はそれぞれ攻撃と会心の乗算因子

攻撃力と会心の例で十分伝わると判断して熟知やダメージUPの乗算因子は省いていますがこれらを付け加えることは理論上可能です。ただしこの後行う近似がこれらの因子にも成り立つかは要検討。

この時$${D}$$が最大となる条件は次で表されます。$${P}$$は上記記事内で定義された伸びしろ関数です。$${P_X=\frac1D\frac{\partial D}{\partial S_X} ,X=A,R,D }$$

$$
\lambda=P_A(S_A)=P_R(S_R)=P_D(S_D)\\
S=S_A+S_R+S_D
$$

先行研究では最適な配分比からのずれを求める方法として$${P_A:P_R:P_D}$$の比を見る方法を提案しています。

これは今のビルドから最適な配分に向けて微調整する際に有用な方法と考えられます。

ところで、これから聖遺物集めする初心者や新キャラ・新聖遺物等の実装で1から組む時等では、「最適な配分比はこうだ!会心率はこの程度最適からずれていいけど攻撃力はその1/XX倍しかずれちゃだめだ!」のような形式で結論を得られた方が考えやすい場合があります。

というわけですので、最適な配分比はこうだ!形式で結果をまとめるのを目標に計算を進めていきます。特に最適な配分比からのずれに関する研究は最適な配分比がいくつかという話題に比べて研究が進んでいない現状なのでそこについてが今回の主なテーマです。

理論

最適な配分比から少しずれた時にダメージがどれだけ低下するのか、といったことを評価したい場合は最適化したい関数を放物線で近似するのが定石です。大体の曲線は最適な配分比付近に限るなら放物線で近似することが可能です。

最適な配分比の時の量に$${^*}$$を付けて$${D^*}$$のようにあらわすことにします。ダメージの対数をテイラー展開することで放物線で近似し次のように書くことにします。ただし最適な労力配分からのずれ$${S_X-S_X^*}$$を$${\varDelta S_X}$$と書くことにします。

$$
\begin{align*}
\ln D(S_A,S_R,S_D)&=\ln D^*\\
&+\left( \frac{\partial \ln D}{\partial S_A}\right)^*\varDelta S_A+\left( \frac{\partial \ln D}{\partial S_R}\right)^*\varDelta S_R+\left( \frac{\partial \ln D}{\partial S_D}\right)^*\varDelta S_D \\
&+\frac12 \left( \frac{\partial \ln D}{\partial S_A}\right)^*\varDelta S_A^2+\dots+\left( \frac{\partial^2 \ln D}{\partial S_R\partial S_D}\right)^*\varDelta S_D\varDelta S_R\\
&=\ln D^*+\lambda^* \varDelta S +\frac12P_A'^*\varDelta S_A^2+\frac12P_R'^*\varDelta S_R^2+\frac12P_R'^*\varDelta S_D^2\\
&+\left(\frac{\partial P_R}{\partial S_D}\right)^*\varDelta S_R\varDelta S_D
\end{align*}
$$

ここで放物線の一般的な性質をおさらいします。
$${y=ax^2+bx+c}$$という放物線では二乗になってる項の係数$${a}$$が大きいほどグラフの変化が急になり最適解からずれが激しくなる一方で、$${a}$$が小さくなるほど最適解からのずれはゆるやかになります。

放物線y=ax^2+bx+cの性質

これを踏まえて$${\ln D}$$の微分の放物線近似の式を見返すと伸びしろ関数$${P}$$の微分が$${y=ax^2+bx+c}$$の$${a}$$に対応しており、伸びしろ関数の傾きが大きいほど最適値から少しずれただけでダメージが大きく落ちることがわかります。

したがってそれぞれの変数の伸びしろ関数を計算しどの変数で伸びしろ関数の傾きが大きくなるかを比較することで、重点的に最適化すべき変数を調べることができます。

計算

計算を始める前に

先行研究では労力を以下のように定義しています。

先行研究での労力の定義

本来これで計算するのが正しいのですが、以下の計算でいちいち小数点以下2桁まで書いてるとややこしいのでここでは1労力=攻撃力5=会心率3=会心ダメージ6で計算します。

攻撃力について

攻撃力の伸びしろ関数は以下のようになります。

$$
P_A=\frac{5}{1+5S_A}
$$

これの傾きを見るわけなので次のようになります。

$$
\frac{\partial P_A}{\partial S_A}=-\frac{5^2}{(1+5S_A^*)^2}\\
=-\lambda^{*2}
$$

したがって攻撃力の乗算因子は次のような放物線で近似できます。

$$
\ln A_M = \ln A_M^* +\lambda^* S_A -\frac12\lambda^{*2}S_A^2
$$

会心率と会心ダメの関係について

基本は上記の通りなのですが、会心率と会心ダメージについては交差項$${\left(\frac{\partial P_R}{\partial S_D}\right)^*S_RS_D}$$の存在により、$${z=ax^2+by^2+cxy}$$みたいなことになるので少々ややこしくなります。

この場合$${X=x+y,Y=x-y}$$のように変数を取り直すことで交差項が出てこない式に変更して解決します。

z=x^2+y^2+xyの等高線のイメージ図(見やすさの為に原点からずらしたりして多少不正確です)

$${x}$$と$${y}$$が変数のままだと扱いの難しい式も、上図のように等高線の長軸短軸にあわせて$${X,Y}$$を定義し直せば、$${z=X^2+3Y^2}$$のように交差項を消しそれぞれの変数の2乗の項だけにすることができます。

以上の話を$${S_R,S_D}$$が変数に関してもあてはめます。交差項が消えるような変数の取り方はヘッセ行列を対角化することで得られるので以下の行列の固有値や固有ベクトルを計算する作業に相当します。

$$
H=
\begin{pmatrix}
\frac{\partial2 \ln D}{\partial S_R^2} & \frac{\partial2 \ln D}{\partial S_R\partial S_D} \\
\frac{\partial2 \ln D}{\partial S_R\partial S_D} & \frac{\partial2 \ln D}{\partial S_D^2}
\end{pmatrix}\\
=\begin{pmatrix}
-\lambda^{*2}&\lambda^{*2}/18S_D^{*2}\\
\lambda^{*2}/18S_D^{*2}&-\lambda^{*2}
\end{pmatrix}\\
=-\lambda^{*2}
\begin{pmatrix}
1&-\frac1{18S_D^{*2}}\\
-\frac1{18S_D^{*2}}&1
\end{pmatrix}
$$

これの固有値、固有ベクトルが次のようになります。

$$
固有値=-\lambda^{*2}(1\pm  \frac{1}{18S_D^{*2}})\\
固有ベクトル=\begin{pmatrix} 1\\ \mp 1\end{pmatrix}
$$

これらの結果を用いると会心の乗算因子は次の式のように変形できます。ただし最適な労力配分からのずれ$${S_R-S_R^*}$$を$${\varDelta S_R}$$と書くことにします。

$$
\begin{align*}
\ln C_M&=\ln (1+3S_R\times6S_D)\\
&=\ln C_M^* +\lambda^*(\varDelta S_R+\varDelta S_D)+\frac12P_R'^* \varDelta S_R^2+\frac12P_D'^*\varDelta S_D^2+\frac{\partial P_R}{\partial S_D}\varDelta S_R\varDelta S_D\\
&=\ln C_M^* + \lambda^*(\varDelta S_R+\varDelta S_D)\\
&-\frac{\lambda^{*2}}2(1+  \frac{1}{18D^{*2}})(\varDelta S_R-\varDelta S_D)^2
-\frac{\lambda^{*2}}2(1-  \frac{1}{18D^{*2}})(\varDelta S_R+\varDelta S_D)^2
\end{align*}
$$

$${(\varDelta S_R-\varDelta S_D)}$$は会心率:会心ダメ=1:2からのずれを表し、$${(\varDelta S_R+\varDelta S_D)}$$は会心関係に割く労力を表しています。つまり、ややこしい計算をしましたが結論としてはシンプルで、会心率や会心ダメをそのまま使うより「1:2からのずれ」や「率とダメに割く労力総合値」という捉え方をした方が良いという話になります。

グラフの形状に合わせた変数を使う

ここまで理屈で述べてきましたが感覚的にもよく使うような考え方ではないでしょうか。みなさんも普通会心率が単体でどれだけ最適からずれているか?とは考えずに会心率:会心ダメの比がどれだけ1:2からずれているかと考えることが多いと思います。今回行った変数の取り換えという作業はそのような考えを数式で表したことに対応します。

数式に戻ります。この「1:2からのずれ」や「会心に割く労力」にかかっている係数が、これらの変数が最適値からずれた時にダメージに与える影響の大きさを表していました。

$$
\ln C_M
=\ln C_M^* + \lambda^*(\varDelta S_R+\varDelta S_D)\\
-\frac{\lambda^{*2}}2(1+ \frac{1}{18S_D^{*2}})(\varDelta S_R-\varDelta S_D)^2
-\frac{\lambda^{*2}}2(1- \frac{1}{18S_D^{*2}})(\varDelta S_R+\varDelta S_D)^2
$$

$${18S_D^{2*}=3S_R^* \times 6S_D^*}$$は最適な配分時の会心率×会心ダメージを表しているので、これが100%~200%前後を動きます。これが100%程度のときは$${(1-\frac{1}{8S_D^{*2}})}$$の因子が第一項と第二項で互いに打ち消し合うので、会心に割く労力$${\varDelta S_R+\varDelta S_D}$$にかかる係数は非常に小さくなり、会心へ割く労力が多少最適からずれても問題ないことがわかります。

一方でS_D率ダメ比1:2からずれ$${\varDelta S_R-\varDelta S_D}$$の係数は$${(1+\frac{1}{8S_D^{*2}})}$$と足し算になっており互いに打ち消すことがないので常に大きめの値を取ります。これは会心率:ダメ比が1:2からすこしずれただけで与ダメージが大きく落ちてしまうことを表しており、会心率ダメを1:2に保つ重要性を表しています。

その他の変数について

ダメージ倍率UPなど、他の効果が聖遺物についた場合も考えたい場合も同様に考えます。

上記のように解析的な微分が難しい関数の場合は、伸びしろ関数の傾きが放物線の係数になることを利用して伸びしろ関数のグラフを書く→傾きを求めることで放物線の係数を調べるのも良いでしょう。

放物線の係数比較

以上をまとめて係数を比較し、最適化する際に重視すべき変数を調べます。

$$
攻撃力に振る労力:「1:2からのずれ」:会心関係に振る労力\\
=\frac12\lambda^{*2}:\frac{\lambda^{*2}}2(1+ \frac{1}{18S_D^{*2}}):\frac{\lambda^{*2}}2(1- \frac{1}{18S_D^{*2}})\\
=1:1+\frac{1}{18S_D^{*2}}:1-\frac{1}{18S_D^{*2}}
$$

したがって攻撃力と比較して会心比を1:2に保つことは重要であり、逆に1:2さえ保っていれば会心関係にどれだけ労力を割くかは比較的自由であることがわかります。

聖遺物に使える労力が少ないうちは最適な配分における$${S_D^*}$$も少なくなるため、$${18S_D^2}$$は100%程度になるかと思います。そのような場合が上記の比が大きく偏り、特に会心に割く労力がほとんど係数0になり最適化する必要がなくなります。また、会心を1:2に保つ重要性も大きくなります。

そこから労力が多くなるにつれ$${S_D^*}$$は大きくなり$${\frac1{18S_D^2}}$$はどんどん0に近づくため攻撃力:「1:2からずれ」:会心全体への労力の比は1:1:1に近づきます。
つまり「どのステの最適化をより重視すべきか?」という話題は初心者ほど恩恵が大きく、廃プレイヤーではあまり気にしなくてもよいことがわかります。

また、上記の考察は大雑把なふるまいを調べるために行いましたが数値的に計算する際にも有用であると考えます。
例えば将来的に最適な聖遺物配分のシミュレーターのようなものを作る場合、最適な配分比を求めるついでにこれら放物線の係数(=伸びしろ関数の傾き)を求めておくことで、最適な配分だけでなく最適化する際に重視すべき変数も同時に調べることが可能になります。

また、今回はあまり触れませんでしたが、放物線の係数の数値が具体的にわかると最適値からずれた時にどの程度ダメージが低下するかを見積もることができます。これはスコアの高い聖遺物を装備すべきかステータスの配分を最適にする聖遺物を装備すべきかといった判断にも役に立つと考えています。このあたりは具体例の記事を作成する時に詳しくやりたいです。

まとめ

・放物線近似を行い最適な配分比からずれた場合のダメージ低下の大きさを議論しました。
・伸びしろ関数の傾きが放物線の2次の係数に対応し、伸びしろ関数の傾きが大きいほど少しのずれがダメージに大きな影響を与えることがわかりました。
・それぞれの変数について放物線の係数を比較した結果、会心率:会心ダメージ1:2を保つことが重要であり、会心に割く労力に関しては多少最適値からずれても影響が低いことがわかりました。

具体例

具体的に係数の比を計算した記事を書きました↓。

結論をまとめると攻撃力の係数を1とした時に会心率と会心ダメージの比を崩すような変化に対する係数は1.8~1.5程度、会心率と会心ダメージに振る総労力への係数は低労力ではほとんど0から出発して会心が100%になる頃には0.5程度まで上昇することがわかりました。

会心が100%近くになるところまで労力の余裕があったとしても依然1:2からの変化に関する係数は大きく、1:2を保つことの重要性がわかります。

あとがき

ここまで読んでいただきありがとうございました!いかがでしたか?
実際には最適な配分ぴったりにできることは少ないので、そこからのずれがどれだけ許容できるか、あるいは許容しやすいステータスがどれかと言ったことがわかっていると聖遺物探しが捗るんじゃないかな~と思います。ずっとこういう計算やりたかったのですが、一人じゃ撃沈続きだったので先行研究の力を借りてようやく実現できました。

最後にきっかけになったさしすさんの素晴らしい記事に感謝を述べて〆させてもらいます。ありがとうございましたー。

この記事が気に入ったらサポートをしてみませんか?