问题

朋友在海克斯大乱斗里遇到一个选择难题,让我帮忙计算下。

在这里插入图片描述

这个问题是选择吸血习性还是闪电打击?
这个问题相当复杂,因为闪电打击对DPS的提升是个分段函数。
我们先定义变量

  • h:英雄生命值
  • s:额外攻击速度
  • a: 攻击力
  • r: 攻速转化率
  • x: 敌方护甲
  • d: dps
  • t: 生存时间
  • y: 每秒承伤
    首先计算dps:
    d=ar(1+s) d = a r(1 + s) d=ar(1+s)
    生存时间为
    t=h/y t=h / y t=h/y

场景一 攻击频率低于1.75

我们计算选择吸血习性后的生存时间,因为吸血习性本身不提高任何输出,仅仅提升生存时间,设总输出为大写D,那么有:
生存时间延长
tv=hy−0.25d=hy−0.25ar(1+s) t_v=\frac{h}{y-0.25d}=\frac{h}{y-0.25a r(1 + s)} tv=y0.25dh=y0.25ar(1+s)h
Dv=dtv=arh(1+s)y−0.25ar(1+s) D_v = d t_v= \frac{a rh(1 + s)}{y-0.25a r(1 + s)} Dv=dtv=y0.25ar(1+s)arh(1+s)
再计算闪电打击
闪电打击不延长生存时间,仅仅是增加输出,使额外攻速增幅20%,那么有:
dl=ar(1+1.2s) d_l = a r(1 + 1.2s) dl=ar(1+1.2s)
Dl=dlt=arh(1+1.2s)y D_l = d_l t=\frac{a rh(1 + 1.2s)}{y} Dl=dlt=yarh(1+1.2s)
使用除法比较:
DvDl=arh(1+s)y−0.25ar(1+s)yarh(1+1.2s)=y(1+s)[y−0.25ar(1+s)](1+1.2s) \frac{D_v}{D_l} = \frac{a rh(1 + s)}{y-0.25a r(1 + s)}\frac{y}{a rh(1 + 1.2s)}=\frac{y(1 + s)}{[y-0.25a r(1 + s)](1 + 1.2s)} DlDv=y0.25ar(1+s)arh(1+s)arh(1+1.2s)y=[y0.25ar(1+s)](1+1.2s)y(1+s)
因为无论是吸血吸血还是闪电打击,都不会增加攻击力

加入输出承伤比

所以为了简化运算,
引入原始输出承伤比为 k=dy=ar(1+s)yk = \frac{d}{y} = \frac{ar(1+s)}{y}k=yd=yar(1+s),则 y=ar(1+s)ky = \frac{ar(1+s)}{k}y=kar(1+s)

代入原式:
DvDl=y(1+s)[y−0.25ar(1+s)](1+1.2s) \frac{D_v}{D_l} = \frac{y(1 + s)}{[y-0.25a r(1 + s)](1 + 1.2s)} DlDv=[y0.25ar(1+s)](1+1.2s)y(1+s)

y=ar(1+s)ky = \frac{ar(1+s)}{k}y=kar(1+s) 代入:
DvDl=ar(1+s)k(1+s)[ar(1+s)k−0.25ar(1+s)](1+1.2s) \frac{D_v}{D_l} = \frac{\frac{ar(1+s)}{k}(1 + s)}{[\frac{ar(1+s)}{k}-0.25a r(1 + s)](1 + 1.2s)} DlDv=[kar(1+s)0.25ar(1+s)](1+1.2s)kar(1+s)(1+s)

提取公因子 ar(1+s)ar(1+s)ar(1+s)
DvDl=ar(1+s)2kar(1+s)[1k−0.25](1+1.2s) \frac{D_v}{D_l} = \frac{\frac{ar(1+s)^2}{k}}{ar(1+s)[\frac{1}{k}-0.25](1 + 1.2s)} DlDv=ar(1+s)[k10.25](1+1.2s)kar(1+s)2

