當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R RNGstreams Pierre L'Ecuyer 的 RngStreams 的實施


R語言 RNGstreams 位於 parallel 包(package)。

說明

這是個R重新實現 Pierre L'Ecuyer's ‘RngStreams’ 多個偽隨機數流。

用法

nextRNGStream(seed)
nextRNGSubStream(seed)

clusterSetRNGStream(cl = NULL, iseed)
mc.reset.stream()

參數

seed

長度為 7 的整數向量,如下所示.Random.seed當。。。的時候 '⁠"L'Ecuyer-CMRG"⁠’RNG 正在使用中。看RNG為有效值。

cl

此包或包 snow 中的集群,或(如果 NULL )已注冊集群。

iseed

要提供給 set.seedNULL 的整數,以不設置可重現的種子。

細節

“RngStream”接口(可能)使用多個偽隨機數流:這特別適合並行計算,因為每個任務都可以分配一個單獨的 RNG 流。

它使用 L'Ecuyer (1999) 的 RNGkind("L'Ecuyer-CMRG") 作為其底層生成器,它具有 6 個(有符號)整數的種子向量和大約 的周期。每個‘stream’是長度為 的周期的子序列,該周期又被劃分為長度為 的‘substreams’。

L'Ecuyer 的理念等人(2002)是為每個並行計算使用單獨的流(這確保生成的隨機數永遠不會同步),並且如果需要,並行計算本身可以使用子流。原始接口存儲第一個流的原始種子、當前流的原始種子和當前種子:這可以實現為R,但通過保存相關值也很容易工作.Random.seed: 看例子。

clusterSetRNGStream 選擇 "L'Ecuyer-CMRG" RNG,然後將流分發給集群的成員,可以選擇通過 set.seed(iseed) 設置流的種子(否則它們是從主進程的當前種子設置的:選擇 L' 之後)埃庫耶生成器)。

當不在 Windows 上時,在設置 L'Ecuyer 隨機數生成器和種子後調用 mc.reset.stream() 使得 mcparallel(mc.set.seed = TRUE) 的運行可重現。這是在 mclapplypvec 內部完成的。 (請注意,它不會在主進程中設置種子,因此不會影響這些函數的 fallback-to-serial 版本。)

對於 nextRNGStreamnextRNGSubStream ,可以分配給 .Random.seed 的值。

注意

CRAN 包 rlecuyer rstream 中提供了 L'Ecuyer's C 代碼的接口。

例子

RNGkind("L'Ecuyer-CMRG")
set.seed(123)
(s <- .Random.seed)
## do some work involving random numbers.
nextRNGStream(s)
nextRNGSubStream(s)

作者

Brian Ripley

參考

L'Ecuyer, P. (1999). Good parameters and implementations for combined multiple recursive random number generators. Operations Research, 47, 159-164. doi:10.1287/opre.47.1.159.

L'Ecuyer, P., Simard, R., Chen, E. J. and Kelton, W. D. (2002). An object-oriented random-number package with many long streams and substreams. Operations Research, 50, 1073-1075. doi:10.1287/opre.50.6.1073.358.

也可以看看

RNG的更詳細信息R的內置隨機數生成器。

parallel 的小插圖。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Implementation of Pierre L'Ecuyer's RngStreams。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。