随机数生成
基本资料 | |
用语名称 | Random Number Generation 随机数生成 |
---|---|
其他表述 | RNG、随机因素、随机概率、运气因素 |
用语出处 | 游戏术语 |
相关条目 | 玄学、伪随机 |
随机数生成(英语:Random Number Generation),或随机数生成器(英语:Random Number Generator),简称RNG,是一个游戏术语。主要在欧美游戏圈中使用。
简介
本义是指一种产生随机数的方式。
原理
随机数,顾名思义,是一种完全无序的数,后面的数与前一次生成的数毫无关系。一般的,由于计算机算法的确定性,计算机无法在没有外来输入(包括时间输入)时生成随机数,只能基于当前状态(随机种子)生成一个“看上去”是随机的序列。这种随机数序列被称作伪随机数。
计算理论中对伪随机数的定义是:
如果一个分布可以做到,在同级别的攻击者无法有效地分清这个分布和平均分布,那么这个分布是一个伪随机分布。
A distribution is pseudorandom against a class of adversaries if no adversary from the class can distinguish it from the uniform distribution with significant advantage.[1]
真正的随机数一般是使用物理现象产生的:比如抛硬币、CPU的温度和电流变化、手机的加速度、原子衰变等。这样的方法被称做物理性随机数生成器。这种生成器使用较为复杂,一般只用在生成少量随机数的场合。在需要大量产生随机数的场合,可以用它为伪随机数生成器提供种子,以制造出难以进行密码学分析的(多个混杂在一起的)伪随机数序列。
“伪随机数”一词的常见误用 |
---|
在计算机领域,“随机性”可以根据对其进行分析的难度区分级别。如果分析需要的计算强度超过了观测者的处理能力,则可以视为是随机的。 一般的随机数生成器足以应对日常使用需求。密码学需要更安全的随机数生成器。最安全的随机数来自自然界中的混沌现象和量子物理学效应。 DOTA玩家将DOTA中的随机分布生成机制称为“伪随机”,然而在数学角度来说,它应当称为“伪随机分布(Pseudo Random Distribution,PRD)”或者“伪随机数采样(Pseudo-random number sampling)”,也就是基于一个普通的伪随机数生成器,生成一个非常规的概率分布。DOTA中将其称为“随机分布(Random distribution)”。其机制为[2]:
$$P(X_k) = (1-C) \, (1 - 2 \, C) \, ... \, (1 - (k-1) \, C) \, k \, C = k! \, C \, \prod_{i=1}^{k-1}(\frac{1}{i} - C)$$
其数学性质有:
对比:当概率为$25\%$时,DOTA分布(DOTA2)与二项分布的差异。对比“在一次事件发生后(累积概率补偿归零后),下一次触发事件是第几次”,DOTA分布(蓝色)比二项分布(橙色)更为集中,也就是概率造成的波动幅度更小,且没有长尾——最大次数为$10$次,如果$9$次判定不通过则第$10$次必定通过。
在这种机制下,“垫刀”是有意义的行为。连续N次无影响的、可重复事件中的判定失败,可以大大增加下一次有意义事件的判定成功率。例如,先去砍小兵几刀,等发生连续几刀不出爆击的事件后,再去进行gank,则第一刀会有很高的暴击率。 其他游戏中也可能存在类似的带有补偿的随机数机制。DOTA的概率叠加机制不是唯一的伪随机分布机制,常见的还有洗牌算法等。
常见的误区有:
|
实现方式
游戏中常用的随机数生成算法:
- 无种子值
- 随机数表[3](随机数列)
- 有种子值
- 线性同余算法
- 梅森旋转法
- 平方取中法
- 哈希算法
同样,算法的输入值(种子)的来源也多种多样。
常见的种子来源:
- 由用户决定
- 手动输入(例如我的世界地图生成)
- 鼠标的移动轨迹
- 键盘的按键统计
- 触摸屏点击区域的XY坐标值
- 不由用户决定
- 系统时间[4]
- 地图经纬度坐标(如Pokemon GO)
- 随机数表循环叠加
量子效应
这可能便是某些玄学背后的依据。
应用
在游戏中,这些随机数能够决定当中的随机事件,如暴击率、命中率、稀有物品出现率。而这些由随机数生成影响的随机事件往往不可预测,且能在关键时刻影响玩家的成败。简单来说,这种与玩家技术无关,又能在关键时刻影响游戏输赢的游戏内不确定因素都称作RNG。
对于一些过于依赖随机概率的游戏过法,通常用“RNG成分太多”来形容。这种过法不容易被其他玩家照抄,也不适合成为能面向大众的攻略。
与之相似的表述还有“玄学”,但这一表述一般用在日系游戏圈,且更多是指利用特定的场合、时间、行为来提高某一原本比较低的概率的迷信行为。
如果RNG过多,可以使用S/L大法来解决。(伪随机笑了)(铁人模式笑了)
在部分游戏中(如超级马力欧兄弟、Minecraft等),存在一些机制可以让玩家影响随机数生成。如超级马力欧兄弟的随机数生成系统与游戏时间有关。
通过这些机制,玩家可以操纵随机数,为速通等高难度挑战降低难度。
实例
- 在回合制游戏的某个残局中,在你的回合,你有50%的概率命中敌人,如果命中则敌人被杀死,通关。但如果没有命中,则你的回合结束,敌人会在他的回合将你杀死,导致游戏结束。
- 《明日方舟》中,游戏通过固定种子,确保“代理作战”中概率事件状况与初次通关时一致。但由于未将敌方单位技能、入场触发技能等纳入该随机数生成体系,特定关卡中“代理作战”趋于失效。然而它作为日系游戏,玩家不会用RNG来代指这种运气成分。相反,在同为塔防类的欧美风游戏《气球塔防》《王国保卫战》系列的玩家群体中才能见到这样的表达。
- 《Minecraft》中,由于游戏源代码基本被破解,特定版本条件下,通过随机数生成推算相关的程序的辅助,玩家可以相当稳定地操纵随机数生成。这一技术广泛使用在附魔等具有随机属性的增益领域。事实证明,伪随机的确是伪随机
ACG中的相关人物
- 克莉丝提娜·摩根(公主连结Re:Dive)--拥有权能“
乱数圣域( )“(Numbers Avalon),具有“绝对命中和绝对回避”的能力。其原理是通过控制系统的伪随机数,以此改变游戏世界中的命中、暴击和闪避率等,或是计算出对手的行动轨迹,并快速予以应对。
衍生用语
- RNGsus(RNG Jesus):随机之神。在决定胜负的关键时刻,可以祈求他来为玩家带来好运。于是在欧美玩家群体中,诞生了“在游戏中下注前要向RNGsus祈祷”的说法。
随机数计算
在1~100中任选一个数,本次的随机数字为:12