返回 首页 文章详情 搜索 菜单

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

来自: 98游戏 浏览: 2228 次 2022-04-05 21:24:01:04

很久以前流传着这样一个笑话:一个重病的人决定做手术。手术前,他问医生:“这个手术的成功率有多大?”医生回答他:“只有1%。”他慌了,但医生说:“没事。在你之前,我已经杀了99个人。”

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

4月底,我曾经写过一篇文章《玩游戏靠技术还是靠运气?》,其中提到了“伪随机”的概念。当时限于篇幅,没有详细解释“伪随机”的概念。不久前,因国际邀请赛而备受关注的dota2最新更新中,有这样一条更新:“失败的负面效果和下坡攻击的失败效果现在由伪随机触发”。

那么到底什么是“伪随机”呢?而“伪随机性”对应的“真随机性”是什么概念?

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

伪随机数发生器(prng)是一个计算机术语——当然也可以叫“伪随机数算法”,只是为了方便与游戏中的“伪随机数”相区分,在本文中称为“伪随机数算法”。

众所周知,计算机程序是由无数个“0”和“1”状态组成的。一个状态不为“0”就一定为“1”,相当黑白分明。

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

所以在计算机程序中,没有“不确定”的数字,只有确定的“1”和“0”。基于这一特性,计算机无法生成“真实的(不确定的)随机数”。

那么在计算机中,当我们需要生成或者使用随机数的时候应该怎么做呢?通常是用计算机捕捉一些数值,然后将这些数值输入到一个复杂的算法中(常用的算法有同余法和梅森旋转算法,有兴趣的读者可以自行查询,这里就不讨论了),通过一系列运算得到一个数,也就是俗称的伪随机数。

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

换句话说,只要这个随机数是用确定性算法生成的,就是伪随机数。

所以下次你和朋友聊天提到真随机数和伪随机数的时候,如果有人打断你:“电脑只能生成伪随机数,所以根本没有什么真随机”,那你就可以狂妄地说他是“云玩家”了。

回到正题。我们说的游戏中的“真随机性”和“伪随机性”是什么意思?我们通常所说的真随机,也叫“真随机分布”,就是我们一直所说的一般意义上的“随机”。

在真随机中,每个事件都是相互独立的,服从真随机分布,不被其他事件改变。比如一个游戏为了吸引用户,有这样一个随机抽卡系统:每抽一张卡,就有1%的机会抽ssr卡,这个概率服从真随机分布。

我们再回到开头说的那个“杀99人”的笑话:这个笑话的不合理性我们一眼就能看出来。但是在抽牌游戏中,我们的大脑会瞬间失去理智。相当一部分玩家认为:我连续100次之后总能抽到这张牌!

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

实际上,连续抽100次抽不出1% SSR卡的概率是(1-0.01) 100 = 36.6%,甚至略多于1/3。即使数字提高到300,还是有4.9%的几率。

换句话说,假设一万个玩家连续抽100次,大概有3660个玩家抽不到这个ssr;在一万名玩家连续抽了300次之后,仍然有大约490名玩家抽不到这个SSR——这可以说是对玩家游戏体验的毁灭性打击。

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

虽然纯粹的随机性在数学上是无罪的,在代码中更是清晰明了,但是拿不到牌的玩家不会回想初高中的数学课本,而是先怀疑赔率是否被策划和操作篡改过,背后是否有肮脏的py交易...

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

当然不仅仅是在抽卡系统里。在一些竞技游戏中(比如war3和dota 2——英雄联盟几乎完全去掉了随机系统,不在此列),接连不断的“幸运”时间极大地影响了游戏的竞技性和观赏性。

比如dota中最著名的概率英雄无脸虚空的技能“回到过去”:给予无脸虚空25%的几率完全避免一次伤害。受war3引擎限制,该技能采用真随机概率。在一些极端的情况下(通常在集锦中看到),无脸虚空可以保持很低的血量,承受多处伤害却不死,最终杀死对手。这个给敌人带来非常差的游戏体验的系统,也进入了策划者的“整治范围”。

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

为了避免游戏体验不佳给玩家带来的损失,设计者提出了“伪随机”的概念:在不确定的随机事件中,利用一系列算法将随机事件均匀分布在多个事件中,尽可能减少或消除极端情况的发生,从而提高玩家的游戏体验。

在设计师的努力下,“伪随机”应运而生,这里的伪随机不同于上面的伪随机数算法(prng)。

“伪随机”的制作方法有很多种,“伪随机分布”(prd)在war3、dota2这样的游戏中被广泛使用。

以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,还有两种常见的伪随机:洗牌算法和组合随机。

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

至于组合随机,这是各种游戏中广泛采用的做法:在抽奖中做出两个或两个以上的判断,一个不是随机的,其余的都是真随机。比如在X卡抽牌中你会抽ssr是肯定的,但是抽哪张卡ssr是随机的——这就是广大手游中的“低保”制度。

在一堆数据中区分“真随机性”和“伪随机性”似乎不是那么容易。那么,这里有两个例子可以帮助你更好地理解什么是“真随机性”和“伪随机性”:

真随机:有一天,小明在班里举行抽奖。这个班有40个学生,所以为了公平起见,保证每个学生都有1/40的获奖机会。老师准备了40个一模一样的纸盒子,每个纸盒子里有40张纸条,一张纸条就是中奖纸条。这样每个学生都有1/40的机会获奖,但是每个学生是否获奖不受其他学生的影响。极端情况下,这个班可能有40个学生能得奖。这真的是随机的。

伪随机:小明的班级举行了抽奖。为了公平起见,老师准备了一个纸盒子,里面有40张纸条,只有一张纸条是中奖纸条。这样每个学生都有1/40的机会得奖——但很明显这个班只有一个学生能得奖。一个学生中奖后,其余所有学生的中奖几率将降为零。这是伪随机的。

以上就是98游戏小编为大家带来的全部内容,想了解更多精彩请持续关注本站。

网友评论

写下您的评论

还没有玩家发表评论,快来抢占沙发吧!