(搬运/侵删)随机与概率那点事《什么是随机》篇——拜托不要再说『伪随机』了
2021/06/22116 浏览萌新求助
(搬运自米游社)
本文是《随机与概率那点事》系列中的一篇,主要介绍了『随机』的基本概念,并对mys中经常出现的混用、误用、歧义进行说明。
本文主要包括以下几个部分:
1. 随机的含义
2. 不同领域中的『随机』概念
3. 对随机的一些误解
4. 原神中的随机
5. 总结
随机的含义一说到『随机』,相信所有人都知道大概是什么意思,但如果要深究到底什么才是随机,它的定义是什么,如何判断一个过程是否随机,什么是真随机/伪随机,可能很多人就不那么清楚了。
『随机』这个词,特别是所谓『真随机/伪随机』,在不同的领域中其含义其实是有很大差异的。在日常的各种讨论中,时常会看到不同的人口中的『随机』所代表的含义完全不是一回事,各人在不同的频道上鸡同鸭讲。
我们平时说到『随机』,到底是在说什么?答案是:不可预测 + 概率分布。
前者是显而易见的,如果一个随机过程,我们能够准确预测它的结果,那么,显然它不能算是随机,或者说,至少是一个非常失败的随机。
而后者,很多人可能不太在意,但这同样重要,『随机』不代表没有规律,当样本空间足够大的时候,随机是要服从一定的概率分布的,不论是人为设定的概率还是『上帝』设定的概率。
不同领域中的『随机』概念作为原神的玩家,我们会谈到『随机』概念的领域,主要有三种:现实、程序、游戏。
现实世界在自然界中,关于我们的世界到底是否存在真随机,这是一个哲学概念。
在机械论者、决定论者眼中,宇宙在最初时的所有参数确定后,后续发展就是注定的,不存在任何真正意义上的随机,包括在量子力学中,我们观测到的不确定性只是由于我们还没有掌握全部的参数和规律,也就是存在所谓的『隐变量』。但是,这个理论目前已经被证明存在巨大的问题,也不是物理学届的主流观点。
目前多数认同的,是『上帝确实会掷骰子』,现实世界中到处都是『真随机』。
即使我们不认同『世界底层是真随机的』,仅仅看看我们的宏观世界,也是复杂到集全人类之力都无法精确预测的。根据混沌理论可知,在这种非线性复杂系统中,即使初始条件中极其细微的差异,在一段时间之后也会产生天差地别的结果,这个演化的过程是确定的、无随机的,但是想对这个演化结果进行精确预测,所消耗的计算资源是尽乎无穷的。最典型的例子应该就是三体运动了。
所以,我们的宏观世界,(在不承认微观世界随机性的前提下)属于理论上可预测,但实际上不可能预测的,同时整体上又遵守大数定律和各种客观规律,可以算是一种通过非随机手段达成随机结果的『伪随机』。(现实世界中没有伪随机的概念,但此场景与程序中对伪随机的定义非常相似,也将其归入伪随机一类)
综合以上两种,不论现实世界到底是真随机还是伪随机,至少目前全人类都是无法精确预测的,我们可以认为,现实世界对于我们所有人而言,都是完美的随机。
程序世界在程序世界中,随机的概念又不同于现实世界。
我们在日常讨论时经常会看到有人说『程序世界没有真随机,只有伪随机』,那么这句话到底对不对呢?
在冯氏体系下,抛开神经网络之类的东西不谈,传统的算法都是『确定性』的东西,算法本身无法产生真随机,只能是根据随机种子,通过一系列数学计算产生近似随机效果的数列,只要知道算法和种子,就可以预测所有随机结果,所以确实可以说,程序无法凭空产生真随机,只能在用户不知道随机种子的情况下来实现伪随机的效果。
但是,程序世界并不是没有真随机的,因为,随机种子是可以来自现实世界的。
上面我们已经说过,现实世界,对人类而言,就是完美的随机,在程序世界中,现实世界的随机可以视为真随机,所以我们通过各种方法(比如噪声池)从自然界获取真随机的种子,再用这个种子来生成随机数列,这样最终得到的结果就是真随机了。
大家有兴趣的可以访问一下这个网站:random.org,这个网站提供了很多免费和收费的随机功能,并且,这个网站生成的所有随机结果,全部是真随机。
当然,在绝大多数的场景下,我们都是使用伪随机,而非真随机。
一方面是因为真随机种子的获取成本远高于伪随机(指的不是钱,而是说同一台设备,可能一秒能产生上亿个伪随机数,却未必能产生出一个真随机数),另一方面也是因为多数场景下伪随机的不可预测性已经足够满足需求了。
另外,对于大型网游,当同时在线的玩家数量足够多的时候,即使服务端使用伪随机,对单个玩家而言,也可以视为真随机了,因为不同玩家各种行为产生的与服务端的交互这其实是属于现实世界的随机行为了,当一个伪随机数列被大量玩家轮流消耗时,每个玩家是不可能预测到自己的随机结果的。
游戏世界
在游戏世界中,随机的概念又发生了一些变化。
很多非洲玩家在大骂概率有假,认为不是真随机时,他们不知道正是因为过于『真随机』才产生了这么多非洲人;而另一些玩家谈到原神抽卡是『伪随机』,在73抽后会提升概率,他们口中的『伪随机』也和程序世界中的伪随机完全不是一回事;如果再碰到一个喊着『程序只有伪随机』的玩家,大家的讨论很容易就会一片混乱。
在游戏世界中,讨论程序上的真随机还是伪随机基本没有意义,任何一个不算太失败的随机实现,不论它是真随机还是伪随机,玩家是完全无法感知也无法验证的,通常也是根本不关心的。玩家在讨论游戏的随机时关注的是什么?是每一次随机的结果到底是什么概率,有没有与明面概率不一致的情况(包括保底概率提升或仓检概率降低)。
个人认为,在游戏中,真随机指的是固定概率的随机(无保底的随机),伪随机指的是动态概率的随机(有保底或有仓检的随机)。
两者的主要区别就是,前者就只知道一个概率,每次都是独和谐立重复试验,完全的随机;而后者,是有一定的可预见性的,虽然不能精确预测,但玩家在临近保底时总是会知道自己很有可能要出金了。
这里要说明的是,固定概率的随机是实现成本非常低的,而动态概率的随机则是需要专门去设计和开发的,策划、数值策划、开发、测试、客服等一堆人都会增加工作量,程序也更容易出bug,这些都是风险和成本,通俗点说就都是钱,如非必要则不会使用。
对随机的一些误解连续这么多次都XXX,脸也太黑了,这肯定不是真随机玩家这句话中的『真随机』指的显然是游戏世界的固定概率随机。
很多人以为,真随机就应该非常平均,大家都差不多,如果自己特别非就说明这随机有问题,不是真随机。但实际上,正因为是真随机,才会产生各种极端情况,诞生欧皇非酋,而动态概率的随机正是为了避免极端情况,让大家即使非也不至于非得过于离谱(同时也会压制欧皇,但超级欧皇该欧还是能欧)。
游戏里都是伪随机会说这句话的有两类人:
第一类人,听说一个『程序都是伪随机』就直接套用了,且不说这句话本身就不完全正确,单是在游戏世界中纠结程序层面上是真随机还是伪随机就是一件没有意义的事情。
另一类人,想表达的是游戏里肯定会使用动态概率随机,有各种保底和仓检机制,不会直接使用固定概率随机。但实际上,游戏中有相当多的地方都是直接使用固定概率随机的,只有那些极端情况下会非常影响游戏体验导致玩家怒而退游的地方,才会加上保底。
哪怕是同样的东西,在不同游戏里,随机的方式也是不同的,会根据其对玩家体验和游戏核心玩法的影响来决定是否有必要花费额外的成本来搞动态概率随机。
以『暴击率』为例:
在需要严谨的竞技类游戏中,为了避免运气过于影响战局,通常都会使用保底机制来保证欧皇和非酋的实际暴击率都别偏离面板数据太远,比如WAR3、DOTA2、LOL等游戏中,均使用了PRD机制,假设面板暴击率是25%,则首刀的暴击率可能只有8.5%,如果不暴击,则不断提高下一击的暴击率到17%、25.5%、34%,最终可达到100%必暴的效果,而这过程中,只要出了一次暴击,立刻就会重置,下一击的暴击率又会降到最初的8.5%,这种机制,一方面压制了欧皇,很难刀刀暴击,甚至连续暴击都较难,也避免了非酋一直不暴击的悲剧,大家都会处于不欧不非的中间水平,同时,这些数值经过设计,整体的平均暴击期望和面板的暴击率是一致的。
在原神中,则又不一样,因为是单机游戏,没有任何直接PVP,所以并不需要过于严谨,所以暴击就直接使用了固定概率的随机,并没有加保底机制,所以,运气的表现就会很明显,时不时就会有人吐槽说80%暴击还连续很多刀不暴击。(而在很多竞技类游戏中,80%的暴击率可以保证绝对不会出现连续两刀不暴击的情况)
大数据统计出来分布一点都不均匀,肯定不是真随机固定概率随机,不代表就是等概率随机,也可以是带权重的固定概率随机,比如40%概率出A,60%概率出B。
原神中的随机原神中有相当多的随机过程,可以将它们按照固定概率和动态概率大致分一下类:

可以看到,多数简单场景都是使用的固定概率随机,毕竟成本更低,而且,通常会毒死玩家的也都是这些固定概率随机的地方。
总结随机的核心是:不可预测 + 概率分布。
所谓『真随机/伪随机』都是程序世界的概念,其实在现实世界和游戏世界中都不存在。
我们在原神中讨论随机,只需要关注游戏世界中的随机概念,谈论现实世界和程序世界的随机概念及原理是没有意义的。
个人建议,在讨论时,不要使用真随机/伪随机这种容易产生歧义的措辞,而是使用固定概率随机/动态概率随机/有保底的随机之类更准确的措辞。
