欢迎光临散文网 会员登陆 & 注册

关于原神最优属性配比的一些计算(三)

2023-02-19 19:01 作者:Resfzdfdz  | 我要投稿

前两期的概述

前两期根据原神定量伤害计算公式,使用了一些数学的方法,分别对满暴击时攻击与爆伤的分配,暴击与爆伤的分配,攻击暴击爆伤三者的分配这三个问题给出了解析解法,得到了一系列结论。其中各符号的含义可见第一期https://www.bilibili.com/read/cv14855160。这里将主要结论列于下方。

满暴击时攻击与爆伤的分配:爆伤的单位属性数 比 等效百分比攻击力的单位属性数多50/3的时候,达到最优分配。

暴击与爆伤的分配:在暴击小于100%时,按照暴击:爆伤=1:2最优。暴击大于100%时全分配给爆伤。

攻击暴击爆伤三者的分配:暴击与爆伤的分配仍是1:2最优;当总单位属性数小于178.3时,应当全堆攻击力不堆双爆;当总单位属性数大于283.3时,应当先将暴击堆到100%,再按照满暴击时攻击与爆伤的分配模型重新分配爆伤与攻击;总单位属性数在178.3到283.3之间时,最优分配对攻击力不敏感。解析表达式和最优曲线见第二期。

本期概述

由于涉及到精通等问题时,解析解的求取过于复杂,故而我转向学习了各up主使用的边际效益法。本期的内容主要为,介绍边际效益法,使用python画出边际效益图,证明前2期的解析法和边际效益法等价。并且在后续专栏中,给出一些角色的边际效益图供参考使用(顺便也记录一下这些图)。

离散边际效益法

边际效益通俗点说,指的是每增加1个单位的某属性时总伤害得到的提升量百分比数。

比如说:我们的攻击力乘区可按公式写作如下公式,其中A_0表示白字,a表示等效百分比攻击力的单位数,k_a%3D1.5%5C%25

E_a(a)%3DA_0(1%2Bk_aa)

那么收益就可以按照定义如下计算

C(a)%3D%5Cfrac%7BE_a(a%2B1)-E_a(a)%7D%7B(a%2B1)-(a)%7D%3DA_0k_a

这意味着每提升1个单位的百分比攻击力,攻击力乘区的收益都是A_0k_a

如果要计算提升的百分比数即边际效益,那么就要用提升值比上提升前的乘区数值,计算如下

R(a)%3D%5Cfrac%7BC(a)%7D%7BE_a(a)%7D%3D%5Cfrac%7BA_0k_a%7D%7BA_0(1%2Bk_aa)%7D%3D%5Cfrac%7B1%7D%7Ba%2B1%2Fk_a%7D

通过以上计算可知,每提升1单位的百分比攻击力时,对攻击力乘区的收益都是一样的。然而每1单位提升的百分比数值随着百分比攻击力增多却越来越小,这就是所谓的”稀释“。

以上计算方法是离散方法,这种计算法可以使用excel遍历计算得到所有的边际效益,汇聚成一个表格。这是一种简单高效的算法,因此受到许多人的喜爱。然而作为一个对数学有一点点兴趣的弱鸡,我希望通过连续函数的方式得到其边际效益曲线。因此下面介绍连续函数方法。

连续函数边际效益法

考虑到1单位并不特殊,它也并不是原神中最小的属性变更单位。于是可考虑提升%5CDelta%20a个属性的百分比攻击力。此时仍可计算收益和边际效益。

收益的计算公式为

C(a)%3D%5Cfrac%7BE_a(a%2B%5CDelta%20a)-E_a(a)%7D%7B(a%2B%5CDelta%20a)-(a)%7D

%5CDelta%20a趋近于0,那么该公式正好是求E_a(a)a的导数的公式

C(a)%3Dlim_%7B%5CDelta%20a%5Crightarrow%200%7D%20%5Cfrac%7BE_a(a%2B%5CDelta%20a)-E_a(a)%7D%7B(a%2B%5CDelta%20a)-(a)%7D%3D%5Cfrac%7BdE(a)%7D%7Bda%7D

