Matlab clears persistent and global variables in fmincon when activating UseParallel
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
It seems matlab clears all global and persistent variables within the objective function when using "UseParallel" in fmincon. I am trying to track each function call within the objective function (this is because my objective function should generate a specific input file to be called by an exteranl program and give a misfit output).
I use the folowing code to within my objective function to generate the unique file name at each iteration:
persistent count_1
if isempty(count_1)
count=0;
else
t = getCurrentTask();
worker_number = t.ID;
c = worker_number * 10000 + count_1;
count =c;
count_1=count_1+1;
end
count_1=count_1+1;
filename = ['Run_' num2str(cout) '.dat'];
But strangly, the name would not change after the first function call. Have you encoutered this issue?
0 comentarios
Respuesta aceptada
Matt J
el 6 de Abr. de 2021
Editada: Matt J
el 6 de Abr. de 2021
This happens because, in parallel computing, it isn't easily definable what it means for a variable to "persist". A peristent variable is normally one that retains its value from the previous function call. But when the objective function calls are all executing simultaneously (or at least non-sequentially), what does "previous" even mean?
With global variables, similar ambiguities arise. What if two parallel-occuring executions of the objective function assign different values to a global variable G that they share with the base workspace? Which of the conflicting values should reside in the base workspace version of G after the execution is complete?
Más respuestas (0)
Ver también
Categorías
Más información sobre Surrogate Optimization en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!