Can this parsim get any faster?

1 view (last 30 days)
Armin Mashhadi
Armin Mashhadi on 8 Jun 2021
Edited: Armin Mashhadi on 8 Jun 2021
Hi,
I have to run a large number of simulations to optimize a control system.
In my case,there are 100 controllers to simulate with different conditions, 200 times for each (20'000 simulations). So here is my code just for one
load('Controllers') % Matrix of controller parameters
numberOfControllers = 100 ;
SampleNumber = 200 ;
UnMatrix = unifrnd(-0.1,0.1,SampleNumber,12); % 12 Different situation for each simulation
%% Simulink
a = Simulink.SimulationInput('VPI1');
a = a.setModelParameter ('Solver' , 'ode4' );
a = a.setModelParameter ('FixedStep', '0.05');
a = a.setModelParameter ('StartTime', '0');
a = a.setModelParameter ('StopTime' , '200');
for j = 1: numberOfControllers
a = a.setVariable('x' , Controllers(j,:)) ;
parfor i = 1:SampleNumber
u1(i) = a ;
u1(i) = u1(i).setVariable('un',UnMatrix(i,:));
end
u2 = u1 ;
u2(:) = u2 (:).setModelName('VPI2');
Out1 = parsim( u1 ,'ShowProgress', 'off','TransferBaseWorkspaceVariables','off') ;
Out2 = parsim( u2 ,'ShowProgress', 'off','TransferBaseWorkspaceVariables','off') ;
% Do some thing with Out1 and Out2
end
All files are attached. "VPI1" and "VPI2' are two simulink models. This procedure is going to repeat for another 200 times ( +4'000'000 simulations totally) and because of that is take a long time to finish. I turned "TransferBaseWorkspaveVariables" off to minimize using of RAM.
I was wondering if you know any other ways to speed up this code? For example using "distributed matrices" or another way to set variables to Simulink mode or other "parsim options".
I'm so thankful of your help.
With regards

Answers (0)

Categories

Find more on Manual Performance Optimization in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!