隨機數生成(英語: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的概率疊加機制不是唯一的偽隨機分佈機制,常見的還有洗牌算法等。
常見的誤區有:
|
遊戲中常用的隨機數生成算法:
同樣,算法的輸入值(種子)的來源也多種多樣。
常見的種子來源:
這可能便是某些玄學背後的依據。
在遊戲中,這些隨機數能夠決定當中的隨機事件,如暴擊率、命中率、稀有物品出現率。而這些由隨機數生成影響的隨機事件往往不可預測,且能在關鍵時刻影響玩家的成敗。簡單來說,這種與玩家技術無關,又能在關鍵時刻影響遊戲輸贏的遊戲內不確定因素都稱作RNG。
對於一些過於依賴隨機概率的遊戲過法,通常用「RNG成分太多」來形容。這種過法不容易被其他玩家照抄,也不適合成為能面向大眾的攻略。
與之相似的表述還有「玄學」,但這一表述一般用在日系遊戲圈,且更多是指利用特定的場合、時間、行為來提高某一原本比較低的概率的迷信行為。
如果RNG過多,可以使用S/L大法來解決。(偽隨機笑了)(鐵人模式笑了)
在部分遊戲中(如超級馬力歐兄弟、Minecraft等),存在一些機制可以讓玩家影響隨機數生成。如超級馬力歐兄弟的隨機數生成系統與遊戲時間有關。
通過這些機制,玩家可以操縱隨機數,為速通等高難度挑戰降低難度。
在1~100中任選一個數,本次的隨機數字為:19