新版攻击评分进阶攻略,攻击评分是怎么计算的?【下】

修改于2024/04/26789 浏览攻略发布区
本帖是上一篇帖子的进阶版:【上】部分
如果不是对数学分析很有兴趣的勇者可以直接跳过本帖子,上一篇帖子重点说结论,这一篇帖子会对上篇帖子的结论补充说明,以及阐述一些注意事项。
首先我们从新版攻击评分(下文简化为攻评)的攻击说起:
TapTap
攻击评分计算公式

一、公式的解释

为什么攻评要长这样呢?细心的勇者们想到,把公式的两边同时变换一下会怎么样?
我们对两边同时求exp,结果如下:
TapTap
变换后的公式
这一看就豁然开朗了[TapFamily_跳舞],右边这不几乎就是伤害计算公式吗,右边的多项式相乘的结果和总伤害增幅正相关程度相当大,当然不是绝对的,因为攻速,护盾伤害,普伤,技伤,冷却,穿透,暴击值这些属性都不是一定会有收益的,并且计算公式也不是上面这样,因此本文中并没有使用绝对的措辞。我们不妨假设这个数为k,那么就有:
TapTap
公式推导
最后推导出来的式子表明,k和攻击评分正相关,攻击评分和k的指数成正比例关系。也就是说攻击评分就代表k的数量级。
而k和总伤害的正比例程度很大,也就是说攻击评分在一定程度上代表了伤害的数量级。
而假如攻击评分还是和原来一样的线性计算呢?
那exp变换后的公式就应该长这样
TapTap
旧评分公式变换后的结果
这个公式就伤害分析上来说没有任何意义,只能看出攻击评分和属性正相关,而属性不一定和攻击评分正相关,相当于说了一句废话。[表情_斜眼笑]

二、公式的部分细节和原理

我们注意到公式的组成中有ln(攻击强度+700),ln(属攻+700),ln(伤害加成+100),ln(护盾伤害+300),那好好的ln,为什么还要给他加上700,100,300呢?这些数又是如何得到的呢?[表情_思考]
如果是老玩家,应该很快就能发现,这个700好像在攻击强度和属攻的增伤公式里有,会不会原因就是这个呢?答案是肯定的。要使k和总伤害增幅成正比例关系,那么k的每一个因子都应该和这个因子对应的伤害增幅成正比例,举例来说就是组成k的多项式的攻击强度那一项的值必须和这个攻击强度算出来的伤害加成成正比例。而攻击强度对伤害的贡献是:攻强/700,总伤害变成了原伤害×(1+攻强/700),不难看出:攻击强度+700=(1+攻击强度/700)×700,因此后面属攻的700,伤害加成的100也是这样得到的,至于护盾伤害的300,因为护盾占总血量的1/3,相当于打护盾的过程只占了总的1/4,不考虑其他因素,护盾伤害等价于1/4的伤害加成,所以应该是400才对,为什么是300我也不知道。[表情_微笑]
补充:有哥们纠正护盾其实是占总量的1/2,那这个300就是合理的。
再次补充:这个护盾伤害的等效公式我怎么想都觉得不对,其实上述护盾伤害计算是错误的,误差会随着护盾伤害提高逐渐变大。正确的等效是x=ay/(1+y+a),其中a是护盾占血量的比例,x是护盾伤害等效的伤害增幅,y是护盾伤害
其实公式中还有一部分不能理解的地方,爆伤部分因为基础爆伤是150,后面应该加150才对,置于穿透,元穿,冷却,攻速这些部分,我的理解是为了方便计算使用的近似函数,毕竟这些属性不会直接影响伤害加成。
还有需要注意的是,当有主属性和没有主属性的时候,属攻和元素伤害加成的计算公式是不一样的。如下。
TapTap
有主属性和没主属性不同的计算方式
而主属性是怎么确定的呢?并不是按照携带武器确定的,我测试的结果是符文能量最高的一系就是主系。
因此新版公式也杜绝了刷全属性伤害(如月刃),和全属性攻击力来达到过高的评分这种方式。
还有需要注意的是,暴击率(面板上的)不提供评分,比如游侠有个加5%暴击率的天赋,这个天赋不提供任何攻击评分,爆伤我不清楚,因为这个暂时测不出来,其他比如韧性削减,能量上限,能量恢复,移动速度都不提供攻击评分。

三、公式的推导过程

说了这么多了,最后楼主来解释一下公式的推导过程。
本次推导采用的是控制变量法,既只让一个属性变化,观察攻击评分再得出这个属性对攻击评分的影响。这个方法有一个致命的问题,那就是如果多个属性之间是有耦合的,那么控制单个变量就不能推出正确的结果,需要多元回归推导。(实际上策划没有给我挖坑,几乎所有属性之间都没有耦合[表情_开心]
先推导攻击强度,第一步,采样。
先把所有东西都卸了,然后慢慢增加灵魂连接提供的攻击强度,并记录评分,我们得到如下的采样数据。
TapTap
攻击强度采样数据
然后我们对采样数据进行拟合。
先假设攻强和评分线性相关。那么拟合函数就是y=ax+b,我们需要拟合出a和b的值。这里拟合我们使用MATLAB,拟合出来的图像和结果如下图所示。
TapTap
攻强线性拟合图像
TapTap
攻强线性拟合结果
由图像我们不难看出,这些采样点并没有完全分布在直线上,因此攻强和评分并不是线性关系,并且可以注意到,离散点的斜率是逐渐变小的。我们可以猜测这是个开口向下的二次函数,指数为0.5的指数函数等,不过这些函数虽然可以达到拟合要求,却没有任何现实意义,因此我们很容易就能想到,这是一个对数函数。[表情_举手]
更改代码进行对数拟合,结果如下。
TapTap
对数拟合的图像
TapTap
对数拟合的方程
从图像我们可以看出对数拟合的结果非常完美,因此我们的猜想很大概率就是正确的,而从拟合方程中我们不难注意到,b也就是上文所说的和计算伤害有关的那个常数,它的范围在684-780之间,结合攻击强度的计算公式,我们直接作出猜想,b就等于700。我们基于这个猜想再次进行拟合。结果如下。
TapTap
对数改进拟合图像
TapTap
对数改进拟合方程
最后得出来的区间十分小,这代表拟合结果的正确率非常高,基本就是正确的结果,我们再重新采样对拟合方程进行验算。
TapTap
第一次验算
验算误差均比较接近,表示出问题的是常数项b,我们对拟合结果进行修正:
TapTap
对数拟合修正方程
TapTap
二次验算
这次验算得到的结果十分准确,我们可以认为这个结果就是正确结果了。
之后的步骤就是对所有属性都反复采样,拟合,验算,二次拟合,二次验算的垃圾时间了。[表情_叹气]
不过令人振奋的是,所有属性拟合出的系数a都是2885,且直接能加伤害的属性,其拟合方程均和伤害增幅计算公式成正比例,这进一步验证了公式的正确性。
最后把所有公式结合就是最终结果啦。[TapFamily_起飞]
至此本帖就结束了,希望能对大家有帮助,也希望抛砖引玉得到更准确的公式,毕竟游戏数据本就应该公开给所有玩家。[TapFamily_爱了]
18
6
9