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

[少女前线] 平均命中和平均闪避怎么算

2022-11-28 09:41 作者:三千院-亚里亚  | 我要投稿

写此文的初衷是要回答两个问题:

1. 很多人觉得A545弱因为她的命中会衰减. 为了讨论这个问题, 最好是希望即使A545命中可变,也有办法用一个数值来表示她的命中. 另外血包技能期和回音也会改变人形的命中, 那么能不能估计出前20s/30s的平均命中?

2. 很多人觉得AK15在夜战队带光瞄命中会成问题. 为了讨论这个问题, 最好是希望即使敌人有多个而且闪避不同时, 也有办法用一个数值表示它们的闪避. 或者说, 能不能估计出一个怪组的平均闪避?

因为这两个问题具有普适性, 所以专门发一贴讨论. 

平均值, 并不是显而易见的

两个数a,b的算术平均值是(a+b)/2, 这个谁都懂. 但是这个计算不见得有意义. 举个例子, 小明从A地去走路B地, 前半程速度为v1, 后半程速度为v2. 求平均速度. 那么就要问"平均速度"的意义是什么? 在这个问题里, 平均速度的意义是用一个均匀速度走路而不改变从A到B的总时间. 

%5Cfrac%7B%E6%80%BB%E8%B7%AF%E7%A8%8B%7D%7B%E5%B9%B3%E5%9D%87%E9%80%9F%E5%BA%A6%7D%20%3D%20%E6%80%BB%E6%97%B6%E9%97%B4%20%3D%20%5Cfrac%7B%E5%89%8D%E5%8D%8A%E6%AE%B5%E8%B7%AF%E7%A8%8B%7D%7Bv1%7D%20%2B%20%20%20%20%5Cfrac%7B%E5%90%8E%E5%8D%8A%E6%AE%B5%E8%B7%AF%E7%A8%8B%7D%7Bv2%7D%20

%5Cimplies%20%5Cbar%7Bv%7D%20%3D%20%5Cfrac%7B2%7D%7B%20%5Cfrac%7B1%7D%7Bv1%7D%20%2B%20%5Cfrac%7B1%7D%7Bv2%7D%20%7D

推导出的速度的平均值其实是调和平均值, 而不是算术平均值.

同样的, 在计算平均命中和平均回避时, 也要先问它的意义. 也不见得是简单的算术平均. 具体是什么, 需要推导. 那就开始吧.

名字和记号

命中率的计算公式

HitRate%20%3D%20%5Cfrac%7B%E6%94%BB%E5%87%BB%E6%96%B9%E5%91%BD%E4%B8%AD%7D%7B%E6%94%BB%E5%87%BB%E6%96%B9%E5%91%BD%E4%B8%AD%20%2B%20%E7%9B%AE%E6%A0%87%E9%97%AA%E9%81%BF%7D%20

这涉及到两个变量, 攻击方命中和目标闪避. 为了简化, 定义闪命比k

k%3D%20%5Cfrac%7B%E7%9B%AE%E6%A0%87%E9%97%AA%E9%81%BF%7D%7B%E6%94%BB%E5%87%BB%E6%96%B9%E5%91%BD%E4%B8%AD%7D%20

则命中率公式可以简化为闪命比的一元函数:

hitRate(k)%20%3D%20%5Cfrac%7B1%7D%7B1%20%2B%20k%7D%20

DPS(damage per second)可以定义为和命中无关部分的输出功率c乘以命中率:

DPS%20%3D%20c(%E4%BC%A4%E5%AE%B3%E5%8A%9F%E7%8E%87)%20%5Ctimes%20hitRate%20%3D%20%5Cfrac%7Bc%7D%7B1%2Bk%7D%20

计算怪组的平均闪避

假设我方的命中固定, 与命中无关的伤害功率为c. 假设一个怪组有N个敌人, 血量分别是H_i. 闪避为evasion_i, 闪命比分别是k_i, 那么我们可以得到消灭所有敌人的时间:

