GameRes游资网

 找回密码
 立即注册
12下一页
返回列表
查看: 3674|回复: 15
打印 上一主题 下一主题

[原创] 数值策划学会这个3个数学技巧,技能强度估计化繁为简

[复制链接]
跳转到指定楼层
1
发表于 2018-11-8 10:21:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
游戏类型:   设计类型:【数值/经济系统/付费】 


文/阿卜拉克萨斯

在数值策划的工作中,我们常常会面对奇奇怪怪的技能效果的量化问题。通常而言,这个问题不存在解析解。更为正确的做法是对真实玩家的实际数据进行统计分析,利用回归模型来甄别不同CD、持续时间、施法时间、效果对我们选定的因变量的影响,比如这个因变量可以是剩余hp。然而,游戏在推出之前,数值建模就必须做好,这就导致了悖论,我们依赖于统计分析来建模,可没有建模之前,统计就没有数据可分析。除此之外,可行的另一方法是使用程序模拟产生数据,甚至划定适应函数,以遗传算法的思路确定技能效果的特征值应当怎样,才能满足我们期望的平衡。遗传算法是到目前为止事实上的最佳做法,但它要求游戏的所有技能设计完毕,并对技术提出了要求,一旦添加、修改必须从头迭代,其时间复杂度较高。

【证明过程】>>>

我在这篇文章里想要展示的是一种数学证明技巧,结合数值分析手段得出任意技能效果的强度估计。数学证明确保了我的推论,数值分析则给出估计值。思路起始于以下2点:

1】奇怪的技能效果不存在解析解or难以得出解析解

2】技能效果发挥的实际强度,一定受限于角色自身实力的唯物观

从以上2个角度出发,我的目标被明确了:我不知道任意技能效果的强度,但它们是否存在一个界?答案是:存在。

【步骤一】设,有A、B两名强度相当的玩家,B拥有30%概率令目标昏迷的技能效果,而昏迷时间只有2个方向:∞,0。当昏迷时间→0时,B=A,时间→∞时,因为昏迷本身不额外造成伤害,B只能以自身强度追加伤害,追加的伤害永远不可能超过B自身,但我们确信昏迷是一个>0的正面效果,于是B>A。故:B>=A。又由于真实的昏迷技能只会被设计在∞与0之间,故:昏迷>真实昏迷,所以我们找到了30%概率昏迷效果的下界:没有任何效果的A。

【步骤二】现在,我们需要引入一个概念,这个概念必须与“步骤一”里的技能效果有同等条件,唯一的是效果不同,这个概念必须是我们清晰认识的,我选择30%暴击+2倍爆伤,为玩家C拥有的效果,C自身强度与A、B相当。根据全概率公式可知,C的输出能力收敛于1.3,即1.3A。显然C>A。我们接下来的问题是,B和C的关系怎样?

【步骤三】设,存在一个玩家D,D拥有30%概率暴击+2倍爆伤+30%概率昏迷。根据“步骤一”,我们有D>=C,又显然D>B。故:D>=C>B>=A。至此,我们成功证明出了B的上界是拥有同等概率的暴击C,又由于暴击效果收敛于一个常数,事实上也反映了“2】”的唯物观。

【步骤四】接下来加入更多奇奇怪怪的技能效果:击退、拉近、贴身冲撞、瞬移背刺、沉默、封印某系魔法、打断、闪烁、移动加速、复制技能等等等等。其思考方式与前述3个步骤并无二致,但不再数学描述。

【步骤五】显然,沉默、封印某系魔法,等价于昏迷了对方的技能部分,又由于范围不如昏迷(昏迷等价于沉默移动、普攻、技能),故:封印某系魔法<沉默<昏迷。

【步骤六】击退、拉近、贴近冲撞、瞬移背刺。被施加效果的目标在这短暂的被击退、被拉近、被冲撞、转身回击的过程中,无法发起对施法者的攻击,其等价于在短暂时间内令对方昏迷。如果可以发起攻击,那么效果强度将更小于现在讨论的情况,又因为时间→0,故:击退等<封印魔法<沉默<昏迷。

【步骤七】打断等价于时间→0的沉默,故:打断<以上全部

【步骤八】闪烁将其夸大为闪过去攻击,在对方要攻击的时候立刻闪回来。显然,这种令对方无法反击的夸大讨论,等价于昏迷,由于实际闪烁完全不趋近于本情况,且闪烁到敌方攻击距离、方向外可令敌方攻击中断,故:打断<=闪烁<以上全部

【步骤九】移动加速将其夸大为无穷大的移速,显然,这种情况比夸大的闪烁弱,因为它不能逾越障碍,故:移动加速<以上全部。

【步骤十】任意技能效果根据以上推导,都可以表明均在一个你可以规定的上界和一个没有任何效果的下界之间,所以,复制技能只可能取值任意技能效果,我们可以使用后面提到的数值分析法估计出效果强度后的均值来作为该技能的强度估计。

