【发布时间】:2014-03-03 11:07:29
【问题描述】:
在并行循环中请求随机数总是返回相同的伪随机数。我怎样才能避免这种情况?
% workers initialization:
if matlabpool('size') == 0
matlabpool('open',2);
else
matlabpool('close');
matlabpool('open',2);
end
% parallel loop always give the same random numbers...
parfor k = 1:10
fprintf([num2str(rand(1,1)), ' ']);
end
一个理想的解决方案是在每个线程中按 CPU 时间或类似时间初始化伪随机数生成器。 rng('shuffle') 之类的东西在这里似乎没有帮助......
控制台输出:
Sending a stop signal to all the workers ... stopped.
Starting matlabpool using the 'local' profile ... connected to 2 workers.
0.32457 0.66182 0.63488 0.64968
0.26459 0.096779 0.50518 0.48662 0.034895 0.85227
【问题讨论】:
-
但是你有10个不同的数字,重复在哪里?或者你是说你总是得到那 10 个?
-
@Dan:是的,这就是我要说的 :-) 就像伪随机数生成器在每个线程中总是用相同的数字初始化(可能基于线程号?)
-
This 可能会有所帮助,尤其是关于
RandStream.shuffleSeed方法的部分。
标签: matlab random parallel-processing parfor