您的位置 首页 知识

兰彻斯特方程(《皇室战争》中关于兰彻斯特方程的应用及数值设计)

兰彻斯特方程

皇室战争app登录ios平台后,本人对其产生了强烈的兴趣。其独特的玩法将moba、塔防、集换式卡牌等各种有趣的元素结合在一起,十分有趣。然而对我来说,最令我感到有趣的是皇室战争是如何差异化各种卡牌的效果,然后使得卡牌之间相互制约相互克制的,达到游戏相对的平衡。

短暂的几天接触这款游戏之后,发现卡牌的效果差异化主要体现在以下几点:

群杀伤和点杀伤
近程伤害与远程伤害的区别(远程的优势:先手和集火)
对地伤害和对空伤害的限制

是否具有攻城特性、是否具有突进特性(可理解成先手优势)

其中1、2俩点的差异化,都可以从中找到兰彻斯特方程的影子,我觉得深刻体会其中的含义,对指导游戏数值的设定是有帮助的。3、4俩点主要是人为的设置区分。所以我更加深刻感受到1、2俩点对游戏数值设计的影响及其魅力所在。

我就以第一点(群杀伤、点杀伤)谈谈我的理解。游戏里面有三张卡牌。一张是王子,是个骑士,高气血高攻击,近战单体输出;一张是骷髅军团,是一群低气血低攻击的近战单体输出组成的团队;最后一张是一位女武士,招牌就是360度无死角的旋风斩(群体输出),但自身属性介于骑士和骷髅杂兵之间。这三者形成了简单的克制关系:王子被骷髅军团克制,骷髅军团被女武士克制,女武士单挑却也打不过王子。下面我们先来看看三者的属性区别。

根据现有的关于皇室战争的一些数值,可以推断游戏的伤害计算公式应该不涉及防御的减伤效果,无论是加法公式还是乘法公式。因为游戏中根本不存在类似防御值的属性存在。就是简单的气血和伤害,注意到是即时制的游戏,所以我们这里谈到的伤害更多的是指dps,即每秒的输出量(由伤害at和攻击间隔sp计算所得)。

我们考虑到俩个单体目标互相pk,判定胜负的关键在于角色的输出和承受能力,易得到战斗力=HP*DPS。注意这里我们描述的战斗力仅限于俩个单体互博,很明显感受到两个人同时殴打一个人效果更明显,而不是俩人依次去讨人过招。

我们先研究“王子VS骷髅军团”:“A_VS_B  骷髅军团B完胜”

兰彻斯特方程平方律:

基本假设:部队的输出火力,正比于部队的士兵数量,以远程子弹射击来模拟最为适合。设部队A和B的士兵数量为X、Y,单个士兵对对方的减员效率为μ、ν。

得到微分方程组:

化简得:

进而有:

注意到:

于是有:

这就告诉我们集群的战斗力和单个单位的战斗力成正比,和单位数目的平方成正比。根据此模型可求得1个王子约等于可以和13(  )个骷髅打平手。但是要注意的是这个结果是建立在连续函数的基础上计算出来的结果。

注意到对于此题中,王子生命的衰减并不会影响到王子的输出能力的衰减。王子的生命(人数)从1到0的渐变过程中,输出能力一直不变,所以要建立离散的模型来刻画:

得到改进后的微分方程组:

其中:

经整理得:

由此公式计算出来1个王子约等于可以和18(  )个骷髅打平手。

哈哈,我突然发现出矛盾了。因为游戏里1个王子完全干不过20个骷髅啊,被秒杀的份啊,这是为什么呢?因为王子的伤害值Aat=220,而骷髅的气血值Bhp=30,伤害完全溢出了嘛。实际上王子的Aat应该降到取30算,这样修正过之后结果是1个王子可以和6.99(  )个骷髅群殴打平手。

其实我们在处理的过程中由于对伤害采用了DPS的算法,也就是说我们并没有完全的做离散化的模型,实际上还是有误差存在的。鉴于此,为了完全模拟离散化的情况,我使用VBA编程,简单的实现了下,程序跑出的结果如下:

程序表明,1个王子只能和7个骷髅打群架,真叫是拳皇也打不过八个小学生。

(程序实现很粗糙,每隔0.1秒做一次伤害判断计算,没有考虑双方第一次出手前是否有攻击前摇,比较粗糙,陪同简历的还有一份相关的xlsm文件)

我们接着讨论“骷髅军团VS女武士”:“B_VS_C 女武士C完胜”

当我玩皇室战争时,看到女武士360度无死角的大风车群伤模型,再比较了下女武士C的伤害值Cat=121和骷髅军团B的气血值Bhp=30,121>30,想象下那肯定是女武士一转,转倒一大片啊。只可能在骷髅数目足够多(相当多)的情况下,一下子集火掉女武士,这样双方均被消灭。仔细想想骷髅军团的骷髅数目其实是在增加“骷髅军团整体”一次普攻造成的伤害的大小,且成线性关系(注意与“王子VS骷髅军团”模型比较,这个模型中骷髅军团的实力与骷髅的数目的平方成正比)。注意到女武士的群攻伤害,杀死一个骷髅和杀死一群骷髅的难度是一样的,也就是说对于骷髅军团而言,数量多带来了火力的成倍增加,但是数量多在面对群伤技能时候承受伤害的能力反而降低了。对了这正是兰彻斯特方程第二线性率的基础假设:

兰彻斯特方程第二线性率:

基本假设:在兰彻斯特方程平方律的基本假设上增加一条,受击方的减损率受受击方士兵数目影响,且成线性关系。

微分方程组:

这里不再详细讨论第二线性率,因为这样反而把问题复杂化了,为了理解一个简单现象偶然发现一个模型,反过来在拿来解释就没有大多意思了。或者这里我理解的是,“多人单体伤害VS单人群体伤害”的战斗过程,等价于“单人单体伤害(但伤害值翻倍)VS单人单体伤害”。因为当大家都是单体时,就不要区分伤害是单体的还是群体的了。

下面这是程序模拟跑出来的结果:

结果似乎没什么意思。

最后我们讨论“女武士VS王子”:“C_VS_A  王子A完胜”

Wait,这需要讨论吗…

王子笑着说:旋风斩是什么,能吃吗,来我们站着捅个痛快。

王子属性完全碾压女武士,4.5秒后,女武士卒,王子剩余56%的气血值。

(这部分也用VBA编程模拟测试了下,4.5和56%都是跑出来的数据)

分析了许多,该到总结的时候了。如何使得 王子、女武士、骷髅军团 循环克制,数值上该满足什么关系。我给出一个比较简单的判定方法:

1.骷髅军团B克制王子A:

2.女武士C克制骷髅军团B:

3.王子A克制女武士:

联起来就是

同时除去  ,

这里为什么是  ,我觉得改成  ^2也是可以的。毕竟这些结论是从连续函数的模型中得出来的,事实上程序实现的离散的真实的模型可能还是有些误差的。

兰彻斯特方程相关文章