【步骤十一】攻击加速略微特殊,如果加速→∞,则攻击加速<=上界,加速→0则>=下界。攻击加速又可以知道,相当于提高攻速百分比的伤害百分比,所以其上界必须考虑最高攻击加速的实际百分比数值——任何可计算、直接给出伤害提高效果的技能是同等道理(暴击就是一例),因为伤害效果是一个被清晰认识的技能效果,其上界在于它自身。

【数值分析】>>>

我们证明,技能效果总是在一个上界和一个下界之间,加入任意技能效果,都可以为其安排位置,并将服从于不等式排序。某些技能效果可能互相之间难以看出谁在不等式的另一边,但只要它们是临近的,事实上最终对它们的强度估计不会偏差太远,毕竟我们没有解析解,只有存在误差的数值解。

【插值法】当我们完成上述不等式排序后,我们对技能效果的强度认识有了相当大的进展,我们知道它们在一个界里,并且知道界的两端,可我们并不知道它们到底强度如何,但我们可以将其看作已知2个数据点,求中间数据点的插值问题。已知界的两端分别是1和1.3,做一个线性/对数插值,用插值函数依序估计出所有技能效果的强度即可。实践表明,上界不高,那么线性和对数插值几乎没有区别,如果界较高且技能效果较多,对数插值应当是合适的选择:因为我们还是要相信,个中关系不应该是线性那么简单。

【计算方法】我们知道了任意技能效果的强度,其强度上界总是一个提高了X倍伤害的效果、更高强度的玩家。但对我们真正有用的上界是:拥有伤害技能在标准战斗时间里,通过技能+普攻最终造成只有普攻情况下的A倍(A>1)的角色。而这个情况,是我们在建模之初就指定了的A值,用以计算出角色属性、技能伤害所需的参数。现在,我们知道,真实的战斗时间不是→∞,所以,我们将包括上界的所有技能效果的强度除以标准战斗时间,得出每秒强度值,则我们可列出公式,新的A值变成:

new_A=(a0x0+a1x1+....anxn)

a是任意技能效果的每秒强度值(强度值/标准战斗时间),x是各类效果存在时间,某些看似没有时间的效果,实际上它只能存续于标准战斗时间内才有意义,所以它们的时间等于标准战斗时间。根据以下公式,算出一个技能携带了其他效果时,该技能可被分配的剩余伤害能力:

w=( ( A - new_A ) * (c+s) - c )/ s

w为我们要求的伤害百分比,c为该技能冷却时间,s为普攻速度,一般为1,该公式已省略过程,不在本文讨论,原始公式出自《游戏数值对答录》,经简单代数变换可得。该公式表明,当( A - new_A )的绝对值<=1时,w不能得出正常结果。为解决这个问题,可以使用正常的A、c、s的值算出w,然后w * new_A / A来解决。

同时,我们给出两种越界警告,一种是特定技能效果超出插值给出的估计值,一种是超出上界,后一种表示技能的不平衡程度不小于该差额的绝对值,在特别设计和要求的情况下可适当超出。


【其他】>>>

Q:你在最后说暴击这样看似没有时间的技能,只在标准战斗时间内有效,可以等于持续了这个时间,可你在推导中又说昏迷→∞,这不是矛盾吗?

A:因为推导过程中,暴击不言自明的存续时间→∞且不可能为0。

Q:昏迷可以看做限制了对方输出,提高了我方生存,为什么你说对昏迷目标的追加伤害仍然不能超过自身强度?

A:因为30%概率暴击等价于提高了1.3倍伤害,则数学公式为HP*(1.3 * DPS),根据乘法交换律,该公式也等于(1.3 * HP)* DPS。这意味着提高X倍输出能力,完全等于提高了X倍生存能力。推导过程中从生存能力角度看将得出→∞的不定式,我们无法得出任何结论,从输出角度看便可以得出结论。此外,真实昏迷不可能被设计得过长,过长也会有对抗技能来解控,则:有解控威胁的昏迷<真实昏迷。

Q:D>=C,D>B,据我所知在不等式里不能得出D>=C>B ?

A:如果C是一个变量,像通常见到的不等式公式那样,我们的确不能得出。但C是A这个常数 * 1.3,仍然是常数。D和B的变量是昏迷时间,D既然可以等于一个常数,即这个常数是D的下界,则B是不可能大于这个常数的,否则会推出D>=B,和已知条件矛盾。如果D和B的昏迷时间不一样,也无法推出步骤三的结论,但注意前3步骤的所有条件:基础强度、概率、时间趋向的一致性。

Q:那实际中,昏迷时间完全可以在冷却和持续上不一致呀?

A:这是一个简单的全概率公式可以解决的问题。即便上界是30%概率的暴击,对于60%*(10/3)*1/10+0*(1-60%)*(1-(10/3)*1/10)=20%。可以得出,在10秒标准战斗时间内,60%概率的3秒冷却1秒持续的昏迷效果,等价于20%概率1秒冷却1秒昏迷的效果。则20%概率没有超出30%概率的上界。任意百分比如移动加速、CD回复均可通过全概率来等价为概率表现,从而不违背数学证明的前提条件。

