【捞转】【EVE Online】[不靠谱的纸上谈兵]狂热舰队伤害的数学模型及其模拟
写在前面:
本文主体由nga大佬redplum于2013年06月28日发表于NGA驻吉他海四办公室版面。
因该版年久失修,加之论坛的冲水机制,将好贴埋没,特此换平台打捞。
文中涉及的部分具体数据和结论因版本迭代已失去参考价值,但过程中使用的思维方式值得所有有意成为舰队指挥的小伙伴学习。
原帖链接:https://bbs.nga.cn/read.php?&tid=6346914

[不靠谱的纸上谈兵] 狂热舰队伤害的数学模型及其模拟
受到ECF上风都督的帖子启发而作
本帖将会更加详细的模拟狂热舰队集火的过程以及评估集火的成效
暂时先把狂热舰队的模拟放出来 如果有需要会跟进补充使用720火炮的舰队模拟或者加入对后勤目标的模拟
下面这种图是整个舰队在一次点名官点名之后会发生的事情

首先要假设交战时的很多情况 这些假设会只考虑完美状况所以运用到实战的时候信息仅供参考
假设:

交战双方均为狂热舰队且狂热的配置为

其中修改了若干技能试数据更靠近平时队员驾驶的情况 比较关键的数据有 加成后射速2.3秒, 装甲值11100+, 电抗84.4%, 热抗81.8%, 齐射伤害882其中电热伤害比值为14:4, 锁定狂热的速度为3秒
只要敌对第一个后勤的第一个摇修生效之后若仍未击毁目标即认为无法破防
网络延迟固定为0.1秒, 狂热驾驶员在点名后的反应速度服从泊松分布P(2.5), 敌对狂热在受到攻击后1秒即发出摇修请求,敌对后勤在收到请求后0.5秒即开始锁定
所有的射击都会造成100%命中, 没有擦伤未击中以及完美一击. 但是模拟中设置了一个调整参数来调整与实际的差别, 暂时定为0.8

图中的时间顺序是从左往右, 中间最细的竖直虚线将时间轴划分为两个部分, 左边是本舰队时间轴, 右边为敌对舰队时间轴.
从左边竖直的紫色粗虚线开始一直到右边竖直的紫色粗虚线之间, 就是从点名开始一直到第一个摇修开始生效的过程.
点名后, 经过两次网络延迟, 己方狂热收到信号(深蓝箭头), 经过一段反应时间以及3秒锁定后开始开火(红色箭头群). 再经过两次网络延迟对方狂热收到伤害(红色箭头群), 1秒反应时间后对方狂热开始要求摇修(橙色箭头), 两次延迟后对方后勤收到要求信号(绿色箭头), 0.5秒反应时间后开始2.6秒的锁定和一次网络延迟(绿色箭头)以及4秒的第一圈摇修等待.
下面进行的就是纯粹的数据计算了, 计算过程是考虑到抗性而使用的实际伤害值而并非有效伤害值, 这样做会更加的准确. 即分别计算没艘狂热单发射击造成的电伤和热伤以及打在目标船体按防御计算的实际伤害值.

使用 R Project for Statistical Computing 进行运算的代码
zealot.hp <- rep (11148 + 1000, 46)
zealot.em.damage <- 882 * 18 / 22
zealot.th.damage <- 882 * 4 / 22
zealot.firerate <- 2.3
zealot.lock <- 3
delay.net <- 0.1
delay.require <- 1
logistics.reactiontime <- 0.5
logistics.lock <- 2.6
logistics.firstrepair <- 4
time <- delay.net * 7 + zealot.lock + delay.require + logistics.reactiontime + logistics.lock + logistics.firstrepair
zealot.em.def <- 0.844
zealot.th.def <- 0.812
adjust <- 0.8
zealot.absolute.damage <- adjust * (zealot.em.damage * (1 - zealot.em.def) + zealot.th.damage * (1 - zealot.th.def))
fleetdamage <- rep(0,46)
for (n in 5:50){
reactiontime <- c(1:n)
damage <- c(1:n)
reactiontime <- rpois (n, 2.5)
for (m in 1:n){
reactiontime[m] <- reactiontime[m] + time
attacktimes <- floor (reactiontime[m] / zealot.firerate) - 2
damage[m] <- attacktimes * zealot.absolute.damage
}
fleetdamage[n-4] <- sum (damage)
}
plot (5:50, fleetdamage, type = "l", xlab = "number of zealots", ylab = "Fleet absolute damage")
par(new=TRUE)
abline (h = zealot.hp, untf = FALSE, col = "red")

最后模拟的结果

中间的红线是一条标配狂热的实际生命值, 横轴是狂热的数量, 纵轴是这些狂热在对方第一个摇修生效前可以造成的总舰队伤害.
暂时的模拟效果就是一个舰队需要大约30个头脑清醒网络不卡技能合格的狂热驾驶员来集火干掉对面的一条狂热.
当然这个数字也是要随着对方战斗素养而变化的,假设中对方点摇修以及后勤挂摇修的速度已经是相当快了,分别为1秒和0.5秒. 就我自己平时跟队来看舰队平均水平很难达到.

(编注:随后原作者还应回复要求,计算了上述狂热内战超载、甲抗720缪宁定向等离子与狂热对A的伤害/数量图,因现已不具备参考意义略过)

感应抑阻:
感应抑阻暂时还无法加入到计算中
因为我是把每个狂热的开火时间限制到听到广播后与对方第一个摇修之间.虽然我是按时间顺序在模拟,但是只是为了明确这段间隔有多少秒如何计算而为并不是真正的监视每0.1秒目标狂热的hp的.程序可以改写为按时间顺序监视但是工程量比较大.如果想加入感应抑阻的话模拟其实是会变的更准确的,不过还要给每个后勤设立一个随机函数来判断是否被抑阻和另外一个泊松分布来模拟他们看到摇修请求后的反应时间.之后程序在每0,1秒监视狂热的hp是否小于0.可能的两个结果是点名后20秒左右被点爆或者被修满无法破防.此时再结束监视的循环.
一个数学模型只是简化假设实际情况,有太多的因素无法在这里得到表达.比如有人秒睡了有人网络延迟1000有人技能不够只能用t1炮有人神级0.5秒反应有人桌下有人20秒反应时间.开炮的时候不可能炮炮都完美命中会擦伤会完美一击会完全没打中.建立模型的时候只能笼统的把它们都简化,顶多按完美情况按比例修正.我在这里并不是想就这个东西写一篇学术论文或者之类的东西,一个模型可以非常复杂非常准确考虑的面面俱到并且都纳入计算之中,但现在这些不在我的考虑范围内...
另外附一个图...己方队员不同反应时间下舰队效果.柱状图是全员反应时间,横轴是秒,纵轴是人员比例.一共五组,分别是人均反应时间从1秒到5秒时的变化.