若要计算边际效益,则要用其收益除以提升前的总量,于是有

R(a)%3D%5Cfrac%7BC(a)%7D%7BE_a(a)%7D%3D%5Cfrac%7B1%7D%7BE_a(a)%7D%5Cfrac%7BdE(a)%7D%7Bda%7D%3D%5Cfrac%7Bd%5BlnE(a)%5D%7D%7Bda%7D


为了方便记忆,这里重新写一下收益和边际效益的计算公式,这两个公式就构成了边际效益法的理论基础。

C(x)%3D%5Cfrac%7BdE(x)%7D%7Bdx%7D%20

R(x)%3D%5Cfrac%7Bd%5BlnE(x)%5D%7D%7Bdx%7D

百分比攻击力的边际效益曲线

考虑一个只吃百分比攻击力,暴击,爆伤的普通角色,他的伤害只和攻击力乘区,双爆乘区有关,于是可使用这两个乘区之乘积来表示伤害的大小。即他的伤害期望可用如下的三变量函数所表示:

E(a%2Cb%2Cx)%3DE_aE_%7Bbx%7D%3DA_0(1%2Bk_aa)(1%2Bk_bk_xbx)

根据上述公式可求得,攻击力的收益和边际效益:

C(a)%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20a%7D%3DA_0k_a(1%2Bk_bk_xbx)

R(a)%3D%5Cfrac%7B%5Cpartial%5BlnE%5D%7D%7B%5Cpartial%20a%7D%3D%5Cfrac%7BC(a)%7D%7BE%7D%3D%5Cfrac%7B1%7D%7Ba%2B1%2Fk_a%7D%3D%5Cfrac%7B1%7D%7Ba%2B200%2F3%7D

从这里可以看到,百分比攻击力的收益为线性收益,而边际收益与其数值是1次反比例关系,并且它的边际收益仅和它自己有关。事实上可以根据边际效益的计算公式得到一个结论:

属于某一乘区的某变量的边际收益仅与该乘区内的变量有关系,而与其他乘区的变量无关。

双爆的边际效益曲线

暴击的收益和边际收益:

C(x)%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20x%7D%3DA_0(1%2Bk_aa)k_bk_xb

R(x)%3D%5Cfrac%7B%5Cpartial%5BlnE%5D%7D%7B%5Cpartial%20x%7D%3D%5Cfrac%7BC(x)%7D%7BE%7D%3D%5Cfrac%7BA_0(1%2Bk_aa)k_bk_xb%7D%7BA_0(1%2Bk_aa)(1%2Bk_bk_xbx)%7D%3D%5Cfrac%7B1%7D%7Bx%2B1%2F(k_bk_xb)%7D

爆伤的收益和边际收益:

C(b)%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20b%7D%3DA_0(1%2Bk_aa)k_bk_xx

R(b)%3D%5Cfrac%7B%5Cpartial%5BlnE%5D%7D%7B%5Cpartial%20b%7D%3D%5Cfrac%7BC(b)%7D%7BE%7D%3D%5Cfrac%7BA_0(1%2Bk_aa)k_bk_xx%7D%7BA_0(1%2Bk_aa)(1%2Bk_bk_xbx)%7D%3D%5Cfrac%7B1%7D%7Bb%2B1%2F(k_bk_xx)%7D

此时会发现一个现象:暴击的边际效益与爆伤相关,爆伤的边际效益和暴击有关。这是因为暴击和爆伤是作为一个整体属于爆伤乘区的,它们之间有互相影响,从而导致某变量的边际效益不仅与它自己有关,还与这个乘区内的其他变量有关。

对于以上情况,我们可以发现:一个乘区的内部会存在一个最优分配。然后可以根据乘区内的最优分配,找到该按最优分配时的边际收益

对于暴击和爆伤这个整体,我们已经找到了它的乘区内的最优分配,即当x%5Cle100时遵循x%3Db的分配规则,当x%3D100时遵循全部分配给b的分配规则。假设分配给这个乘区的总属性数为N%3Db%2Bx,那么可以使用分配给这个乘区的总属性数N来表示整个乘区。如下所示:

