DOTA2 程序伪随机机分布到底是什么意思

多次看到有些吧友说“程序伪随機机”特别是一些晒货的帖子,某些人会说这是程序伪随机机,没什么好开心请问,该游戏是程序伪随机机的吗程序伪随机机是怎样一个概念?是通过程序伪随机机告诉对方“艾玛其实你那玩意的爆率并没有那么高啦都是游戏有意让你爽的啦高兴个什么劲”吗

}

“一定不是我非一定是游戏有問题” 很久以前流传着这样一则笑话:一个身患重病的人决定去动手术。在手术之前他问医生:“这起手术的成功率是多少?”医生回答他:“只有1%”他很惊慌,但是医生说:“没事的在你之前我已经治死过99个人了。”

这是一则嘲笑那些不懂“概率”的人的笑话却講出了“真随机”和“程序伪随机机”之间的区别。

在四月末的时候我曾写过一篇《你打游戏靠的是技术,还是运气》,其中就提及叻“程序伪随机机”这个概念当时受限于篇幅,没有详细展开解释“程序伪随机机”的概念前不久,在因国际邀请赛而备受关注的Dota2在朂近一次的更新中有这么一条更新内容:“落空的负面效果和下坡攻击的落空效果现在都采用程序伪随机机触发”。

那么到底什么是“程序伪随机机”呢以及和“程序伪随机机”对应的“真随机”又是什么概念?

在讨论真随机和程序伪随机机之前先排除另一个容易搞混的错误答案:赝随机数。

Generator简称PRNG)是计算机的一个术语——当然,它也可以被叫做“程序伪随机机数算法”只是为了方便与游戏中的“程序伪随机机数”进行区分,本文中统一称作“赝随机数算法”众所周知,计算机程序是由无数“0”和“1”两种状态构成的如果一個状态不是“0”,那就必定是“1”颇有种非黑即白的味道。

因此在计算机程序中,不存在“不确定”的数字只有确定的“1”和“0”。基于这种特性计算机无法生成“真正的(不确定的)随机数”。那么在计算机中需要生成或是使用到随机数的时候怎么办呢?通常昰利用计算机抓取一些数值然后将这些数值输入至一个复杂算法(常用的算法是同余法和梅森旋转算法,有兴趣的读者可以自行查询這里就不展开讲了)当中,通过一系列运算得出一个数字这就是平常说的赝随机数了。

只要最初输入的数值(初值)不变那么输出的徝都会是同一个值,这就证明了这个数并不随机只是看起来随机而已。换句话说只要这个随机数是由确定算法生成的,那就是赝随机數所以下一次在和朋友聊天时提到真随机数、程序伪随机机数时,如果有人插嘴:“计算机只能生成程序伪随机机数所以根本没有什麼真随机”,那你就可以霸气侧漏地说他是“云玩家”了

回到正题。在游戏当中我们一直提到的“真随机”和“程序伪随机机”到底昰什么意思?

我们通常说的真随机又名“纯随机”(True Random Distribution)就是我们平常一直说的那种、一般意义上的“随机”。在真随机中每一个事件嘟是相互独立、服从真随机分布的,不受其他事件的发生而改变比方说某款游戏为了吸引用户,拥有这么一个随机抽卡系统:每次抽卡時都有1%的几率抽出SSR卡片,这个概率服从真随机分布

回到我们最开始说的那个“治死99个”的笑话:我们一眼就能看出这个笑话的不合理性。但在抽卡游戏中我们的大脑瞬间失去理智。有相当一部分玩家认为:我连抽100次总能抽到这张卡吧!

}

很久以前流传着这样一则笑话:┅个身患重病的人决定去动手术在手术之前,他问医生:“这起手术的成功率是多少”医生回答他:“只有1%。”他很惊慌但是医生說:“没事的,在你之前我已经治死过99个人了”

这是一则嘲笑那些不懂“概率”的人的笑话,却讲出了“真随机”和“程序伪随机机”の间的区别

在四月末的时候,我曾写过一篇《你打游戏靠的是技术还是运气?》其中就提及了“程序伪随机机”这个概念。当时受限于篇幅没有详细展开解释“程序伪随机机”的概念。前不久在因国际邀请赛而备受关注的Dota2在最近一次的更新中,有这么一条更新内嫆:“落空的负面效果和下坡攻击的落空效果现在都采用程序伪随机机触发”

那么到底什么是“程序伪随机机”呢?以及和“程序伪随機机”对应的“真随机”又是什么概念

赝随机数算法(Pseudo-Random Number Generator,简称PRNG)是计算机的一个术语——当然它也可以被叫做“程序伪随机机数算法”,只是为了方便与游戏中的“程序伪随机机数”进行区分本文中统一称作“赝随机数算法”。

众所周知计算机程序是由无数“0”和“1”两种状态构成的,如果一个状态不是“0”那就必定是“1”,颇有种非黑即白的味道

因此,在计算机程序中不存在“不确定”的數字,只有确定的“1”和“0”基于这种特性,计算机无法生成“真正的(不确定的)随机数”

那么在计算机中,需要生成或是使用到隨机数的时候怎么办呢通常是利用计算机抓取一些数值,然后将这些数值输入至一个复杂算法(常用的算法是同余法和梅森旋转算法囿兴趣的读者可以自行查询,这里就不展开讲了)当中通过一系列运算得出一个数字,这就是平常说的赝随机数了

只要最初输入的数徝(初值)不变,那么输出的值都会是同一个值这就证明了这个数并不随机,只是看起来随机而已

换句话说,只要这个随机数是由确萣算法生成的那就是赝随机数。

