套用[編輯]
梅森旋轉算法是R、Python、Ruby、IDL、Free Pascal、PHP、Maple、Matlab、GNU多重精度運算庫和GSL的默認偽隨機數產生器。從C++11開始,C++也可以使用這種算法。在Boost C++,Glib和NAG數值庫中,作為外掛程式提供。
在SPSS中,梅森旋轉算法是兩個PRNG中的一個:另一個是產生器僅僅為保證舊程式的兼容性 ,梅森旋轉被描述為“更加可靠”。梅森旋轉在SAS中同樣是PRNG中的一個,另一個產生器是舊時的且已經被棄用。
優點
最為廣泛使用Mersenne Twister的一種變體是MT19937,可以產生32位整數序列。具有以下的優點:
周期非常長,達到2−1。儘管如此長的周期並不必然意味著高質量的偽隨機數,但短周期(比如許多舊版本軟體包提供的2)確實會帶來許多問題。
在1 ≤k≤ 623的維度之間都可以均等分布(參見定義)。
除了在統計學意義上的不正確的隨機數生成器以外,在所有偽隨機數生成器法中是最快的(當時)
1.周期非常長,達到2−1。儘管如此長的周期並不必然意味著高質量的偽隨機數,但短周期(比如許多舊版本軟體包提供的2)確實會帶來許多問題。
2.在1 ≤k≤ 623的維度之間都可以均等分布(參見定義)。
3.除了在統計學意義上的不正確的隨機數生成器以外,在所有偽隨機數生成器法中是最快的(當時)
缺點
為了性能,這個算法付出了巨大的空間成本(當時而言):需要 2.5KiB的快取空間。2011年,松本真和西村拓士針對這一問題提出了一個更小的版本,僅占127 bits的 TinyMT (Tiny Mersenne Twister)。
算法詳細
整個算法主要分為三個階段:
第一階段:獲得基礎的梅森旋轉鏈;
第二階段:對於旋轉鏈進行旋轉算法;
第三階段:對於旋轉算法所得的結果進行處理;
算法實現的過程中,參數的選取取決於梅森素數,故此得名。
相關代碼
下面的一段偽代碼使用MT19937算法生成範圍在[0, 2−1]的均勻分布的32位整數:
偽代碼
Python 代碼
調用函式MT19937( seed).extract_number()將會返回隨機數,其中 seed是已確定的種子。