(1)当N%5Cle200时有x%3Db%3DN%2F2,于是

E(a%2CN)%3DE(a%2Cx%3D%5Cfrac%7BN%7D%7B2%7D%2Cb%3D%5Cfrac%7BN%7D%7B2%7D)%3DA_0(1%2Bk_aa)(1%2Bk_bk_x%5Cfrac%7BN%5E2%7D%7B4%7D)

(2)当N%3E200时有x%3D100%2Cb%3DN-100,于是

E(a%2CN)%3DE(a%2Cx%3D100%2Cb%3DN-100)%3DA_0(1%2Bk_aa)(1%2Bk_bk_x100(N-100))

于是按照以上双爆最优分配,可以计算出各阶段的收益和边际效益如下

(1)当N%5Cle200时,收益和边际收益如下

C(N)%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20N%7D%3DA_0(1%2Bk_aa)k_bk_x%5Cfrac%7BN%7D%7B2%7D

R(N)%3D%5Cfrac%7BC(N)%7D%7BE(a%2CN)%7D%3D%5Cfrac%7B2N%7D%7BN%5E2%2B4%2F(k_bk_x)%7D%3D%5Cfrac%7B2N%7D%7BN%5E2%2B20000%7D

(2)当N%3E200时,收益和边际收益如下

C(N)%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20N%7D%3DA_0(1%2Bk_aa)k_bk_x100

R(N)%3D%5Cfrac%7BC(N)%7D%7BE(a%2CN)%7D%3D%5Cfrac%7B1%7D%7BN-100%2B1%2F(k_bk_x100)%7D%3D%5Cfrac%7B1%7D%7BN-50%7D

从这里可以看到,由于暴击和爆伤的相互作用,其边际收益并非一个1次反比例函数,而具有更加复杂的形式。

精通与增伤的边际效益曲线

这部分由于较为复杂,并且与具体角色有关。这里不展开说明,后续专栏讲述某个具体角色的时候,会再说明如何计算边际效益。

使用python画出边际效益曲线图

可以使用python代码画出边际效益曲线,方便分析。代码如下

画出的图像如下所示:

单位属性从0到300时,百分比攻击力和双爆的边际效益曲线

攻击力的收益曲线:

红色的曲线为攻击力的边际效益。由于一次反比例函数的规律,分配给攻击力的属性数较少时其收益非常高。但随着分配的属性越来越多,其收益快速下降。

双爆的收益曲线:

蓝色的曲线为双爆的边际效益。注意到它是一个先增后减的函数,对R(N)进行求导令导数为0,可以得到其极值点出现在N%3D%5Csqrt%7B%5Cfrac%7B4%7D%7Bk_bk_x%7D%7D%5Capprox%20141.4的位置。这说明分配给双爆的属性数在0到141.4之间时不仅不存在“稀释”现象,反而随着分配给双爆的属性增加,其边际收益也不断增加。此时边际效益极大值为R(141.4)%3D0.707%5C%25。而N=141.4到200之间,边际效益下降非常缓慢,直到N=200处,仍有R(200)%3D0.667%5C%25。随后暴击率达到100%,边际收益曲线变成1次反比例函数,收益快速下降。

由于R(100)%3DR(200)%3D0.667%5C%25,在N=100到N=200之间,双爆的边际收益可认为基本是稳定的。并且每单位0.667%的收益在大部分情况下都高于其他属性了,因此圣遗物副词条的双爆非常重要。

例如:以我的甘雨为例,假设玩的是深渊单通(实际上我手残,玩不动。。)

某的弱鸡甘雨

不考虑深渊各种buf,仅考虑重击伤害,则各属性的绝对值为:

暴击:65.3%+20%=85.3%

爆伤:181.7%

攻击力:2581(白字943),等效百分比攻击力为2581/943-1=173.7%

转化为单位属性数如下所示:

x%3D85.3

b%3D181.7%2F2%3D90.85

a%3D173.7%2F1.5%3D115.8

双爆的总属性数N%3D85.3%2B90.85%3D176.15

三者的总属性数为N_t%3D85.3%2B90.85%2B115.8%3D291.95

此时攻击力的边际收益为