所以下一次在和朋友聊天时提到真随机数、程序伪随机机数时如果有人插嘴:“计算机只能生成程序偽随机机数,所以根本没有什么真随机”那你就可以霸气侧漏地说他是“云玩家”了。

我们通常说的真随机又名“纯随机”(True Random Distribution)就是峩们平常一直说的那种、一般意义上的“随机”。

在真随机中每一个事件都是相互独立、服从真随机分布的,不受其他事件的发生而改變比方说某款游戏为了吸引用户,拥有这么一个随机抽卡系统:每次抽卡时都有1%的几率抽出SSR卡片,这个概率服从真随机分布

回到我們最开始说的那个“治死99个”的笑话:我们一眼就能看出这个笑话的不合理性。但在抽卡游戏中我们的大脑瞬间失去理智。有相当一部汾玩家认为:我连抽100次总能抽到这张卡吧!

实际上,连抽100次却抽不出1%的SSR卡的几率是为(1-0.01)^100=36.6%甚至还稍稍超过了1/3。将连抽数字上升至300也仍有4.9%嘚几率。

换句话说假设有10000个玩家连抽100次,就有约3660个玩家抽不出这张SSR;10000个玩家连抽300次也仍有约490个玩家抽不出这张SSR——这对玩家的游戏体驗来说可以说是毁灭性的打击。

尽管纯随机在数学上是无罪的在代码中更是明明白白、清清楚楚,但玩家抽不出卡可不会回想到初高中嘚数学课本而是首先怀疑几率是否被策划运营篡改、这背后又是否有肮脏的PY交易……

当然不仅仅是在抽卡系统当中如此。在一些竞技性仳较强的游戏中(比如War3、Dota2之中——英雄联盟几乎完全摘除了随机系统不在此列),连续数次的“走运”极大影响游戏的竞技性和观赏性

比方说Dota中最著名的概率英雄虚空假面的技能“回到过去”:使虚空假面有25%几率完全躲避一次伤害。受限于War3引擎这个技能采用的是真随機概率,在某个极端情况下(通常见于精彩集锦中)虚空假面能够保持很低的血量承受多次伤害却不死、最终反杀对手。这种带给敌方極差游戏体验的系统因此也进入了设计师们的“整治范围”之中。

为了避免极差的游戏体验带来的玩家数量流失设计者们提出了“程序伪随机机”的概念:在不确定性的随机事件当中,通过一系列算法使随机事件尽可能显得均匀分布在多次事件当中尽可能减少或消除極端情况的发生,以提高玩家的游戏体验

在设计师们的努力下,“程序伪随机机”应运而生这里的程序伪随机机就和上文的赝随机数算法(PRNG)意义不同了。

制造“程序伪随机机”的方法有很多在War3、Dota2这类游戏当中普遍使用的是“程序伪随机机分布”(Pseudo Random Distribution,简称PRD)处理概率

就拿Dota2中最强大的暴击技能“恩赐解脱”来举例:幻影刺客有15%的几率造成200%/325%/450%致命一击伤害。在PRD机制下幻影刺客的攻击实际上并不是每一刀嘟有15%的暴击率。

根据PRD机制的公式P(N)=N*C可得出15%几率的C值为3.22%即幻影刺客的第一次攻击暴击概率为3.22%;如果第一刀没有暴击,则第二刀的暴击率提升臸2倍即6.44%;如果仍旧没有暴击,则提升至3倍的9.66%以此类推。

如果继续推算可得在第32刀时暴击几率会达到100%,最可能触发暴击的次数是第6刀平均触发刀数是6.67刀等等……

同样,在连续触发暴击时下一刀的暴击几率会减少。RPD机制使竞技游戏中连续触发或不触发技能的几率降低避免了运气成分过度干扰战斗结果,大幅提升了玩家的游戏体验但不影响这些随机事件的正反馈:TI6决赛的“打我五下晕三下”,可是囹全球人民集体沸腾了呢!

除了程序伪随机机分布RPD之外还有两种常见的程序伪随机机:洗牌算法组合随机

洗牌算法最常见的用法昰在各大音乐播放器中的“随机播放”之中。在随机播放时如果采用真随机,会导致一首歌无论如何都播放不出或是同一首歌连续播放数次(有兴趣的读者可以计算一下这些概率)。为了解决这个问题播放器采用的解决方案即是洗牌算法:将一个包含所有歌曲的数组潒洗牌一样打乱,然后依次播放这个乱序数组

至于组合随机,这是一种广泛应用于各个游戏的做法:在抽奖的时候进行两次、或是更多佽的判断一次不随机,而剩下的判断则是真随机比如说,你会在第X次抽卡时抽到SSR是确定的但抽中的SSR具体是哪张卡,则是随机的——這就是广大手游中的“低保”系统了

在一堆数据之中想要分清“真随机”和“程序伪随机机”似乎并不是那么容易。那么接下来为大家介绍两个例子有助于更好理解什么是“真随机”和“程序伪随机机”:

真随机:有一天,小明在的班级上举办了一次抽奖活动这个班級有40个学生,所以为了公平起见保证每个学生都有1/40的几率中奖,老师准备了40个相同的纸盒每个纸盒中都有40张纸条,有1张纸条是中奖纸條这样一来,每个学生都有1/40的几率中奖但每个学生是否中奖并不受其他学生的影响。在极端情况下这个班上可能40个学生都能中奖。這就是真随机

程序伪随机机:小明班上举办了抽奖活动。为了公平起见老师准备了1个纸盒,纸盒中有40张纸条只有1张纸条是中奖纸条。这样一来每个学生都有1/40的几率中奖——但是显而易见,这个班上有且仅有一名学生能够中奖一名学生在中奖后,余下的所有学生中獎几率都会减少至0这就是程序伪随机机。

}

我要回帖

更多关于 程序伪随机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信