1

我想编写以下 Haskell 函数,它将为我提供一个独特的随机生成器列表:

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

以下是不会造成重复“相同”序列的情况的合理解决方案吗?

randomGenerators g = iterate (fst . split) g

我显然扔掉了一半的发电机,但这会是个问题吗?

4

1 回答 1

3

split只要正确实施(即,如果它产生不相关的生成器),这将起作用。这个System.Random被认为是健壮的(尽管它的实现split包含一个评论-- no statistical foundation for this!,所以使用它需要您自担风险并测试相关性)。

或者,您可以使用专门设计用于并行批处理的 RNG。例如,我有一个Random123实现基于计数器的生成器的包(目前没有很好地优化性能,但可能适合您的目的)。那里可能还有DCMT 库的绑定,或者您可以编写自己的。

于 2013-10-21T04:35:16.093 回答