雪のクラスターでパッケージ RcppZiggurat の RNG を使用しようとしています。各ノードで RNG をシードするには、clusterSetupRNG に組み込まれている L'Ecuyer のアルゴリズムを使用します。ただし、乱数のシーケンスは各ノードで同じであることが判明しました。clusterSetupRNG コマンドなしで実行しても、コードの結果はまったく同じままです。
これが私が試したことです:
library(RcppZiggurat)
library(snow)
myFun <- function(i){
rn <- zrnormLZLLV(10)
return(rn)
}
nodes <- rep("localhost",2)
cl <- makeCluster(nodes, type="SOCK")
vars <- list("zrnormLZLLV")
clusterExport(cl=cl,list=vars,envir=environment())
clusterSetupRNG(cl=cl,type="RNGstream")
res <- parLapply(cl,c(1,2,3,4),myFun)
res
どうすればこれを機能させることができるか考えている人はいますか? もちろん、いつでも標準の RNG rnorm に頼ることができますが、クラスタでも RcppZiggurat の速度が得られると便利です。
助けてくれてどうもありがとう!