约去 ar(1+s)ar(1+s)ar(1+s)
DvDl=1+sk[1k−0.25](1+1.2s)=1+sk(1k−0.25)(1+1.2s)=1+s(1−0.25k)(1+1.2s) \frac{D_v}{D_l} = \frac{\frac{1+s}{k}}{[\frac{1}{k}-0.25](1 + 1.2s)} = \frac{1+s}{k(\frac{1}{k}-0.25)(1 + 1.2s)} = \frac{1+s}{(1-0.25k)(1 + 1.2s)} DlDv=[k10.25](1+1.2s)k1+s=k(k10.25)(1+1.2s)1+s=(10.25k)(1+1.2s)1+s

最终得到:
DvDl=1+s(1−0.25k)(1+1.2s) \frac{D_v}{D_l} = \frac{1+s}{(1-0.25k)(1 + 1.2s)} DlDv=(10.25k)(1+1.2s)1+s

其中 k=dyk = \frac{d}{y}k=yd 为输出承伤比(DPS/每秒承伤),这样更符合人类的直觉理解。

取r为一般情况0.625,s的范围则限制在[0.2,1.5],因为超过1.5后,闪电打击会增加攻击特效。k取[0.5,5],
以k和s为变量,使用python plot出比例DvDl\frac{D_v}{D_l}DlDv的函数图像。

import matplotlib


from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np


plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

s = np.linspace(0.2, 1.5, 200)
k = np.linspace(0.5, 2.5, 200)

S, K = np.meshgrid(s, k)

r = 0.625

numerator = K * (1 + S)
denominator = (1 - 0.25 * K) * (1 + 1.2 * S)

ratio = numerator / denominator

fig = plt.figure(figsize=(14, 10))
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_surface(S, K, ratio, cmap='RdYlGn_r', alpha=0.9, edgecolor='none')

cbar = fig.colorbar(surf, ax=ax, shrink=0.5, aspect=10, pad=0.1)
cbar.set_label('吸血习性收益 / 闪电打击收益 (Dv/Dl)', fontsize=11)

ax.set_xlabel('额外攻速 s', fontsize=12, labelpad=10)
ax.set_ylabel('输出承伤比 k = DPS/每秒承伤', fontsize=12, labelpad=10)
ax.set_zlabel('比值 Dv/Dl', fontsize=12, labelpad=10)
ax.set_title('海克斯抉择:吸血习性 vs 闪电打击\n(攻击频率 < 1.75)', fontsize=16, fontweight='bold', pad=20)

ax.view_init(elev=30, azim=45)
ax.invert_xaxis()
threshold_plane = np.ones_like(ratio)
ax.plot_surface(S, K, threshold_plane, alpha=0.3, color='cyan', edgecolor='none')

max_ratio = np.min([np.max(ratio), 3])
ax.set_zlim([0, max_ratio])

ax.text(0.2, 4, 1.5, '吸血习性更优\n(Dv/Dl > 1)',
        color='darkgreen', fontsize=11, weight='bold',
        bbox=dict(boxstyle='round,pad=0.6', facecolor='yellow', alpha=0.8))
ax.text(1.2, 0.5, 0.5, '闪电打击更优\n(Dv/Dl < 1)',
        color='darkred', fontsize=11, weight='bold',
        bbox=dict(boxstyle='round,pad=0.6', facecolor='lightblue', alpha=0.8))

plt.tight_layout()
plt.savefig('img.png', dpi=300, bbox_inches='tight')
print("3D图表已保存为 img.png")

plt.show()

结果为
在这里插入图片描述

可以看到大部分情况下吸血吸血占优。
而且从图中可以看到,几乎与攻速没什么关系,只和之前的输出承伤比有关。

场景二:攻击频率大于1.75

当攻击频率超过1.75时,情况变得更加复杂。此时普攻附带40点固定伤害的攻击特效。

重新定义DPS

攻击频率 f=r(1+s)f = r(1+s)f=r(1+s),当 f>1.75f > 1.75f>1.75 时:

原始DPS:
d=ar(1+s) d = ar(1+s) d=ar(1+s)

选择吸血习性后:
生存时间延长:
tv=hy−0.25d=hy−0.25ar(1+s) t_v = \frac{h}{y-0.25d} = \frac{h}{y-0.25ar(1+s)} tv=y0.25dh=y0.25ar(1+s)h

总输出:
Dv=d⋅tv=ar(1+s)hy−0.25ar(1+s) D_v = d \cdot t_v = \frac{ar(1+s) h}{y-0.25ar(1+s) } Dv=dtv=y0.25ar(1+s)ar(1+s)h

