[英]Random variable generator in Matlab running in cluster environment
我想在运行于集群环境中的matlab中生成“真正的”随机变量。 问题是从特定位置( http://nl.mathworks.com/help/matlab/ref/rng.html )开始,正在从矩阵中检索matlab中的随机变量。
每当我开始在matlab中执行程序时,随机值总是相同的。 为了克服这个问题,可以使用命令rng('shuffle')从矩阵的随机位置开始( http://nl.mathworks.com/help/matlab/math/why-do-random- number-repeat-after-startup.html )。
但是,即使此命令也会给我相同的结果,因为“ shuffle”命令的结果(尚不清楚其工作方式)在群集中始终相同。
关于如何克服这个问题的任何建议?
我假设这是一个问题,因为您正在使用具有相同“随机”输入的多个并行进程。 确保在每个进程的不同时间使用rng('shuffle')
(时间差可能是毫秒)。 shuffle
使用当前时间作为输入,具有很高的分辨率,如以下示例所示:
rng('shuffle');rng
rng('shuffle');rng
rng(now);rng
rng(now);rng
上面的代码设置了随机种子,并立即显示随机数生成器及其种子的状态。 输出如下:
ans =
Type: 'twister'
Seed: 587753634
State: [625x1 uint32]
ans =
Type: 'twister'
Seed: 587753635
State: [625x1 uint32]
ans =
Type: 'twister'
Seed: 736028
State: [625x1 uint32]
ans =
Type: 'twister'
Seed: 736028
State: [625x1 uint32]
如您所见, shuffle
输入产生两个不同的种子, now
输入显然没有足够高的分辨率来快速生成新种子。
为什么不使用http://uk.mathworks.com/matlabcentral/fileexchange/27942-www-random-org-random-integers-sequences-strings使用来自random.org的真正随机数为随机数生成器播种
rng('shuffle')
根据当前时间播种随机数生成器,因此我不确定为什么每次都会得到相同的结果。
无论如何,如果要确保每个工作人员具有不同的种子,则不应使用rng('shuffle')
在每个工作人员上设置随机数种子。
因此,基本上,您需要全局执行rng('shuffle')
,而不是在每个工作人员内部执行。
这将每次为每个工作人员提供不同的值:
rng('shuffle')
spmd
R = rand(1,4); % Different on each worker
end
每次对所有工作程序来说,这将为您提供相同的值,因为所有工作程序将同时使用相同的rng种子进行初始化。
spmd
rng('shuffle')
R = rand(1,4); % Equal on each worker
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.