【问题标题】:Sequence of Haskell's Random GeneratorsHaskell 随机生成器的序列
【发布时间】:2013-10-21 12:35:16
【问题描述】:

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

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

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

randomGenerators g = iterate (fst . split) g

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

【问题讨论】:

  • 呃。人们会很乐意回答这个问题,但这似乎是一个非常糟糕的主意。你真正想做什么?可能会有更好的方法。

标签: haskell random


【解决方案1】:

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

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

【讨论】:

  • 虽然它确实带来了一些好处,但如果有人可以提供 System.Random 中的错误的确凿证据,我很难相信它不会及时修复
  • @jozefg 我不认为 Bogdan 暗示存在错误。只是没有人知道split 应该如何表现! (例如,对于两个返回的生成器彼此之间的“不同”程度,它应该提供什么保证?来自输入?)
  • 更准确地说,独立RNG有一个正式的定义,只是没有人在数学上证明stdSplit中使用的方法符合这个定义。也应该可以根据经验对此进行测试,但我不知道是否已经完成。
猜你喜欢
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多