RNGstreams
位于 parallel
包(package)。 说明
这是个R重新实现 Pierre L'Ecuyer's ‘RngStreams’ 多个伪随机数流。
用法
nextRNGStream(seed)
nextRNGSubStream(seed)
clusterSetRNGStream(cl = NULL, iseed)
mc.reset.stream()
参数
seed |
长度为 7 的整数向量,如下所示 |
cl |
此包或包 |
iseed |
要提供给 |
细节
“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)
的运行可重现。这是在 mclapply
和 pvec
内部完成的。 (请注意,它不会在主进程中设置种子,因此不会影响这些函数的 fallback-to-serial 版本。)
值
对于 nextRNGStream
和 nextRNGSubStream
,可以分配给 .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 pvec 使用 Forking 并行化向量映射函数
- R children 用于管理分叉进程的低级函数
- R makeCluster 创建并行套接字集群
- R clusterApply 使用集群应用操作
- R detectCores 检测CPU核心数
- R mcparallel 在单独的进程中异步计算 R 表达式
- R mcfork 分叉当前 R 进程的副本
- R mcaffinity 获取或设置当前进程的CPU亲和性掩码
- R mclapply 使用 Forking 的 lapply 和 mapply 并行版本
- R splitIndices 划分任务在集群中分布
- R SparkR partitionBy用法及代码示例
- R purrr accumulate 累积向量缩减的中间结果
- R purrr imap 将函数应用于向量的每个元素及其索引
- R purrr list_transpose 转置列表
- R purrr as_vector 将列表强制转换为向量
- R purrr map_if 有条件地将函数应用于向量的每个元素
- R purrr map2 映射两个输入
- R purrr map_depth 在给定深度映射/修改元素
- R SparkR printSchema用法及代码示例
- R purrr list_simplify 将列表简化为原子或 S3 向量
- R purrr rerun 多次重新运行表达式
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Implementation of Pierre L'Ecuyer's RngStreams。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。