如何创建随机种子

Jer*_*oen 2 random parallel-processing r

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

myseed <- (unclass(Sys.time())*1e9 * Sys.getpid()) %% 1e9;
set.seed(myseed);
Run Code Online (Sandbox Code Playgroud)

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

Rei*_*son 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
}
Run Code Online (Sandbox Code Playgroud)

这小插曲也提到了rstreamrlecuyer包,除了doRNG包,即@Simon奥汉隆提到了他的意见,并rsprng通过@Dirk提到的包.

  • 并行包也有`clusterSetRNGStream`函数,它在一步完成上述操作.我唯一能够看到这个解决方案是不够的,如果每个进程都需要生成2 ^ 127个随机数的倍数,但这似乎不会经常发生. (2认同)