我在做MCMC(Monte Carlo Markov Chain)时遇到了麻烦。所以对于MCMC来说,我会运行10000次迭代,然后在每次迭代中,我将绘制一些参数。但是在每次迭代中,我都有一些独立的个人数据,所以我可以做parfor。然而,问题是,当MCMC继续时,似乎完成一次迭代的时间会迅速增长。很快,它非常耗时。 我的问题是:是否有任何有效的方法来结合parfor和while循环?
我有以下伪代码:
r=1;
while r<10000
parfor i=1:I
make draws from proposal distribution
calculate acceptance rate
accept or reject current draw
end
r=r+1;
end
答案 0 :(得分:0)
如果每个循环持续时间很短,则启动大量单独的parfor
循环可能效率低下。不幸的是,正如您可能知道的那样,您不能break
循环parfor
。一种替代方案可能是使用parfeval
。这个想法是进行许多parfeval
次调用(但不是太多),然后当你有足够的结果时你可以终止。
This (fairly long) blog article显示了在您可能希望提前终止计算的情况下使用parfeval
的示例。