蒙特卡羅
用於 Monte Carlo Sim 的 Java 中的 Mersenne twister 隨機數生成器。
我在 Java 中使用 Mersenne twister 隨機數生成器進行蒙特卡羅模擬。我需要在 -1 和 1 之間均勻分佈值。我的程式碼如下(我正在導入org.apache.commons.math.random.MersenneTwister,這是一個包含我正在呼叫的方法的 Apache Commons 庫)。
for(int i = 0; i<= NumberOfTrials-1; i++ ) { MersenneTwister mtsign = new MersenneTwister(); boolean sign = mtsign.nextBoolean(); // random true or false MersenneTwister mt = new MersenneTwister(); if (sign=true){ random[i] = mt.nextDouble(); } //i.e. (random number between 0 and 1) else if (sign=false){ random[i] = - mt.nextDouble(); } // i.e. random number beween -1 and 0 }
random[]
由於某種原因,結果數組 的每個索引都包含相同的值(並且所有索引都是正的,因為布爾值一直返回 true)。非常感謝任何想法/建議。
問題是您正在為每次迭代創建一個新的隨機數生成器。跳出
new MersenneTwister()
循環:MersenneTwister mtsign = new MersenneTwister(); MersenneTwister mt = new MersenneTwister(); for(int i = 0; i<= NumberOfTrials-1; i++ ) { // use mtsign and mt here ... }
此外,您不需要兩個生成器,您可以重新縮放:
MersenneTwister mt = new MersenneTwister(); for(int i = 0; i<= NumberOfTrials-1; i++ ) { random[i] = mt.nextDouble() * 2 - 1; }
最後,在您的程式碼中,您可能需要將生成器推到呼叫樹的更深處,以避免重複生成相同的序列。