繁体   English   中英

在集群环境中运行的Matlab中的随机变量生成器

[英]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输入显然没有足够高的分辨率来快速生成新种子。

通常,您将起始“种子”提供给随机数生成器,当前时间是一个很好的来源,因此您可以尝试类似

 rng(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM