繁体   English   中英

并行化蒙特卡罗积分

[英]Parallelize Monte Carlo Integration

我想从概率分布中生成 10 亿个随机点,并使用这些点评估函数来计算蒙特卡罗积分。 问题是我正在使用 MATLAB 并且对其他编程语言知之甚少。 MATLAB 当然很慢,我已经讨论了通过计算 10 个不同过程中 1 亿个点的值来并行化积分的可能性。 这是一种可能的方法吗? 如果是这样,实现它的最佳方法是什么?

目前的做法如下:

对于 i:N
从分布生成随机数
评估函数将函数评估添加到临时变量
结尾

将临时变量除以 N,从而近似积分。

被评估的函数如下:
0 如果生成的点小于数字 B
如果生成的点大于或等于 B,则该点与 B 之间的差值。

使用@Arpi 的方法,将使用 parfor 循环。

这似乎比最初建议的要简单得多。 可以通过查阅wikipedia 来分析性地解决问题。 但是 - 我强调这真的不是正确的方法 - 因为这是一个编程站点,所以这里有一个程序:

b = 0.3;
N = 1e9;
batch_size = 1e8;

total = 0;
for ii=1:(N/batch_size)
    total = sum(max(0,rand(batch_size,1)-b));
end
result = total/N;

这大约需要 15 秒才能运行。 如果批量大小选择得更好,可能会更快。

请注意,此处的“分布”在区间[0, 1)上是均匀的,这可能不是我们想要的,但该方法可以扩展为适用于任何分布类型(其中许多是 Matlab 中的内置函数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM