control random number generator in async programming
3 ビュー (過去 30 日間)
古いコメントを表示
My problem is very simple. I am using asynchronous programing to generate random number dependent data.
I would like to have reproducible results, but I can't.
For example:
rng(1);
fA = parfeval(backgroundPool,@rand,1,10000);
B = rand(10000);
wait(fA)
C = max(fetchOutputs(fA),B);
B(1:5)
C(1:5)
If I repeat this code multiple times, only array B is reproducible. I want array C to be reproducible as well. Seems a different random number generator is used there. How can I control that generator?
0 件のコメント
回答 (1 件)
Walter Roberson
2024 年 11 月 29 日
parpool are defined to seed random number generators differently. See https://www.mathworks.com/help/parallel-computing/control-random-number-streams-on-workers.html
5 件のコメント
Walter Roberson
2024 年 12 月 4 日
NumWorkers = backgroundPool.NumWorkers;
random_seeds = [appropriate list];
F = parfevalOnAll(backgroundPool, @() getCurrentTask().ID, 1);
IDs = fetchOutputs(F);
D = dictonary(IDs, random_seeds);
F = parfevalOnAll(backgroundPool, @() rng(D(getCurrentTask.ID), 'twister'), 0);
fetchOutputs(F);
Now you can
fA = parfevalOnAll(backgroundPool,@rand,1,1,10000);
A = cell(NumWorkers,1);
for idx = 1 : NumWorkers
[~, A{idx}] = fetchNext(fA);
end
参考
カテゴリ
Help Center および File Exchange で Random Number Generation についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!