MATLAB:如何在parfor中设置随机种子以产生与序列相同的结果?

Phi*_*p F 5 random parallel-processing matlab parfor

我设置了以下最小的例子:

rng(0);

randseedoffset = random('unid', 10^5) + 1;

t = cell(10,1);
for i = 1:10
    rng(randseedoffset+i);
    t{i} = random('unid', 1000);
end

disp(t);
Run Code Online (Sandbox Code Playgroud)

这将生成10个随机数并存储它们t.它将始终可靠地生成相同的随机数,因为我rng在for循环中设置了种子.

如果我现在改forparfor,我得到不同的结果!虽然它们也总是可以重现的.

我想用parfor加速我的代码并仍然获得与...相同的完全相同的随机数

Phi*_*p F 6

好的,我刚刚找到原因:

MATLAB支持不同的随机数生成算法.虽然在当前版本的通常设置中,这是Mersenne Twister.当你进入parfor循环时,这会改变他们所谓的"组合递归方法".

可以通过'twister'在循环中明确设置类型来解决此问题:

parfor i = 1:10
    rng(randseedoffset+i, 'twister');
    t{i} = random('unid', 1000);
end
Run Code Online (Sandbox Code Playgroud)