今まで,いくつかの記事で理想ステータスの計算をしていました.
行き当たりばったりの計算で,理論としては完全に正しくない処方箋を用いたりもしていまして,モヤモヤが残っていました.
聖遺物の攻撃力実数メインの値を計算にいれて最低攻撃力を保証しつつ計算をしたり,少々煩雑な計算になっていました.
今回はもっとシンプルで美しい計算をしようと思います.
過去の関連記事↓
ラグランジュの未定乗数法を用いて原神の期待値計算 - ゲーム関連
ラグランジュの未定乗数法による理想ステータス配分の計算~ダメバフ変動編~ - ゲーム関連
ラグランジュの未定乗数法による理想ステータス配分の計算~ダメバフ固定編~ - ゲーム関連
ラグランジュの未定乗数法による理想ステータス配分の計算~実装編~ - ゲーム関連
これら過去の記事は前提知識とせず,この記事だけで完結させます.
最適化の条件
まず必要なステータスは基礎攻撃力,最終攻撃力,会心率,会心ダメージ,ダメージバフです.
基礎攻撃力に対する最終攻撃力の付加割合を攻撃力%としましょう.
つまり,攻撃力実数まで攻撃力%として繰り込んで計算していきます.
攻撃力の最小値を与えて最低攻撃力は保証していきます.
下付き添字が各最小ステータスとします.
つまり,突破ステータスが会心率ならばみたいな感じです.
基礎攻撃力とダメージバフは定数とします.ダメバフをいじる場合は各々で期待値を計算して比較するということをします.
期待値に比例するものをとすれば,
です.そして拘束条件は聖遺物オプションの比率を参考に全合計ステータスをとして,
となります.期待値を最適化の対象だけにして余分なものを取り除けば,ラグランジアンは
となります.わかりやすいように,変数を
としましょう.
これを,条件
のもとで極大化しようというのが目的です.
ラグランジュの未定乗数法
まずこういう問題で最初にやることがラグランジュの未定乗数法です.
これにより極値の候補がわかります.
より,まず
という会心率と会心ダメージ1:2がでてきます.
次に,より,
となります.はで最小値
をとります.会心率70%を境にして,「理想」会心率が低くなればなるほど理想攻撃力が要求されることとなり,70%を超えたあたりからまた攻撃力を少しずつ増やしていくべきということになります.
最終的な計算結果で攻撃力なり会心率なりが設定した最小値を下回ることがなければ以降この計算が正しいということになります.
とりあえず拘束条件の式にいれれば
を得ます.これは
このようなグラフになり,で最小値をとります.
この逆関数を与えたい(与えられたスコアに対して最適会心率を知りたい)ので,より高い会心率になる方を選択すれば,
という逆関数を得ます.
一応計算しておくと,期待値すなわちは
になります.の因子は一旦省いておきます.
スコア十分の場合
すなわち理想会心率が100%に到達してしまった場合,攻撃力と会心ダメージにステータスを分配することになります.
を最大化すればよく,
を満たせばいいというのはすぐにわかります.
このとき,
であり,期待値は
となります.
ではスコア不十分の場合はどうでしょうか.
スコア不十分の場合
ここからは突破ステータスごとに話が変わってきます.
話を続ける前に一旦ここで今までの様子をグラフに表しておきます
赤が攻撃力で青が会心率,橙が会心ダメージです.黒は期待値の自然対数です.
最小攻撃力を100%としています.突破ステータスは非会心系だと仮定しています.会心ステータスが上昇するとともに理想攻撃力が一度下がっているという振る舞いがわかるかと思います.
突破ステータスが会心系でない場合
スコアが最小付近のことから考えます.会心ダメージは0.5に固定してよさそうというのはいいと思います.
この場合結論から言えばすべて攻撃力に振るのが最適となります.会心率にスコアに対する増加関数だけ加えて期待値を計算すると,攻撃全振りのときから期待値が低くなるというのがわかります.
まず,攻撃全振りの場合は
となります.
一方,
とおいてとすると
となります.
これが攻撃全振りの期待値を上回る条件は
となります.
仮に\xi(S'-S_0)が比例関数だと仮定した場合はまでは会心率に全く振らないほうが良いということになります.
ここからの最適化の方法はまだわかってないのですが,仮にそのような比例関数だと仮定して
()だという形を仮定してみましょう.これを期待値に代入してで微分することにより,
ときれいな数が求まります.よって,線形であれば
がよいということがわかりました.このとき,
ですね.つまり最低保証されている攻撃力が207.5%を上回る場合はこれではだめですが相当基礎攻撃力が低くない限りは大丈夫だと思うのでここの議論は省きます.
ここまでをまとめると,スコアが4.7に満たない場合は攻撃力から盛っていき,最大で207.5%になります.
207.5%まで到達した場合,そこからは増えたスコアを会心:攻撃=2:3で分配していくのがよいということになります.
しかしひとつ気を付けなければならないことがあります.実は一番最初に計算した領域の期待値を上回る領域があるということです.
ラグランジュの未定乗数法は十分性が担保されているわけではないので極大の候補でしかありませんでした.
実際,
を数値的に解くと
となります.つまりこのスコアまでは先ほど述べたようなスコア配分のままでいくのが最適ということになります.このときは
となります.つまりさきほどの会心率の範囲は40.8%~ではなくて実は51.6%~だったんですね.
以上をまとめてグラフにするとこのようになります.
,,,で場合わけされるんですね.
突破ステータスが会心率の場合
突破ステータスの場合,ほんの少しだけ話が変わってきます.というのも会心比率が最小の時点で1:2に近いため,
攻撃を稼ぎ続けても期待値が伸びやすいという傾向が予想されます.
攻撃振りは
となります.ここでグラフを書いてみると
このようになっています.ここで一応会心率に少し割いた場合に期待値が上回ることがないのかを考えます.先ほどと同様の計算で,
とすると
となるので攻撃振りを上回る条件は
となります.グラフを見るに,もはやこの領域ではラグランジュの未定乗数法の最大候補が優勢ですのでこれを考える必要性はなさそうです.
ということで,ラグランジュの候補と攻撃振りが入れ替わる点を求めればよく,
を数値的に解くと
となります.このとき
となり,今度は50.3%~になります.
このときの攻撃振りの値はになるのでスコアが低いうちは201.6%まで攻撃力に振りつづけ,そこからはラグランジュの未定乗数法に従ってステータス配分をするのがよいということになります.
,,とシンプルな場合わけになっています.
突破ステータスが会心ダメージのとき
今度は逆に高い会心ダメージに対して低すぎる会心率であって,非常にアンバランスとなった状態からはじまるので,
その高い会心ダメージについていくように会心率を盛ることで期待値が伸びやすく,
比較的早い段階で攻撃振りの伸びが悪くなってくることが予想されます.
攻撃全振りの場合は
となります.これから実際,グラフを書いてみると
となっていて,攻撃振りの期待値が大きく下がっていることがわかると思います.
なので逆に会心率振りのほうから考えていきましょう.その場合,
となります.これを会心ダメージ÷2に達するまですなわち
まで続け,その後に攻撃力に振り続けるという場合,
で期待値は
このようになりました.もちろんこれが最適解である保証はされてないのですが悪くはなさそうです.
求めるべきものはラグランジュ未定乗数法の候補との交点で,それは
を数値的に解くと
となり,
会心率は44.2%~になります.
グラフは以下のようになります.
,,,という場合わけになっています.