选择闪电打击后:
闪电打击使额外攻速提升20%,新的攻击频率为 r(1+1.2s)r(1+1.2s)r(1+1.2s)

如果 r(1+1.2s)>1.75r(1+1.2s) > 1.75r(1+1.2s)>1.75(触发攻击特效):
dl=(a+40)r(1+1.2s) d_l = (a+40)r(1+1.2s) dl=(a+40)r(1+1.2s)
Dl=dl⋅t=(a+40)r(1+1.2s)hy D_l = d_l \cdot t = \frac{(a+40)r(1+1.2s)h}{y} Dl=dlt=y(a+40)r(1+1.2s)h

比值计算

DvDl=ar(1+s)hy−0.25ar(1+s)⋅y(a+40)r(1+1.2s)h \frac{D_v}{D_l} = \frac{ar(1+s)h}{y-0.25ar(1+s)} \cdot \frac{y}{(a+40)r(1+1.2s)h} DlDv=y0.25ar(1+s)ar(1+s)h(a+40)r(1+1.2s)hy

约去 rhrhrh
DvDl=a(1+s)y−0.25ar(1+s)⋅y(a+40)(1+1.2s) \frac{D_v}{D_l} = \frac{a(1+s)}{y-0.25ar(1+s)} \cdot \frac{y}{(a+40)(1+1.2s)} DlDv=y0.25ar(1+s)a(1+s)(a+40)(1+1.2s)y

引入输出承伤比

定义前输出承伤比 k=dy=ar(1+s)yk = \frac{d}{y} = \frac{ar(1+s)}{y}k=yd=yar(1+s),则 y=ar(1+s)ky = \frac{ar(1+s)}{k}y=kar(1+s)

化简分子:
分子=a2r(1+s)2k \text{分子} = \frac{a^2 r (1+s)^2}{k} 分子=ka2r(1+s)2

化简分母:
分母=(a+40)(1+1.2s)⋅ar(1+s)⋅(1k−0.25) \text{分母} = (a+40)(1+1.2s) \cdot ar(1+s) \cdot (\frac{1}{k}-0.25) 分母=(a+40)(1+1.2s)ar(1+s)(k10.25)

DvDl=a2r(1+s)2k(a+40)(1+1.2s)⋅ar(1+s)⋅(1k−0.25) \frac{D_v}{D_l} = \frac{\frac{a^2 r (1+s)^2}{k}}{(a+40)(1+1.2s) \cdot ar(1+s) \cdot (\frac{1}{k}-0.25)} DlDv=(a+40)(1+1.2s)ar(1+s)(k10.25)ka2r(1+s)2

约去 ar(1+s)ar(1+s)ar(1+s)
DvDl=a(1+s)k(a+40)(1+1.2s)(1k−0.25) \frac{D_v}{D_l} = \frac{\frac{a(1+s)}{k}}{(a+40)(1+1.2s)(\frac{1}{k}-0.25)} DlDv=(a+40)(1+1.2s)(k10.25)ka(1+s)

DvDl=a(1+s)k(a+40)(1+1.2s)(1−0.25kk) \frac{D_v}{D_l} = \frac{a(1+s)}{k(a+40)(1+1.2s)(\frac{1-0.25k}{k})} DlDv=k(a+40)(1+1.2s)(k10.25k)a(1+s)

DvDl=a(1+s)(a+40)(1+1.2s)(1−0.25k) \frac{D_v}{D_l} = \frac{a(1+s)}{(a+40)(1+1.2s)(1-0.25k)} DlDv=(a+40)(1+1.2s)(10.25k)a(1+s)

最终得到:
DvDl=aa+40⋅1+s(1+1.2s)(1−0.25k) \boxed{\frac{D_v}{D_l} = \frac{a}{a+40} \cdot \frac{1+s}{(1+1.2s)(1-0.25k)}} DlDv=a+40a(1+1.2s)(10.25k)1+s
在后期攻击力普遍大于300的情况下,aa+40\frac{a}{a+40}a+40a几乎等于1,也就是说多出来的40点攻击特效可以忽略。总体吸血习性还是占优。况且输出承伤占比如果大于4,那么选择吸血习性后就可以凭25%的吸血做到打不死!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