我想写下面的Haskell函数,它将为我提供一个独特的随机生成器列表:
randomGenerators :: RandomGen g => g -> [g]
以下是否是一个合理的解决方案,不会产生重复“相同”序列的情况?
randomGenerators g = iterate (fst . split) g
我显然扔掉了所有发电机的一半,但这会有问题吗?
答案 0 :(得分:3)
如果split
正确实现(即,如果它生成不相关的生成器),这将有效。 System.Random
一个被认为是健壮的(尽管split
的实现包含注释-- no statistical foundation for this!
,因此请自行承担风险并测试相关性。)
或者,您可以使用专门设计用于平行批次的RNG。例如,我有一个包Random123
来实现counter-based generators(目前还没有很好地优化性能,但可能适合您的目的)。那里可能还有DCMT library的绑定,或者你可以编写自己的绑定。