2015-10-07 37 views
-1

我有一個作業問題,運行一個模擬,我生成100個隨機數並對每個結果進行計算。下一個問題要求我重複一遍上一個問題,但使用不同的僞隨機數字流。附註告訴我要在對程序的一次調用中執行兩次計算,因爲更改種子/狀態隨機可能導致重疊的流。不同流的僞隨機數

有人可以向我解釋這是什麼意思?爲什麼我必須通過1循環來完成? 爲什麼我不能每次使用不同的種子調用相同的代碼兩次?

回答

1

僞隨機數發生器(PRNG)通過對一些內部信息(稱爲發生器狀態)的確定性計算集進行迭代工作,然後向您返回基於狀態的值。有限的狀態信息決定了下一個狀態,從而決定下一個結果。由於它是有限的,最終生成器將重新訪問之前使用的狀態,並且從該點開始,所有值都將與您已經看到的序列完全重複。據說PRNG已經循環。 「播種」隨機數發生器設置狀態的起始點,因此它實際上對應於選擇循環的入口點。

如果人類通過任意改變種子進行干預,他們可能會過早地將狀態置回輸出序列的某些部分重複重複的地方。這被稱爲重疊流。解決的辦法是種一次PRNG,然後不要惹它,這樣可以實現完整的循環。

在你的情況下,它意味着你的第一組100號的價值觀和訂貨會從你的價值觀不同,並訂購您的第二組的100

+0

多久是這個週期的? .setSeed(n)(其中n是一個自然數)對於n的不同值總是會有所不同嗎? – user2770287

+0

播種的週期和細節取決於PRNG的100%。對於很多[線性同餘發生器](https://en.wikipedia.org/wiki/Linear_congruential_generator),週期約爲2^31。對於Java內置的Random,大約是2^48。對於[Mersenne Twister](https://en.wikipedia.org/wiki/Mersenne_Twister),它是2^19937 - 1。 – pjs