假设我将一个R进程分成10个工作程序来运行一些并行模拟。什么是确保每个工人使用不同随机数的可靠方法?我一直在用这个:
myseed <- (unclass(Sys.time())*1e9 * Sys.getpid()) %% 1e9;
set.seed(myseed);
但令我惊讶的是,由于工人之间的RNG冲突,我遇到了问题。这里可能出了什么问题?是否有更好的随机性来源我可以用来为RNG播种?
答案 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 包。