手游综合

什么是“随机”?教你分清“伪随机”和“真随机”

云玩家hotspot
听说你也是个云玩家。

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

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

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

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

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

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

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

420e3a420335b1bb7abe5d974b5f20f79758948d.jpg

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

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

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

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

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

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

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

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

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

336496c43f8fdda2f41b539af04f1f91e68801e0.jpg

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

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

7e3669de975ca3d18db0407cecd08e485001a3c3.jpg

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

6932df5daa9830ce507761da85768bd7f4965b51.jpg

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

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

ed46343eef033884f931eafa4436035dd19b2401.jpg

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

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

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

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

0ba1a532f73c2537b1e7fa965f745f9d74427ba5.jpg

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

971dcd8f0380d81baa8bc6362e7757352bc9e513.jpg

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

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

50107e9119dd3d91db1f13ca6c313f9659a9f13e.jpg

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

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

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

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

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

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

(图片来源于网络)

+ 30 EXP
感谢分享
34
评论
举报
转载需要作者授权
2019/07/19 11:05

评论(18)

独夕
7
1#

太强了

回复
举报
2019/07/19 12:02
风花雪月动人
衣带渐宽终不悔,bug消得人憔悴交流群群号为:798032085
2#

[小电视_吃惊][小电视_吃惊][小电视_吃惊][小电视_赞][小电视_赞]

回复
举报
2019/07/21 11:53
软软豆沙包
(〜 ̄△ ̄)〜
3#

最后两个栗子的标题,建议加上引号“”,显得更严谨

回复
举报
2019/07/23 11:23
六律真是太棒了
现在的游戏真的是越来越无趣了,嗯真的不是我想咕
4#

这也太强了

回复
举报
2019/07/23 11:56
光之御子
╮( ̄▽ ̄)╭
5#

给大佬献上我的膝盖

回复
举报
2019/07/23 12:44
沐凌溪文
哪怕众神在彼岸阻挡,也不会停下前进的脚步
6#

所以说这都是肮脏的py交易[小电视_吃惊]

回复
举报
2019/07/23 13:15
箜ノ夜
(〜 ̄△ ̄)〜
7#

然而讲真,真随机个人而言更喜欢一点,运气也是实力的一部分,不爽不要玩啊╮(╯▽╰)╭

回复
举报
2019/07/23 13:17
大清自有国情在此-
箜ノ夜
2019/07/23 13:26

你玩游戏一定是个欧洲人[小电视_吃惊]

1
回复
举报
风雨为霓夜为裳
(=・ω・=)
8#

很有道理

回复
举报
2019/07/23 14:00
恨满我心
(〜 ̄△ ̄)〜
9#

学到了,我从中得到的信息就是,没有保底的随机就是真流氓,看起来百分之一其实三百分之一都不到。所以没有保底的抽奖都绝对不能碰。感谢大佬!

回复
举报
2019/07/23 15:35
美味金坷垃
( ̄3 ̄)
10#

那明日方舟是真伪随机?

回复
举报
2019/07/23 19:16
箜ノ夜
美味金坷垃
2019/07/24 02:24

方舟是伪随机,技能里面概率触发的都是一定次数固定触发

回复
举报
二报大队
(=・ω・=)
11#

各位大佬你们好,我是一个重装战姬玩家,下面我说的事情你们可能不信,我也只是猜测,但你们可以实验证明一下(至少在上个版本是这样的),在我刷喵刀副本的时候,那我走几乎同一个路线时,出来的都是刀,而我走另外一个路线时,出来的都是挂载,这件事我通过之前三天的实验得出有很大概率是真的,毕竟我是个非酋,具体关键就在于中间首领的那个区域和屏幕右上角的那个区域,站不站领的问题,主要是先打哪个或者哪个区域不占领,并且包括了在这两个敌人之间选一个作为最后结局,貌似都有可能改变你最后的收益,各位大佬可以尽情实验一下,我这边也只是猜测,不喜勿喷。

回复
举报
2019/07/23 23:43
我是通哥是我
(〜 ̄△ ̄)〜
12#

可我就是刷不出薇欧蕾特啊,大佬算下六千赏金不出是什么概率啊

回复
举报
2019/07/24 00:50
赛艇中的华莱士
(。・ω・。)
13#

计算机确实只能生成伪随机数没错啊[小电视_吃惊]虽然可以通过一些方式使他非常接近真随机。后面的东西感觉都是概率论的东西,写的很详细

1
回复
举报
2019/07/24 03:35
洛可可丁
(`・ω・´)
14#

那副本打捞,总会出现某个时间段掉好多限定卡,又或很长时间甚至几天都不掉限定卡,这个算是什么呢?

1
回复
举报
2019/07/24 09:26
安志毅
洛可可丁
2019/08/10 23:16

抽卡伪随机,打捞真随机

回复
举报
幻化之殇
新机师:1/4;泳装:2/15;泳装机甲:0/8;一体机:1/4另一体机:0/4
15#

war3引擎采用真随机实现虚空假面的躲避伤害效果?电脑不可能实现真随机的啊。[小电视_吃惊]

回复
举报
2019/08/10 23:19