I want to be able to restart my simulation from where I left off and also for it to be reproducible
if isfile("State.mat") % If we previously saved the state, start from there
load("State"); globalStream.State = rngState; ...else % Otherwise start from scratch
rng(42,'twister'); globalStream = RandStream.getGlobalStream; rngState = globalStream.State; ... save("State", "current_time", "B", "rngState"); dlmwrite("data/tvol_sim_mat.csv", tvol_mat(1, :), 'precision', 15);end...for t = 1:2 for i = 1:n % Simulates the system forward
end globalStream = RandStream.getGlobalStream; rngState = globalStream.State; save("State", "current_time", "B", "rngState");end
But I want to replace for by parfor. I've read the docs and tried
if isfile("State.mat") % If we previously saved the state, start from there load("State"); s = RandStream('mlfg6331_64', 'Seed', parameters_for_inference.filter.seed); options = statset('UseParallel', true, 'Streams', s, 'UseSubstreams', true); s.State = rngState; ...else % Otherwise start from scratch s = RandStream('mlfg6331_64', 'Seed', parameters_for_inference.filter.seed); options = statset('UseParallel', true, 'Streams', s, 'UseSubstreams', true); rngState = s.State; save("State", "current_time", "B", "rngState");end...for t = 1:2 parfor i = 1:n % Simulates the system forward end rngState = s.State; save("State", "current_time", "B", "rngState");end
But I get this error when trying to restart
Error using matlab.internal.math.RandStream_getset_mexState array class is invalid for a mlfg6331_64 generator.Error in RandStream/subsasgn (line 646) matlab.internal.math.RandStream_getset_mex('state',a.StreamID,b);Error in emacsrunregion (line 23) evalin('base',evalTxt);
Is it possible to do what I want in Matlab? Apologies if this is obvious but I am very new to Matlab. Many thanks 🙂
Best Answer