如何创建随机种子

时间:2014-01-20 21:32:34

标签: r random parallel-processing

假设我将一个R进程分成10个工作程序来运行一些并行模拟。什么是确保每个工人使用不同随机数的可靠方法?我一直在用这个:

myseed <- (unclass(Sys.time())*1e9 * Sys.getpid()) %% 1e9;
set.seed(myseed);

但令我惊讶的是,由于工人之间的RNG冲突,我遇到了问题。这里可能出了什么问题?是否有更好的随机性来源我可以用来为RNG播种?

1 个答案:

答案 0 :(得分:5)

有关如何使用该软件包中的函数完成此操作的详细信息,请参阅vignette("parallel")第6节,这些函数似乎与使用并行的并行运行函数无关。

给出的例子是:

RNGkind("L'Ecuyer-CMRG")
set.seed(<something>)
## start M workers
s <- .Random.seed
for (i in 1:M) {
  s <- nextRNGStream(s)
  # send s to worker i as .Random.seed
}

除了 rstream rlecuyer doRNG 个包> @Simon O'Hanlon在他的评论中提到的包,以及@Dirk提到的 rsprng 包。