我在 parfor 循环中生成加扰的准蒙特卡罗数时遇到问题。
问题是,当我在 parfor 循环中生成多组这些数字时,每组中的数字最终都是相同的。我在下面包含一个非常简单的示例。
D = 3;
M = 1000;
numbers = cell(1,4);
mystream = qrandstream(scramble(sobolset(D),'MatousekAffineOwen'));
myfun = @(x) qrand(mystream,x);
parfor i = 1:4
numbers{i} = myfun(M);
end
为了演示该问题,运行此代码后,numbers{1}、numbers{2}、numbers{3} 和 numbers{4} 中的数字与以下内容相同:
>>numbers{1}(1:3,:)
ans =
0.76 0.05 0.77
0.33 0.96 0.23
0.60 0.72 0.52
>> numbers{2}(1:3,:)
ans =
0.76 0.05 0.77
0.33 0.96 0.23
0.60 0.72 0.52
我想知道是否有人可以想到解决此问题的方法。我想一定有我可以做的事情,因为当我使用正常的随机数字流时不会出现问题。
我应该提到,我不可能利用准随机数流的“跳过”或“跳跃”属性。原因是我在并行运行的更大的 MATLAB 程序中使用了上面的代码片段......