【发布时间】:2017-03-04 13:37:27
【问题描述】:
在单个 for 循环中,我使用单个随机种子来生成所有“随机数”。它们非常随机,因为我一次从流中取出一个,没有任何间隙。
但是,在 parfor 中,每个工人使用不同的随机种子,因此,获得的数字可能会相互干扰。因此,它们并不是真正随机的,因为它们不是来自单个种子。
另外,就我而言,我不知道每个工人事先需要多少个随机数。我该如何解决这个问题?
【问题讨论】:
-
哇。这将很难。我会做什么:让所有工作人员使用相同的种子,但在创建的大数组上使用不同的数字。想象一下,他们每个人只需要 1 个,然后制作所有例如80 名工人每人创建 80 个随机数,并且只使用一个。或者使用随机数将切片变量传递给工人。是的,这两种方法都有局限性,但是您正在处理一个无法解决的问题
-
查找分布式播种。有很多方法。使用具有不同配置的 MT(有大约 600 个);为此(和自定义代码)还有一篇额外的论文(关于不干扰的强烈论据)。使用具有跳跃能力的 PRNG(例如,跳跃 2^40 个样本)。跨越式等等。
-
@Ander Biguri 谢谢。但每个工人不仅使用 1 个随机数。我不知道每个工人事先需要多少个随机数。
-
@sascha 你的意思是在每个worker上使用MT不同的配置,一个worker的随机数不会干扰另一个worker的随机数吗?
-
@kww 是的。这就是想法。 Here's the approach i mentioned 4, and others based on jumping.