哈斯克尔随机生成器的序列



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

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

以下解决方案是否是一个合理的解决方案,不会造成重复"相同"序列的情况?

randomGenerators g = iterate (fst . split) g

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

这将起作用,前提是正确实现split(也就是说,如果它产生不相关的生成器)。System.Random被认为是健壮的(尽管它的split实现包含注释-- no statistical foundation for this!,因此使用它需要您自担风险并测试相关性)。

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

最新更新