Q:你用到了哪些数学技巧?

A:1、不等式与夹挤定理;2、极限知识;3、数值分析的插值法

QQ:512177324,欢迎前来交流
2
发表于 2018-11-9 10:18:53 | 只看该作者
感谢大佬分享。但部分很难认同,如果眩晕时间趋于0  那其实看成小打断,价值会大于0,其次如果眩晕时间趋于0,那么计算时肯定同等考虑暴击伤害趋于0,所以眩晕的价值我一直纯数值上是等同于暴击,而策略体系效果则另说。   个人拙见,见笑了。
3
发表于 2018-11-9 14:10:02 | 只看该作者
onlyend 发表于 2018-11-9 10:18
感谢大佬分享。但部分很难认同,如果眩晕时间趋于0  那其实看成小打断,价值会大于0,其次如果眩晕时间趋于 ...

并不正确,极限的→0,不能看成小打断,已经可以当做无穷小量忽略,这是基本的极限知识。而暴击伤害不能趋于0,请注意为什么选择30%概率+2倍爆伤,因为爆伤强度越低,等价于概率在减少,那么条件就与30%概率的昏迷不一致。此外,由于暴击收敛于一个常数,你将常数当变量减少,这已经没法进行数学证明了(因为时间是一个自变量,你又把伤害做成另一个自变量,我们一开始就不知道他们俩是什么关系,根本无法处理这种情况),我们就是为了证明 昏迷效果是一个以时间为自变量的函数。希望找到它>和<一个常数界,综合来看,这么做只会让我们陷入迷雾之中
4
发表于 2018-11-9 16:59:16 | 只看该作者
问题在于这个数学模型基本将时间变量剔除了。而加入时间变量各个效果随着时间的变化函数应该是离散的。也就是说,不同数量级时间的参与下这个计算是不具有通用性的东西。
主要在于cd和持续时间是设计以及计算的核心要素。看这个算的又不是回合游戏。勉强说估算,可以认同,但是最后作为填写伤害的标准。有点儿戏了。我承认在时间同一标准上插值法能够估算出一个大概的函数。因为动作系统,还有打断的优先级,各种霸体,相互关系造成的时间关系不连续只能让这个结果相当的不准确。
不如直接模拟实际数据根据结果进行逆运算来得快。一个数值模拟器比这个东西实际的多
5
发表于 2018-11-9 17:22:39 | 只看该作者
A=1,B=t^2+1,C=1.3,D=t^2+1.3
满足所有前提步骤,那么B和C的大小关系是什么?
6
发表于 2018-11-9 18:21:36 | 只看该作者
zxctcsx 发表于 2018-11-9 17:22
A=1,B=t^2+1,C=1.3,D=t^2+1.3
满足所有前提步骤,那么B和C的大小关系是什么?

C=1.3A,B=f(A,x),D=1.3*f(A,x),满足所有前提条件,B和C的大小关系是什么?
你的例子完全错误!A不等于1,你的1本质意思是A是自己的1倍,但是,我们并不知道B是A的几倍!(只先验的相信昏迷必然是一个正面效果),所以你直接说B为这样一个+1的形式,完完全全错误!
7
发表于 2018-11-9 18:58:54 来自手机 | 只看该作者
zxctcsx 发表于 2018-11-9 17:22
A=1,B=t^2+1,C=1.3,D=t^2+1.3
满足所有前提步骤,那么B和C的大小关系是什么?

你假设是一个发散的函数,即玩家无穷强,然后用来证明确实没有界,于是它是无穷强。
我们称呼为循环论证
8
发表于 5 天前 来自手机 | 只看该作者
那个第三步,你后面标注的那种证明方法,我还是不理解。那种证明方法里,你是用的反证法,直接假设无论昏迷多长时间,B都≥C的吗?这不能推出C是B的上界啊(即无论昏迷多长时间,B都<C),只能推出存在某些昏迷时间B是<C的,而且我觉得这样更直观一些。假如我让对方整局比赛都定住了,这就相当于有30%的概率一击必杀啊?这都没有30%的暴击厉害吗?
9
发表于 5 天前 来自手机 | 只看该作者
而且那个C的暴击率似乎是随便定的……不一定是30%的暴击,似乎我随便定一个正数对于你的证明过程都没啥影响啊
10
发表于 5 天前 | 只看该作者
之前我和好几个数值策划探讨过,公式的设计为什么不用数值分析的方法,确定几个关键数据去制造公式
他们都说没必要。。。
我私下以为是他们没学过这门课==
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|稿件投递|广告合作|关于本站|GameRes游资网 ( 闽ICP备05005107-1 )

GMT+8, 2018-11-17 11:09

快速回复 返回顶部 返回列表