24小时热门版块排行榜    

查看: 1127  |  回复: 1

husthc

木虫 (正式写手)

[求助] Matlab使用parfor时每次运行如何产生不同的随机数 已有1人参与

parfor ( j=1:4, 4 )
    rand(1)
end

我们每次运行这一小段程序都会产生四个相同的随机数,我想这可能是因为每次打开四个worker的时候每个worker的初始种子一样。

在串行的时候每次启动matlab也会产生相同的随机数,因为他的初始种子每次启动的时候都是0.我们可以通过rng('shuffle')来给一个与时间有关的种子,这样每次启动matlab的时候就可以产生不同的随机数。

请问相同的功能如何在并行的时候实现。

我试过以下代码,可能是因为某些worker的启动时间完全相同,这样worker之间会产生相同随机数。
parfor ( j=1:4, 4 )
    rng('shuffle')
    rand(1)
end

恳请大神解答
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

somomo91

专家顾问 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
husthc: 金币+25, 有帮助, 基本解决 2017-06-05 18:44:58
这是MATLAB 很老的一个问题了,但似乎他们没有完全解决这个问题。
一般的解决办法是在时钟上面加权,这里的权 要根据你的循环的执行时间来定,如果时间特别快,那就需要乘以一个更大的数。
CODE:
rng(sum(1000*clock)+j)

2楼2017-06-05 17:47:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 husthc 的主题更新
信息提示
请填处理意见