我需要在一系列作业中播放随机数,这些作业会启动所有自己的matlab进程。在matlab中,他们说使用
rng shuffle;rand
每次给出不同的数字,但事实证明这对于几乎同时启动作业的数组是不正确的(至少就rng而言)。
在这种情况下如何获得随机数?
答案 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组合以生成种子。