当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。