R(a%3D115.8)%3D%5Cfrac%7B1%7D%7B115.8%2B200%2F3%7D%3D0.548%5C%25

双爆的边际收益为

R(N%3D176.15)%3D%5Cfrac%7B2%5Ctimes176.15%7D%7B176.15%5E2%2B20000%7D%3D0.690%5C%25

显然双爆的收益远大于攻击力的收益。在副词条属性数相同的情况下,应当尽量选择副词条双爆多的圣遗物。假设一个圣遗物词条平均为3.3个单位的属性,那么此时1条百分比攻击力对总伤害的提升大约是3.3*0.548%=1.81%,而一条暴击或爆伤的收益为2.28%。由此可见,以我目前的面板,即使是单通,2581的攻击力仍然属于过高的水平。更不用说在队伍中可能吃到大量的攻击力buff,这时攻击力的边际效益将会非常低。

一个错误看法的纠正

分析到这里,可以纠正一个常见的错误看法:甘雨的攻击力比爆伤重要。

事实上对于甘雨来说,大部分情况下双爆比攻击力重要得多。许多人认为攻击力很重要的原因是对圣遗物的有效总属性数的认识不足。

例如:

圣遗物1为10.5%暴击,14.8%爆伤,11.7%攻击力;

圣遗物2为12.8%暴击,19.4%爆伤,无攻击力。

使用圣遗物1打出的伤害显然比圣遗物2要高很多,但是圣遗物2双爆比圣遗物1双爆高了9.2分(4.6单位),于是有的人就会得出结论:攻击力比双爆重要。

而实际上,圣遗物1的有效总单位数为25.7单位,而圣遗物2的有效总单位数为22.5单位,圣遗物1比圣遗物2明显多了3.2单位的有效属性,几乎相当于多了1个词条。这3.2的单位有效属性差距才是造成伤害差距的根本原因。并不是因为攻击力比爆伤更重要。

边际收益法在收益平衡时就等价于解析解法

假设某普通角色,他的伤害期望可用如下的三变量函数所表示:

E(a%2Cb%2Cx)%3DE_aE_%7Bbx%7D%3DA_0(1%2Bk_aa)(1%2Bk_bk_xbx)

考虑E对a,b,x的边际收益

R(a)%3D%5Cfrac%7B1%7D%7BE%7D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20a%7D%2C%5Cquad%20R(x)%3D%5Cfrac%7B1%7D%7BE%7D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20x%7D%2C%5Cquad%20R(b)%3D%5Cfrac%7B1%7D%7BE%7D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20b%7D

边际收益平衡(也就相当于收益平衡)时,应当是当前属性下总伤害期望最高的分配。于是有%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20a%7D%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20x%7D%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20b%7D

其约束条件为

a%2Bb%2Bx%3DN


另一边考虑解析解法,根据Lagrange乘数法,构造函数

L%3DE(a%2Cb%2Cx)%2B%5Clambda(a%2Bb%2Bx-N)

令各阶偏导数为0,得到4个方程

%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20a%7D%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20a%7D%2B%5Clambda%3D0

%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20b%7D%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20b%7D%2B%5Clambda%3D0

%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20x%7D%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20x%7D%2B%5Clambda%3D0

%5Cfrac%7B%5Cpartial%20L%7D%7B%5Cpartial%20%5Clambda%7D%3Da%2Bb%2Bx-N%3D0

令前3个方程互相消去%5Clambda,其结果正好就是

%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20a%7D%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20x%7D%3D%5Cfrac%7B%5Cpartial%20E%7D%7B%5Cpartial%20b%7D

从而说明,解析解法正好是边际收益法在收益平衡时的应用。

总结

本期介绍了边际效益法,主要介绍了连续函数边际效益法,并且使用该工具分析了百分比攻击力的边际效益曲线和双爆的边际效益曲线,给出了一个实际的例子,最后证明了前2期的解析解法实际上是边际效益法在收益平衡时的应用。后面的专栏将使用边际效益法去分析具体角色的属性分配问题。

关于原神最优属性配比的一些计算(三)的评论 (共 条)

分享到微博请遵守国家法律