T%20%3D%20%5Csum_%7Bi%7DT_i%20%3D%20%20%20%5Csum_%7Bi%7D%5Cfrac%7BH_i%7D%7BDPS_i%7D%20%0A%20

%5Cimplies%20T%3D%5Csum_%7Bi%7D%5Cfrac%7BH_i%7D%7B%5Cfrac%7Bc%7D%7B1%2Bk_i%7D%20%7D%20

%5Cimplies%20T%20%3D%20%5Cfrac%7B1%7D%7Bc%7D%20%5Csum_%7Bi%7DH_i(1%2Bk_i)

平均闪命比%5Cbar%7Bk%7D%20的意义是,  当每个敌人的闪命比都是%5Cbar%7Bk%7D%20时, 消灭所有敌人的总时间和前面一致. 则有:

%20%20%5Cfrac%7B1%7D%7Bc%7D%20%5Csum_%7Bi%7DH_i(1%2B%5Cbar%7Bk%7D)%20%3D%20T%20%3D%20%5Cfrac%7B1%7D%7Bc%7D%20%5Csum_%7Bi%7DH_i(1%2Bk_i)

%20%5Cimplies%20%20%5Csum_%7Bi%7DH_i%5Cbar%7Bk%7D%20%20%3D%20%5Csum_%7Bi%7DH_ik_i

%5Cimplies%20%5Cbar%7Bk%7D%20%20%20%5Csum_%7Bi%7DH_i%20%3D%20%5Csum_%7Bi%7DH_ik_i

%5Cimplies%20%20%5Cbar%7Bk%7D%20%3D%20%5Cfrac%7B%5Csum_%7Bi%7DH_ik_i%7D%7B%5Csum_%7Bi%7DH_i%20%7D%20

当我方命中固定, 敌人闪避和闪命比成正比, 从而

%5Cimplies%20%20%5Cbar%7Bev%7D%20%20%3D%20%5Cfrac%7B%5Csum_%7Bi%7DH_iev_i%7D%7B%5Csum_%7Bi%7DH_i%20%7D%20

也就是说, 敌人闪避的平均值就是敌人血量加权的算术平均值. 这个结论非常简单漂亮.

因为大部分高血量敌人比如汉尼拔, 白憨憨等都是低闪避的, 所以他们大大的拉低了敌人的平均闪避, 所以AK15在高命中夜战队带光瞄完全可行. 

注: 以上计算没有考虑能锁血的特殊敌人, 如军方狗和黑冲.

计算人形的平均命中

考虑这样一个模型, 人形每一帧的命中是ac_i, 于命中无关的伤害功率是c_i, 敌人闪避固定为ev. 闪命比k_i = ev/ac_i, 给定总时间T, 那么可以计算出总伤害:

DMG%3D%5Csum_%7Bi%7D%5ET%5Cfrac%7Bc_i%7D%7B%20(1%2Bk_i)%7D%20

平均闪命比%5Cbar%7Bk%7D的意义是, 当我方人形每帧的命中都固定从而闪命比固定为%5Cbar%7Bk%7D时, 在时间T内总输出和上面计算的输出一致. 则有:

%5Csum_%7Bi%7D%5ET%5Cfrac%7Bc_i%7D%7B%20(1%2B%5Cbar%7Bk%7D)%7D%20%20%3D%20DMG%3D%5Csum_%7Bi%7D%5ET%5Cfrac%7Bc_i%7D%7B%20(1%2Bk_i)%7D%20

%5Cimplies%20%5Cfrac%7B1%7D%7B1%2B%5Cbar%7Bk%7D%7D%20%20%5Csum_%7Bi%7D%5ETc_i%20%20%3D%20%5Csum_%7Bi%7D%5ET%5Cfrac%7Bc_i%7D%7B%20(1%2Bk_i)%7D

