什么是加速蒙特卡罗模拟的最佳技巧?

gri*_*fin 5 simulation r distributed-computing montecarlo

每当我在S-Plus中进行大规模的蒙特卡罗模拟时,我总是在等待它完成时留下胡须.

在R中运行蒙特卡罗模拟的最佳技巧是什么?以分布式方式运行流程的任何好例子?

Rol*_*ald 10

  • 如果你只是使用并行独立复制,使用多个核心/机器应该很简单,但要注意随机数生成器的常见缺陷(例如,如果使用当前时间作为种子,产生许多进程,每个进程使用一个RNG可能会产生相关随机数字,导致无效结果 - 参见本文)

  • 您可能希望使用方差减少减少所需复制的数量,即缩小所需样本的大小.在许多教科书中可以找到更先进的方差减少技术,例如在这本教科书中.


Edu*_*oni 5

预分配你的载体!

> nsims <- 10000
> n <- 100
> 
> system.time({
     res <- NULL
     for (i in 1:nsims) {
         res <- c(res,mean(rnorm(n)))
     }
 })
   user  system elapsed 
  0.761   0.015   0.783 
> 
> system.time({
     res <- rep(NA, nsims)
     for (i in 1:nsims) {
         res[i] <- mean(rnorm(n))
     }
 })
   user  system elapsed 
  0.485   0.001   0.488 
> 
Run Code Online (Sandbox Code Playgroud)