真隨機數和偽隨機數


3樓貓 發佈時間:2024-03-05 22:32:24 作者:jch3601212 Language

在遊戲開發中,隨機數生成器(Random Number Generator, RNG)是一個非常重要的組件,用於創建各種隨機性的元素,包括但不限於:地圖生成:在一些遊戲中,地圖是動態生成的,隨機數生成器可以用來確定地形、地貌、資源分佈等,以確保每次遊戲的地圖都是獨一無二的。敵人生成:遊戲中的敵人、怪物或者其他對手的位置、屬性、行為等可以通過隨機數來決定,使得每次遊戲的對戰體驗都有所不同。物品掉落:在角色扮演遊戲(RPG)等類型的遊戲中,隨機數生成器可以用來決定敵人掉落的物品、裝備等,增加遊戲的可玩性和挑戰性。事件觸發:一些遊戲中會有各種隨機事件發生,如天氣變化、特殊事件觸發等,隨機數生成器可以決定這些事件何時發生以及具體的效果。玩家體驗:隨機數也可以用來增加玩家的體驗多樣性,比如在一些遊戲中,NPC 的對話內容、交易價格等可以通過隨機數生成,使得每次遊戲的交互都有所不同。在實際應用中,可以使用兩種類型的隨機數生成器:真隨機數生成器和偽隨機數生成器。真隨機數生成器(TRNG):真隨機數是通過物理過程生成的,比如量子現象、熱噪聲等。TRNG 通常基於硬件設備,如硬件隨機數發生器(HRNG),其輸出結果是完全不可預測的,並且在理論上是不可重複的。偽隨機數生成器(PRNG):偽隨機數是通過算法生成的,其輸出結果是由初始種子(seed)確定的,因此在給定相同的種子的情況下,PRNG 會產生相同的序列。雖然偽隨機數並不是真正的隨機數,但在大多數情況下,它們足夠隨機以滿足遊戲開發的需求。在實際開發中,開發者需要根據遊戲的需求和性能要求選擇合適的隨機數生成器。例如,在對安全性要求較高的遊戲中,可以選擇使用硬件隨機數生成器;而對於大多數普通遊戲,偽隨機數生成器通常是更常見的選擇,因為它們易於實現並且能夠提供足夠的隨機性。
偽隨機數的實現比較簡單
Python 中的 random 模塊使用的是偽隨機數生成器(PRNG),主要基於梅森旋轉算法(Mersenne Twister)。
梅森旋轉算法是一種高質量的偽隨機數生成器,它在生成隨機數時具有良好的性能和統計特性。該算法的原理如下:
  1. 種子生成:在使用隨機數生成器之前,需要提供一個種子(seed),它可以是任何整數。如果不指定種子,默認使用當前系統時間作為種子,這樣可以保證每次運行程序時,生成的隨機數序列都是不同的。
  2. 偽隨機數生成:一旦有了種子,隨機數生成器就會根據該種子按照特定的算法生成一個隨機數序列。梅森旋轉算法採用了一個長週期(2^19937 - 1)的線性同餘發生器,該算法的週期非常長,意味著在不重複的情況下可以生成大量的隨機數。
  3. 隨機數提取:在需要隨機數的時候,隨機數生成器會從生成的隨機數序列中提取一個隨機數返回。每次提取都會影響下一次的結果,因此每個隨機數都是獨立且隨機的。
需要注意的是,由於梅森旋轉算法是確定性的,因此在給定相同的種子的情況下,生成的隨機數序列是相同的。這在某些情況下可能是有用的,例如在調試時需要重現問題。但在一般情況下,為了確保隨機性,建議使用不同的種子。
總的來說,Python 中的 random
模塊提供了一個方便而高效的工具,用於生成各種類型的隨機數,基於梅森旋轉算法的偽隨機數生成器保證了生成的隨機數具有良好的質量和統計特性。
很多偽隨機數發生器的種子會取系統時間,也怪不得會在網上看到一些說法:例如每天什麼時刻在遊戲地圖的哪個地方做裝備,出極品概率高,哈哈。
真隨機數發生器的實現則需要藉助特定的芯片。如果是高端服務器,則會在服務器的CPU內置真隨機數發生器,真隨機數發生器通過集成電路內部專門設計的TRNG電路,採集芯片內晶體管的熱噪聲、或者使用混沌電路、還可以使用數字電路的亞穩態現象來產生真隨機數。這些現象目前還不存在被建模的可能,沒這個能力。。。
如果是一般的服務器,或者個人電腦想要使用真隨機數發生器,就需要藉助外置的使用專用TRNG芯片的硬件真隨機數發生器設備了。有USB接口的也有PCIE接口的,這個取決於你需要多快的速度,一般USB接口的最多也能到240M比特每秒的速度,對於一般的遊戲應用完全夠了。別問我為什麼知道,因為我就是做真隨機數發生器芯片的,哈哈哈哈。

© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com