在没有rng shuffle的情况下在matlab中生成随机数(与系统时间无关)

时间:2014-04-01 17:12:38

标签: matlab random

我需要在一系列作业中播放随机数,这些作业会启动所有自己的matlab进程。在matlab中,他们说使用

rng shuffle;rand

每次给出不同的数字,但事实证明这对于几乎同时启动作业的数组是不正确的(至少就rng而言)。

在这种情况下如何获得随机数?

2 个答案:

答案 0 :(得分:1)

我看到了两个问题的解决方案:

  • 如果您有一个生成这些作业的主代码,请让它为每个MATLAB进程处理不同的种子。这可以像rng(job_number)一样简单。

  • 另一种方法是使用feature getpid并根据PID信息初始化种子。

答案 1 :(得分:0)

一种解决方案是使用该过程独有的任何数据为RNG播种。例如,如果所有matlab实例都在同一台机器上运行,则可以执行以下操作:

rng('shuffle'); % seed with the current time
rngState = rng; % current state of rng

%%% deltaSeed can be any data unique to the process, 
%%% including position in the process queue
deltaSeed = uint32(feature('getpid'));

seed = rngState.Seed + deltaSeed;
rng(seed); % set the rng to use the modified seed

将当前时间与matlab实例的进程ID组合以生成种子。