【原神】ラグランジュの未定乗数法による理想ステータス配分の計算~ダメバフ変動編~

こちらの記事の発展で,現在のステータスを再配分して理想ステータスを算出するということを目標にしてみたいと思います.
fumofumobun-study.hatenablog.com

前提知識

参照記事で,
t:=\frac{1}{6}(8+s+\frac{1244}{a_b})とおいて,一旦の最適会心率が
c_r=\frac{t\pm\sqrt{t^2-16}}{8}
になるというところまでを前提知識とします.いえ,これをもう少し深堀して修正しつつ再計算をしていきます.

最適会心率の場合分け

2次方程式を解く前の
4c_r+\frac{1}{c_r}=t
というところを再出発点とします.f(x)=4x+\frac{1}{x}とおいて,定義域0~1においてy=f(x)y=tの交点を調べればよいですね(高校数学感).

y=4x+1/x

グラフのように,x=0.5で最小値をとります.tというのは総ステータス量に比例したパラメータなので上にいくほど総ステータスが高いということです.
交点が2つできますが,会心率は低いよりは高いほうが好ましいので会心率が高いほうの解を選択しましょう.つまり,ここで実質的な定義域は0.5~1に狭まりました.
まあ細かいことを言えば求めるべきものはxのほうで,値域といえるんですが.
すなわち,4 <  t <  5であれば計算されうる最適会心率が50%~100%になり,このまま計算を続行してよいでしょう.
場合分けが必要となるのは,ステータス量が少なく,最適会心率の解が存在しない(?)場合(0 <  t <  4)と,ステータス量が十分で,会心率を100%で止めて,他のステータスに割り振るべき場合(5 <  t)です.
当然会心率は100%以上盛っても意味がないわけですからね.もし会心デバフというものが実装されれば話は変わってきます.

並みステータスの場合

4 \leq t \leq 5です.多くの場合はこれに当てはまります.この場合は2次方程式の上のほうの解をとって,
c_r=\frac{t+\sqrt{t^2-16}}{8}
c_d=2c_r
a_r=\frac{3}{4}(2c_r+\frac{1}{c_r})-\frac{311}{a_b}-1
d_b=a_r+\frac{311}{a_b}
となります.

ステータス不足の場合

0 <  t <  4です.ステータス量が少なくて解が存在しないというのは実は正しくなくて,会心率が0%のときに解が存在します.つまり,会心率0%会心ダメージ0%に固定して再計算が必要になります.
しかし,原神では会心率5%,会心ダメージ50%が最低保証ですので,この値で固定して再計算をします.
再計算といっても計算自体はほぼ同じで,a_r=d_b-311/a_bの関係がでてきて,全ステータスをこのように配分すればよいことになります.全ステータスsから固定で使用した分である6×0.05+3×0.5の1.8を引いておきます.
a_r=\frac{1}{2}(\frac{s-1.8}{4}-\frac{311}{a_b})
d_b=a_r+\frac{311}{a_b}
となります.しかし,実際問題,そもそも過剰とまで言えないような会心をわざわざ下げに行くというのは現実的でないので,実際の最適という意味では,会心はそのままの配分で(厳選が進めば要求会心量が上がるので育成途中で最適を求めるべきでないということです),できれば1:2にし,その固定された会心のもとで攻撃とダメバフのバランスをとっていきましょう.その場合では,
L(a_r,d_b,\lambda):=A(a_r)(1+d_b)-\lambda(a_r+d_b-s')
ラグランジュの未定乗数法を実行します.入力時はそのままs'=a_r^{\rm before}+d_b^{\rm before}で計算します.
計算結果は
a_r=\frac{1}{2}s'-\frac{311}{2a_b}
d_b=a_r+\frac{311}{a_b}
となります.

しかし,そもそもステータスが並みの場合,c_r\not = 0という前提で計算していました.
このステータス不足のときの期待値がさきほどの並ステータスの場合の期待値を上回る可能性は残っています.
そもそもの話,ラグランジュの未定乗数法は十分性が担保されているわけではありません.
ではどこを境界にして期待値が前後するかを計算していきましょう.単純に先ほどのものと今出したものの理想ステータスを計算して等しくなるところを探していきます.
ごちゃごちゃと計算すると
\frac{9}{16^3}( 9t^2 -(3t-2)\sqrt{t^2-16} )( (t+\sqrt{t^2-16})t + 8 )=\frac{41}{640}(3t-\frac{9}{10})^2
という方程式になります.左辺が並ステータスの場合の期待値で右辺が率5%ダメ50%固定の不足ステータスの期待値から基礎攻撃力を割ったものです.
右辺から左辺を引いたものはは「ほぼ」t < 4で正, t \geq 4で負です.4 \leq t \leq 5の場合を考えていたのですから特に問題はありません.
ほぼといったのはたまに正負が変わるという意味ではなくほとんど4に近いという意味です.
ダメバフ固定時はここで問題が生じていたので気になる場合はそちらのダメバフ固定編を参照ください.



ステータス十分の場合

5 < tの場合です.会心率を100%に固定し,
L(a_r,c_d,d_b,\lambda):=A(a_r)(1+c_d)(1+d_b)-\lambda(4a_r+3c_d+4d_b-s')
ラグランジュの未定乗数法を実行します.入力時は会心率に振った分を考慮してs'=4a_r^{\rm before}-6(1-c_r^{\rm before})+3c_d^{\rm before}+4d_b^{\rm before}で計算します.
計算は同様なので省略しますが結果だけ載せると,
c_d=\frac{1}{9}(s'+\frac{1244}{a_b}+2)=\frac{1}{9}(s+\frac{1244}{a_b}-4)
a_r=\frac{3}{4}c_d-\frac{311}{a_b}-\frac{1}{4}
d_b=a_r+\frac{311}{a_b}
となります.

突破ステータスが会心系の場合

追記です.もうひとつ考えなければならないことがありました.突破ステータスです.
突破ステータスで最低保証される会心率や会心ダメージがあります.攻撃力%も最低保証されることもあるのですがそこまで考えるとちょっと面倒なので会心だけに限定します.

突破ステが会心率のとき,最低保証は会心率24.2%/会心ダメージ50%,
会心ダメージのとき,会心率5%/会心ダメージ88.4%です.
それぞれ差し引くステータスは2.952です.これで再計算すればいいだけですね.
a_r=\frac{1}{4}(s-2.952)
で,同様に期待値比較をしていきましょう.
まず突破会心率の場合,
\frac{9}{16^3}( 9t^2 -(3t-2)\sqrt{t^2-16} )( (t+\sqrt{t^2-16})t + 8 )=\frac{1121}{16000}(3t-\frac{369}{250})^2
でこの場合も右辺から左辺を引いたものはは「ほぼ」t < 4で正, t \geq 4で負で特に問題はなく,例外として考えなくてもいいです.(かなり鋭く漸近している感じです)

突破会心ダメージの場合,
\frac{9}{16^3}( 9t^2 -(3t-2)\sqrt{t^2-16} )( (t+\sqrt{t^2-16})t + 8 )=\frac{5221}{80000}(3t-\frac{369}{250})^2
で解なしとなり,常に負となっています.なのでこちらも例外として考える必要はなさそうです.


まとめると,0 < t < 4であれば攻撃振り,4 \leq t \leq 5であればバランス型(会心率50%~100%),5 < tであれば率100%ビルドが最適となります.
なにかと色々場合わけを考えましたがそこまで影響はなかったようです.しかし,ダメバフ固定編ではこの場合分けが重要で,様子が異なってきます.




次の記事ではダメバフ固定でのステータス配分を計算します.
fumofumobun-study.hatenablog.com