%5Cimplies%20%5Cbar%7Bk%7D%20%3D%5Cfrac%7B%20%20%5Csum_%7Bi%7D%5ETc_i%7D%7B%5Csum_%7Bi%7D%5ET%5Cfrac%7Bc_i%7D%7B%20(1%2Bk_i)%7D%20%20%7D%20%20-%201

有了平均闪命比%5Cbar%7Bk%7D%20, 就可以再求出人形的平均命中:

%5Cbar%7Bac%7D%20%3D%5Cfrac%7B%20ev%7D%7B%5Cbar%7Bk%7D%20%7D%20

这个公式有那么一点复杂, 而且和敌人闪避相关. 那么能不能得到一个近似的简单的和敌人闪避无关的平均命中? 

还是从命中率公式出发, 

hitRate(k)%20%3D%20%5Cfrac%7B1%7D%7B1%20%2B%20k%7D%20

因为敌人闪避一般都远远低于我方命中. 即k<<1, 上面表达式可以近似为(泰勒展开)

%5Cfrac%7B1%7D%7B1%20%2B%20k%7D%20%3D%201%20-%20k%20%2B%20o(k)%20

其中o(k)表示k的高阶小量. 从而我们可以改写总伤害公式: 

DMG%3D%5Csum_%7Bi%7D%5ETc_i(1%2Bk_i%20%2B%20o(k_i))

应用到平均命中公式有:

%5Csum_%7Bi%7D%5ETc_i(1%2B%5Cbar%7Bk%7D%20%20%2B%20o(%5Cbar%7Bk%7D))%20%3D%20DMG%3D%5Csum_%7Bi%7D%5ETc_i(1%2Bk_i%20%2B%20o(k_i))

为了估算, 略去等式两边的高阶小量, 简化为

%20%5Csum_%7Bi%7D%5ETc_i(1%2B%5Cbar%7Bk%7D)%20%3D%20%5Csum_%7Bi%7D%5ETc_i(1%2Bk_i%20)

消去常数项, 提取公因式, 简化为

%5Cbar%7Bk%7D%20%5Csum_%7Bi%7D%5ETc_i%3D%20%5Csum_%7Bi%7D%5ETc_ik_i

k_i%20%3D%20ev%2Fac_i%2C%20%5Cbar%7Bk%7D%20%3D%20ev%2F%5Cbar%7Bac%7D带入并消去ev, 得到

%5Cfrac%7B%5Csum_%7Bi%7D%5ETc_i%7D%7B%5Cbar%7Bac%7D%7D%20%3D%20%5Csum_%7Bi%7D%5E%20T%20%5Cfrac%7Bc_i%7D%7Bac_i%7D

从而

%5Cbar%7Bac%7D%20%3D%20%5Cfrac%7B%20%5Csum_%7Bi%7D%5E%20T%20c_i%7D%7B%5Csum_%7Bi%7D%5E%20T%20%5Cfrac%7Bc_i%7D%7Bac_i%7D%7D%20

所以, 近似的平均命中等于输出功率加权的命中的调和平均值.


应用: A545的平均命中


一个常规AR队, A545的基础命中271
A-545 命中和输出功率表

有了理论公式, 就可以来计算A545的平均命中. 为了简化, 我的时间窗口的最小单位是1秒, 而不是一帧. 考虑了A545, 血包和p22的技能加成. A545技能期的满暴击带来的提升算在了伤害buff里. 上图是A545的前30秒的每一秒的数据, 包括输出功率和命中. 然后就可以用前面推导的公式计算平均命中率了. 

用精确公式算出的A-545平均命中, 和敌人闪避关系很小, 基本可以认为恒定在325

用近似公式可以算出前20秒A545的近似平均命中 = 324, 前30秒近似平均命中288. 

用精确公式算出的命中如上图, 分布在324到327. 可见近似公式的结论还是相当准确的. 

[少女前线] 平均命中和平均闪避怎么算的评论 (共 条)

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