2013-10-21 121 views
1

我想寫出下面的Haskell功能,將提供給我的唯一的隨機生成一個列表:Haskell的隨機生成的序列

randomGenerators :: RandomGen g => g -> [g] 

是以下不會造成這樣的局面合理的解決方案「相同」序列在哪裏重複?

randomGenerators g = iterate (fst . split) g 

我明顯丟掉所有發電機的一半,但這會是一個問題嗎?

+0

Erm。人們會很樂意回答這個問題,但這似乎是一個非常糟糕的主意。你真的想做什麼?可能會有更好的方法。 –

回答

3

只要split正確實施(即生成不相關的生成器),這將起作用。 System.Random一個被認爲是強大的(雖然它的執行split包含評論-- no statistical foundation for this!,所以使用它在你自己的風險和測試相關性)。

或者,您可以使用專門設計用於並行批次的RNG。例如,我有一個包Random123,它實現了counter-based generators(目前對性能沒有很好的優化,但可能適合您的目的)。那裏可能還有DCMT library的綁定,或者你可以自己寫。

+0

儘管它確實帶來了一些好處,但如果有人能夠提供確鑿的證據來證明System.Random中存在一個錯誤,我很難相信它不會被及時修復。 – jozefg

+0

@jozefg我不認爲Bogdan暗示有bug。只是沒有人知道'分裂'應該如何表現! (比如,它應該如何保證它的兩個返回的發生器之間的「不同」是如何從輸入?) –

+0

更準確地說,獨立的RNG有一個正式的定義,它只是沒有人在數學上證明了方法在''stdSplit''中使用符合這個定義。應該也可以憑經驗進行測試,但我不知道它是否已完成。 – fjarri