❶ 模拟退火法<sup>[1,]</sup>
模拟退火算法最早在1953年由 Metropolis等人提出。在地球物理中的最早应用是Rothman在1983年利用模拟退火算法处理地震资料的剩余静校正。模拟退火法也是类似于蒙特卡洛法的随机搜索方法。但是在产生模型的过程中引入一些规则,能有效地加快搜索速度,有时又称这类方法为启发式蒙特卡洛法。
模拟退火法概念源于统计物理学,是模拟固体熔化状态逐渐缓慢冷却最终达到能量最小的结晶状态的物理过程。对于一个熔化的金属,当处于某个温度的热平衡状态时,它的每一个分子都有它可能所处的状态,有些分子可能能量高一些,有些分子可能能量低一些,分子处于何种状态的概率由分子所具有的能量决定。设分子所有可能的能级总数为n(微观粒子的能量都是量子化的,不连续的),则分子处于某种状态的概率满足玻尔兹曼概率分布:
地球物理反演教程
其中:Ei为第i个分子的能量;K为玻尔兹曼常数;T为绝对温度;n为分子所有可能的能级总数,分母称为配分因子;pi为第i个分子处于能量Ei的概率。
如果把地球物理反演的模型向量看作分子,把目标函数看作分子的能量,把目标函数的极小值看成分子冷却结晶的最小能量,反演问题(最优化问题)可以模拟式(8.11)金属退火的过程,通过缓慢地减小温度进行反演,使目标函数(能量)逐渐达到极小值,这时所对应的模型(分子状态)就是反演结果。
为了改善于蒙特卡洛法的随机搜索方法,1953年 Metropolis等人在产生模型的过程中引入Metropolis接受准则,模型产生并不是完全随机,而是以前一个模型为基础随机产生。对能量减小的模型完全接受,对能量增加的模型按一定的概率接受,这样能有效地加快搜索速度,同时又有可能跳出局部极小值。具体如下:
设原来模型向量为mi,新的模型为mi+1(在mi基础上随机修改产生),各自的能量(目标函数)为E(mi)和E(mi+1)。如果E(mi+1)<E(mi),则目标函数在减小,新模型可以接受。如果E(mi+1)>E(mi),则目标函数在增加,按照一定概率来确定是否接受新的模型。具体规则见式(8.12):
E(mi+1)<E(mi) 完全接受mi+1为新模型
地球物理反演教程
式(8.12)就是Metropolis接受准则。它使得反演过程可以接受使目标函数增加的模型,因此也就使得模拟退火法有可能跳出局部极小,收敛于全局极小值点。由于玻尔兹曼常数K只是起到尺度因子的作用,在实际计算中K可取为1来简化公式。从式(8.12)可以看出,当温度较低时,pi+1/pi较小,因此接受使能量增加的新模型的可能性较小。而一般温度较低时,目标函数较小,模型比较靠近真实模型,这时基本上只接受使目标函数减小的模型,使模型尽快收敛于极小值点。
在模拟退火反演中,要求温度T随着迭代次数的增加而缓慢降温。常用的温度函数有两种。
(1)指数下降型:
Tk=T0·exp(-ck1/N) (8.13)
式中:k为迭代次数;c为衰减因子;N为模型参数的个数;T0为初始温度。上式也可以改写为
地球物理反演教程
通常选择0.7≤α≤1。在实际应用中可采用0.5或1代替式(8.14)的1/N。图8.4(a)为指数降温曲线。采用参数为:T0=200℃,α=0.99,1/N=0.9。
(2)双曲线下降型:
T=T0αk (8.15)
式中:T0为初始温度;k为迭代次数;α为衰减因子,通常取0.99。初始温度T0不能取得太高,否则增加计算时间浪费机时;T0也不能太低,否则模型选取不能遍及整个模型空间,只是在初始模型附近选取,不能进行全局寻优。所以T0的确定只有通过实验计算得到。图8.4(b)为双曲线降温曲线。采用参数为:T0=200℃,α=0.99。从图8.4可以看出通过对不同温度曲线和相关参数进行选择,可以控制温度下降的方式和速度。
图8.4 模拟退火法降温曲线
模拟退火法主要有三种:
(1)MSA算法(Metropolis Simulated Annealing);
(2)HBSA算法(Heat Bath Simulated Annealing);
(3)VFSA算法(Very Fast Simulated Annealing)。
图8.5 模拟退火MSA算法程序流程图
前面介绍的利用 Metropolis接受准则的算法就是经典的模拟退火法。图8.5为模拟退火 MSA算法的程序流程图。从中可以看出 MSA算法有一套模型修改准则,依次改变模型参数,每次改变都是在原来模型基础上改变一个参数,因此容易保持已有搜索成果,持续不断地向目标函数最小值点接近,因此搜索效率比蒙特卡洛法高。此外,MSA算法允许接受使目标函数增加的模型,这样又易于跳出局部极小,达到全局极小。但 MSA算法在任何温度下和蒙特卡洛法一样都是在模型全空间进行搜索,不能根据当前温度和模型减小搜索空间,此外由于模型的修改全凭运气,所以不可能像前面介绍的最小二乘法那样目标函数基本上持续减小,而是呈不规则振荡在宏观上逐渐减小,因此效率较低。
HBSA算法与 MSA算法的不同之处是在模型的修改上。也是首先随机选择一个初始M维模型向量m0(它具有M个参数);然后限制各个模型参数可能的取值范围,对取值离散化。假设每个模型参数都有N个可能的值,首先固定模型第2个参数m0(2)直到第M个参数m0(M)保持不变,只修改第1个参数m0(1);计算m0(1)的所有取值时的目标函数,然后按式(8.16)计算“概率”,它就是式(8.11)配分因子取1的公式。即
地球物理反演教程
选择“概率”最大的为模型第1个参数的修改值。照此依次对所有模型参数进行修改完成依次迭代计算。在每次迭代计算中保持温度不变。随着迭代次数增加,温度降低,最终达到稳定状态,获得最小能量解。这种方法的计算由于要计算某个参数的所有可能值,所以计算量也是很大的。
1989年Ingber提出了VFSA算法,由于速度较快,最为常用。它使得模拟退火法从理论走向了实际应用。VFSA算法在流程上与传统的模拟退火法相同,但是在模型修改、接受概率以及降温曲线上有所改进。
(1)模型修改:常规模拟退火法采用高斯随机分布修改模型,在任何温度下都是在模型全空间进行搜索。而Ingber提出采用依赖于温度的似cauchy分布产生新的模型。即
地球物理反演教程
yi=Tsgn(u-0.5)[(1+1/T|2u-1|-1](8.18)
其中:mi为当前模型第i个参数,m'i为修改后的模型参数;u为[0,1]的随机数;[Ai,Bi]为mi和m'i的取值范围;sgn( )为符号函数。
采用以上方式能在高温下进行大范围的搜索,低温时在当前模型附近搜索,而且由于似cauchy分布具有平坦的“尾巴”,使其易于迅速跳出局部极值。这一改进大大加快了模拟退火法的收敛速度。
(2)接收概率:当E(mi+1)>E(mi)时,VFSA算法采用如下概率接受公式:
地球物理反演教程
上式当h→1时变为式(8.12)。h通过实验获得。
(3)降温曲线(退火计划):Ingber在1989年采用式(8.13)得出指数降温曲线。从图8.4可知,温度下降较快。
总之,VFSA算法在模型修改、接受概率以及降温曲线上的改进使得模拟退火算法收敛速度大大加快。后人在此基础上还有很多的改进,读者可以参考相关文献。
模拟退火法的优点:由于不需要计算偏导数矩阵,不需要解线性方程组(当然正演计算的除外),结构简单,易于编程;此外,由于它搜索范围大,能接受较差模型,因此易于达到全局极小。缺点:随机搜索,计算量巨大,往往要计算成百上千次正演,这与前面的最小二乘法十几次的正演计算相比反演时间太长,因此一般应用在一维反演之中,在二维、三维等高维反演中应用较少。
❷ 软件设计中,N-S图、PAD图、程序流程图、E-R图,这四种图分别表示什么意思,有什么区别
N-S图:也叫盒图,这种流程图将全部算法写在一个矩形框内,而且在框内还可以包含其它的从属于它的框。
PAD图:也叫问题分析图,用二维树形结构的图表示程序的控制流。
程序流程图:也叫程序框图,用统一规定的标准符号描述程序运行具体步骤的图形表示。
E-R图:也叫实体-联系图,用实体类型、属性和联系等方法,描述现实世界的概念模型。
1、表示方式的不同:
N-S图:用矩形框,将全部算法写入;PAD图:用二维树形结构表示;
程序流程图:用统一规定的标准符号表示;E-R图:用实体类型、属性和联系等方法表示。
2、优点不同:
N-S图:功能域明确,一眼就可以看出来;PAD图:程序结构十分清晰;
程序流程图:对控制流程的描绘很直观;E-R图:表达能力强,易于理解。
3、缺点不同:
N-S图:不能任意转移控制;PAD图:不如流程图易于执行;
程序流程图:不易表示数据结构;E-R图:数据和应用分离,ER仅分析数据及其联系。
(2)sa算法流程图中英文扩展阅读
N-S图特点:
1)NS图形象直观,功能域明确,具有良好的可见度;
2)很容易确定局部和全局数据的作用域;
3)不可能任意转移控制;
4)很容易表示嵌套关系及模块的层次关系;
5)复杂度接近代码本身,修改需要重画整个图;
6)它强制设计人员按SP方法进行思考并描述他的设计方案,因为除了表示几种标准结构的符号之处,它不再提供其他描述手段,这就有效地保证了设计的质量,从而也保证了程序的质量。
❸ 1973年美国学者提出了一种新型流程图:N-S流程图。怎么看啊
2.4.4 用N-S流程图表示算法
1973年美国学者提出了一种新型流程图:N-S流程图。
顺序结构:
选择结构:
循环结构:
2.4.5 用伪代码表示算法
伪代码使用介于自然语言和计算机语言之间的文字和符号来描述算法。
2.4.6 用计算机语言表示算法
l 我们的任务是用计算机解题,就是用计算机实现算法;
l 用计算机语言表示算法必须严格遵循所用语言的语法规则。
【例2.20】求1×2×3×4×5用C语言表示。
main()
{int i,t;<br><br>t=1;<br><br>i=2;<br><br>while(i<=5)<br><br>{t=t*i;<br><br>i=i+1;<br><br>}
printf(“%d”,t);
}
【例2.21】求级数的值。
main()
{
int sigh=1;
floatdeno=2.0,sum=1.0,term;
while(deno<=100)
{ sigh= -sigh;
term= sigh/ deno;
sum=sum+term;
deno=deno+1;
}
printf(“%f”,sum);
}
❹ 算法流程图怎么画
算法流程图的画法:
品牌型号:华硕。
系统版本:UX30K723A。
软件版本:win7,亿图图示1.221.2,网络浏览器1.2.222.1。
1、第一步:搜索使用“亿图图示”,开始作图。
❺ 移动的SA是什么意思
智能天线(SA)作为一种可以抑制信号干扰、自动跟踪以及数字波束调节等智能功能,被认为是未来移动通信的关键技术。
所谓“智能夭线”就是利用数字信号处理(DSP)技术,在空间产生指向性波束,使阵列主瓣对准用户信号到达方向,旁瓣或零陷对准干扰信号到达方向,从而可以高效地利用移动用户信号的空域信息最大化接收期望信号并删除或抑制干扰信号的目的。智能天线的“天线”不仅是指将传统的电磁波转化为无线频率信号,或反之将无线信号转化为电磁波的器件,这在智能天线中称为传感器件.此外,还包括合成模式网——由若干个线性时变滤波器组成.智能天线的“智能"体现在系统中的一个自适应处理器上,它能够根据得到的信号对天线输出进行加权处理,使整个链路性能达到最优化.由下图所示的智能天线组成可看出,当系统处于接收状态时,由各个天线单元接收到的信号,首先经过射频单元进行放大和下变频等处理后,再进行A/D变换,送入自适应信号处理器中与一组权值进行加权处理,合成后一路得到输出信号;另一路生成误差信号,并用它在某个选定的准则下按照一定的算法控制自适应信号处理器进行权值的更新、完成自适应信号处理。
❻ 流程图英语
流程图英语如下:
[词典] tree; flow chart; flow-process diagram; flowsheet。
流程图(Flowchart):使用图形表示算法的思路是一种极好的方法,因为千言万语不如一张图。流程图在汇编语言和早期的BASIC语言环境中得到应用。相关的还有一种PAD图,对PASCAL或C语言都极适用。
功能
以特定的图形符号加上说明,表示算法的图,称为流程图或框图。
流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程。
例如,一张流程图能够成为解释某个零件的制造工序,甚至组织决策制定程序的方式之一。这些过程的各个阶段均用图形块表示,不同图形块之间以箭头相连,代表它们在系统内的流动方向。
下一步何去何从,要取决于上一步的结果,典型做法是用“是”或“否”的逻辑分支加以判断。
流程图是揭示和掌握封闭系统运动状况的有效方式。作为诊断工具,它能够辅助决策制定,让管理者清楚地知道,问题可能出在什么地方,从而确定出可供选择的行动方案。
流程图有时也称作输入-输出图。该图直观地描述一个工作过程的具体步骤。流程图对准确了解事情是如何进行的,以及决定应如何改进过程极有帮助。这一方法可以用于整个企业,以便直观地跟踪和图解企业的运作方式。
流程图使用一些标准符号代表某些类型的动作,如决策用菱形框表示,具体活动用方框表示。但比这些符号规定更重要的,是必须清楚地描述工作过程的顺序。流程图也可用于设计改进工作过程,具体做法是先画出事情应该怎么做,再将其与实际情况进行比较。
❼ 对称加密算法的工作原理、作用及其流程图
对称加密的核心——通信双方共享一个密钥
通信过程:
A有明文m,使用加密算法E,密钥key,生成密文c=E(key,m);
B收到密文c,使用解密算法D,密钥key,得到明文m=D(key,c);
比喻:
对称加密是最直观,也是历史最久远的加密手段,类似于加锁和解锁,只不过钥匙的个数非常多(~~2^100),一个人穷其一生也试不完所有可能的钥匙。
❽ 简述纯aloha算法和时隙aloha算法的基本原理和它们之间的区别
做过笔记,不过只能记起一些,而且可能有错,我只能说说我的记忆,我的笔记字草你看不懂,仅供参考。
纯ALOHA(PA),时隙ALOHA(SA)。
SA我的理解是PA的升级版。
PA:就是一堆设备发送自己的数据包,路经阅读器的磁场区域,然后需要发送信息给阅读器,若两个设备同时发消息给阅读器,说明产生了碰撞(冲突,我统一写碰撞),碰撞后怎么办,见他们停止并延时发送。若一个数据包完全发送则称为发送成功,若有多个,则称为碰撞,碰撞分两种,部分碰撞(两个碰撞数据包发送和结束时间不同)和完全碰撞(两个碰撞数据包发送和结束时间相同)。
其吞吐率是S=GP,S是吞吐率,G是载荷,P是成功发送率,PA的P取值为e的-2G次方。
SA:和PA差不多,但是多了一个时隙,可以理解为时钟周期,白话就是多长时间一个周期,5us一个周期,10us一个周期之类的,在这个周期的开始才能发送数据包,若两个设备同时发送,同样的停止并延时,这里要说一下这个多久一周期(同步时钟)是阅读器统一控制的。这样的情况若发生碰撞,必定是完全碰撞,没有部分碰撞,否则就是成功发送。
SA的吞吐率S=GP,这里SA的P取值e的-G次方,这里两个P不同记得别搞混了。
SA也有缺点,就是虽然吞吐率随数据包量涨的很高,但是跌得贼快。
https://m..com/sf_bk/item/%E6%97%B6%E9%9A%99ALOHA/9189645?fr=aladdin&ms=1&rid=10597168802908481753
网络的这个已经说得很详细了,不过不亲民,不过图片是非常好理解的,建议看图片,对比我说的
❾ 游戏攻击判定的三种模式
转自:http://www.gameres.com/677620.html
攻击判定流程几乎是所有包含战斗玩法的游戏都无法绕过的一块内容,常见的攻击判定流程有瀑布算法、圆桌算法以及混合算法三种。本文简述了这三种判定流程的特征,以实例对比分析了瀑布算法与圆桌算法各自的优点,以期为后续其他战斗数值设计内容的论述提供一定的基础。
攻击判定流程概述
自此开始正文内容的叙述——让我们直接代入一个实例:
在一款游戏中,攻击方有命中率和暴击率两个攻击属性,而防守方有闪避率、招架率和格挡率三个防御属性。于是相应的,一次攻击有可能产生6种判定结果:未命中、普通命中、闪避、招架、格挡和暴击。当采用不同的判定流程进行攻击结算时,6种判定结果出现的频率会截然不同。
1. 瀑布算法
顾名思义,在瀑布算法中,各事件的判定顺序如同瀑布一般自上而下。如果“水流”在某个位置被截断,则后面的流程都将不再继续进行。据我所知,瀑布算法是大多数游戏所采用的攻击判定算法。
上述实例若采用瀑布算法,则会以如下方式进行判定:
先判定攻方是否命中
再判定是否被守方闪避
再判定是否被守方招架
再判断是否被守方格挡
最后判定该次攻击是否为暴击
瀑布算法流程图
由此我们可以得出:
瀑布算法特征1:多次掷骰,一次掷骰只判定单个事件的发生与否
瀑布算法特征2:后置判定依赖于前置判定的通过
注:有的游戏会将命中和闪避合并在一次掷骰中判定,这意味着将攻方命中率与守方闪避率合并计算出实际击中概率后再进行掷骰判定,仍是瀑布算法
我们再代入一些具体的数值,设攻守双方角色的面板属性如下:
攻方命中率=90%
攻方暴击率=25%
守方闪避率=20%
守方招架率=15%
守方格挡率=30%
按照上述的流程判定,6种判定结果将会按如下的概率分布:
实际未命中概率=1-命中率=1-90%=10%
实际闪避概率=命中率*闪避率=90%*20%=18%
实际招架概率=命中率*(1-闪避率)*招架率=90%*(1-20%)*15%=10.8%
实际格挡概率=命中率*(1-闪避率)*(1-招架率)*格挡率=90%*(1-20%)*(1-15%)*30%=18.36%
实际暴击概率=命中率*(1-闪避率)*(1-招架率)*(1-格挡率)*暴击率=90%*(1-20%)*(1-15%)*(1-30%)*25%=10.71%
实际普通命中概率=命中率*(1-闪避率)*(1-招架率)*(1-格挡率)*(1-暴击率)=90%*(1-20%)*(1-15%)*(1-30%)*(1-25%)=32.13%
瀑布算法的判定结果分布
由此我们可以得出:
l 瀑布算法特征3:各事件出现的概率符合经典的概率计算方法
l 瀑布算法特征4:掷骰轮次越偏后的属性衰减程度越大,但不会出现无效的属性
2.圆桌算法
将所有可能出现的事件集合抽象成一个圆桌桌面,便是圆桌算法这一称呼的由来。圆桌算法的实质,是将所有可能发生的事件状态按优先级依次放上桌面,直至所有事件被放完或桌面被填满。圆桌算法正是史诗级巨作魔兽世界中所采用的算法。据笔者了解,使用该算法的游戏并不多见,但即便仅魔兽世界这一款,已足以使这种算法成为永恒的经典~
上述实例若采用圆桌算法,则会用一次掷骰判定该次攻击的结果。
圆桌算法流程图
圆桌算法的操作步骤可以归纳为:
(1)攻方角色的命中率决定圆桌桌面的大小
(2)将各个事件状态按优先级依次放上桌面,直至所有的事件均放置完或桌面被填满
(3)若桌面还未填满,则用普通命中填满空桌面
将先前设定的数值代入,6种判定结果将会按如下的概率分布:
实际未命中概率=10%
实际闪避概率=20%
实际招架概率=15%
实际格挡概率=30%
实际暴击概率=25%
实际普通命中概率=90%-实际闪避概率-实际招架概率-实际格挡概率-实际暴击概率=90%-20%-15%-30%-25%=0%
注:在上述计算中,优先级按如下排序:闪避>招架>格挡>暴击>普通命中
圆桌算法的判定结果分布
可以看出,由于普通命中的优先级最低,所以它被完全挤出了桌面。这意味着,若攻守双方以此数值模型进行对决,则攻击方的攻击结果中将不存在普通命中。
由此我们可以得出:
圆桌算法特征1:一次掷骰即得出该次攻击的判定结果
圆桌算法特征2:事件有优先级,圆桌放满后优先级低的事件将被挤出桌面。这意味着那部分溢出的属性将不再生效
圆桌算法特征3:圆桌内的各事件出现概率不会衰减,只要优先级低的属性没有被挤出圆桌,各种事件的实际发生概率就与面板属性数值吻合
3. 混合算法
这是一种先判定攻方事件,再判定守方事件的判定流程。笔者曾在一篇帖子中看到过这样判定流程,不确定是否有实际的游戏应用,故仅在此做一些简单的理论分析。
混合算法在单方事件的判定中采用圆桌算法,即:
攻方判定结果:普通命中OR未命中OR暴击
守方判定结果:闪避OR招架OR格挡OR被命中
混合算法流程图
注:上面这个图仅作示意之用,从流程图的角度来看可能不太严谨
将先前设定的数值代入,6种判定结果将会按如下的概率分布:
实际未命中概率=10%
实际闪避概率=攻方命中率*闪避率=90%*20%=18%
实际招架概率=攻方命中率*招架率=90%*15%=13.5%
实际格挡概率=攻方命中率*格挡率=90%*30%=27%
实际暴击概率=攻方暴击率*敌方被命中概率=25%*(1-20%-15%-30%)=8.75%
实际普通命中概率=攻方普通命中概率*敌方被命中概率=(90%-25%)*(1-20%-15%-30%)=22.75%
混合算法的判定结果分布
由此我们可以得出:
混合算法特征1:先判定攻方事件,再判定守方事件,共进行两次掷骰
混合算法特征2:先在单方事件的判定中采用圆桌算法,再用瀑布算法串联攻守双方事件
混合算法特征3:会产生并发动作,例如暴击被闪避等
注:这也正是实际暴击率较低原因所在
瀑布算法与圆桌算法的特性对比
在上一块内容的铺垫之下,我们不妨继续以魔兽世界中的攻击判定流程设计实例作为切入点,对比分析一下圆桌算法与瀑布算法各自的特性。
(1)面板属性传递信息的直观性
瀑布:由于各属性在判定流程上的生效时间有先后之分,所以各属性的实际效用与面板显示的不符。
圆桌:由于属性的判定没有先后之分,只要没有属性被挤出圆桌,则所有属性的实际效用与面板显示的相当。
这里可以看出圆桌算法的优点:
属性的实际效用与面板显示相符显然更易于普通玩家的理解,便于玩家掌握自身的战力情况。
(2)属性的价值
瀑布:掷骰轮次越偏后的属性衰减程度越大,但所有的属性均会生效。
圆桌:只要没有属性被挤出圆桌,则不存在属性效用的衰减。
这里可以看出圆桌算法的优点:
由于不存在判定流程上的先后,所以各属性的实际价值会比较接近,一般不会出现玩家堆了某个判定流程靠后的属性结果很废的情况。
同样也可以看出其缺点:
一旦有属性溢出,则该部分属性的效用为0,完全没有价值。
(3)相同面板数值下的生存能力
圆桌:在面板数值相同的情况下,魔兽世界用圆桌算法大大提高了坦克角色的生存能力,使得他们可以应对来自首领怪的超高攻击,匹配大型团队副本的玩法设计。
瀑布算法下,免伤概率=18%+10.8%+18.36%=47.16%
圆桌算法下,免伤概率=20%+15%+30%=65%
传统的概率为相乘关系,圆桌为相加关系,后者的概率总和要大的多
并且,当防御职业将三维堆至一个阈值(70%)后,配合技能可达100%的免伤覆盖,将命中和暴击全部挤出桌面,从而衍生出特定的玩法(70级年代伊利丹的剪切技能)。
瀑布:相同的面板数值在瀑布算法的框架下,免伤概率相较于圆桌算法要低得多。换言之,角色达到相同的有效生命值,所需的免伤属性要高得多。
这里可以看出:
在圆桌算法的框架之下,属性投放若是脱离了控制超过了阈值,将对平衡性产生较大的冲击(70级的盗贼单刷格鲁尔——当然在暴雪光环的作用下,玩家会认为这是精妙的设计~)。
在国产游戏收入导向的大环境下,设计者是否能顶住收入压力,严守属性投放的极值不越界,是值得慎思的问题。采用瀑布算法,能有更大的数值空间用于能力投放,更为适合现阶段的市场环境。
(4)运算量
瀑布:多次掷骰
圆桌:单次掷骰
显而易见:
掷骰次数越多,运算量越大。圆桌相较于瀑布,有着相对较小的运算量。简单即是美。
注:除魔兽世界外,《冒险与挖矿》的技能施放也采用了圆桌算法,大大简化了技能施放的判定流程。可以想象一下,一次攻击至多发动一个技能。而每一次攻击,一个队伍中有几十个角色的技能施放需要判定,如果采用瀑布算法,将产生多大的运算量。
思考与总结
对战斗数值的研究,应该基于理论推导而归于实践应用。毕竟游戏数值设计不是做数学研究,其本质应是一种体验设计。最后希望交流的是笔者个人对于这两种算法的一些理解。
(1)不同的攻击判定流程会向玩家传达不同的战斗感受
究其本质,不同的攻击判定流程,影响着一场战斗中的各种攻击判定结果将以何种概率分布出现。
假设在一款游戏中,闪避率的投放上限是30%,暴击率的投放上限是40%,命中率的投放上限是100%。瀑布算法下,出现闪避、暴击和普通命中的概率是30%、28%和42%;圆桌算法下,则为30%、40%和30%。这两种不同的概率分布,必然会带给玩家不同的战斗体验,但在缺少其他条件的情况下,并不能判断孰优孰劣。
使战斗体验匹配游戏的核心玩法,使属性投放的极限值能满足游戏的商业化需要,是设计攻击判定流程时首先要考虑的。
注:甚至于部分竞技游戏强调公平性,将暴击做成了伪随机。
使用瀑布算法,则不应该设计种类繁多的事件状态
若是仿照魔兽世界的做法设计一连串的事件状态(未命中、闪避、招架、格挡、暴击、普通命中、偏斜、碾压),非但运算繁杂,而且后置判定的属性衰减幅度较大,效果极不明显。这种隐晦的设计将不易传达,同时还会影响玩家的游戏感受(某个判定流程靠后的属性堆得很高结果却没用)。
使用圆桌算法,则应该严守属性投放的上限,防止平衡崩坏的情况发生
需要澄清的是,并不是说使用瀑布算法就可以无限投放数值,而是说,相较于瀑布算法,圆桌算法的属性投放上限会低很多(免伤概率的相加与相乘)
(2)不同的攻击判定流程将影响有效生命EHP和有效攻击EDPS的表达式
几乎每个数值策划都会将角色的属性转化为EHP和EDPS以衡量其的战斗能力,但曾见过不少人对所有的游戏都用统一的EHP、EDPS表达式进行分析模拟。这种偏差较大的模拟方式必然会影响体验设计的精准性。在不同的攻击判定流程之下,EHP与EDPS有着截然不同的表达式,举例说明如下。
瀑布算法下:
若命中闪避分两次判定:
EHP=HP/(1-免伤率)/(1-闪避率)/(1-招架率)
EDPS=DPS*命中率*[1+暴击率*(暴击伤害倍率-1)]
若命中闪避合并判定:
EHP=HP/(1-免伤率)/(命中率-闪避率)/(1-招架率)
EDPS=DPS*(1+暴击率*(暴击伤害倍率-1))
圆桌算法下:
EHP=HP/(1-免伤率)/(1-闪避率-招架率)
EDPS=DPS*[命中率-敌方闪避率-敌方招架率+暴击率*(暴击伤害倍率-1)]
注:闪避、招架>暴击>普通命中,且各状态发生概率之和未超过圆桌大小
混合算法下:
EHP=HP/(1-免伤率)/(1-闪避率-招架率)
EDPS=DPS*[命中率+暴击率*(暴击伤害倍率-1)]
可能有人会觉得:模拟得这么准又有什么卵用,数值平衡最后还不是靠调?诚然,在数值设计领域,确实有名言曰:数值平衡是调出来的。但在笔者看来,调节应该建立在正确的理论推导的基础之上。依靠调节来掩盖数值模型的错误设计,是本末倒置的行为。即便达到了所谓的平衡,也不过是扭曲的平衡,会为后续版本的迭代埋下隐患。
写在最后
市面上的大多数游戏,都不会设计复杂繁多的攻击事件,且基本采用瀑布算法。如此看来,攻击判定流程的设计十分简单。那么为什么要大费周章地将简单问题复杂化呢?
爱因斯坦曾说过:Everythingmust be made as simple as possible, but not one bit simpler——凡事应该力求简单,但不能过于简单。从了解一种数值设计方法到理解如此设计的目的,从模仿成功游戏的数值设计到理解其设计的内在意义,这是每个数值策划成长的必经之路。
从全盘照搬一种数值体系到能够融会贯通并根据实际情况灵活运用,这是一条并不好走的路。知其然,也应知其所以然——这是一个入行一年有余的新人的一点感悟。
免责申明:
1.笔者无法保证本文所用词汇的普适性,能力所限,请多包涵~
2.不保证文中魔兽世界实例中的设定均与原作完全相符。但即便不相符,也不会影响圆桌理论的推