【发布时间】:2014-11-05 01:00:21
【问题描述】:
我在Matlab 中有一个用于并行计算的parfor 循环。我希望在 8 个工作人员上每次调用这些 parforloops 时都有不同的随机数。如果我不使用rng('shuffle') 函数,我对randperm(10) 有相同的随机数。在这种情况下,我的代码在所有工作人员中同时在 randperm 之前运行 rng('shuffle') 函数。在这种情况下我有不同的随机数吗?当我在 parfor 循环中看到 randperm 输出时,其中一些输出是相同的!
我需要在rng('shuffle') 之前保存rng 并在结束并行循环后使用rng(saved_rng) 之类的东西?
我们在Matlab 帮助中有这个:
注意因为 rng('shuffle') 是基于随机数生成器的种子 在当前时间,你不应该使用这个命令来设置随机 如果您想确保独立,则在不同的工作人员上进行号码流 流。当命令发送到多个 同时工作人员,例如在 parfor、spmd 或 沟通工作。对于工作人员的独立流,使用 默认行为;或者如果这不足以满足您的需求, 考虑在每个工作人员上使用唯一的子流。
那我该怎么办?如果我删除rng,我会有不同的随机数吗?我有这些代码的两个版本。其中之一是使用parfor 和其他使用for 循环进行计算,我可以从for 循环中删除shuffle 吗?在这种情况下我有不同的随机数?
谢谢。
附言
我可以有这些结构:
parfor I=1:X
xx = randperm(10)
end
parfor I=1:X
rng('shuffle');
xx = randperm(10)
end
rng('shuffle');
parfor I=1:X
xx = randperm(10)
end
我想从randperm 函数中获得不同的随机数。我怎样才能做到这一点?对于for 结构,我需要shuffle 函数(没有它,随机数是相同的)但是当我将它添加到parfor 时,randperm 的一些随机输出是相同的!
【问题讨论】:
-
你为什么使用
rng('shuffle')?默认设置有什么问题?另外,是否可以将随机生成移到并行部分之前? -
感谢您的评论。我们可以删除
parfor中的rng('shuffle')吗?为什么在parfor loop之前需要random generation? -
这并没有让我更清楚。您能否包含代码的简化版本,清楚地显示问题?
-
好的。我会将其添加到主要问题中。
标签: matlab parallel-processing random-sample parfor