隨機數生成
基本資料 | |
用語名稱 | 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中任選一個數,本次的隨機數字為:25