Matlab clears persistent and global variables in fmincon when activating UseParallel

5 ビュー (過去 30 日間)
H R
H R 2021 年 4 月 6 日
編集済み: Matt J 2021 年 4 月 7 日
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?

採用された回答

Matt J
Matt J 2021 年 4 月 6 日
編集済み: Matt J 2021 年 4 月 6 日
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?
  4 件のコメント
H R
H R 2021 年 4 月 7 日
I think this is a good option to try, thank you
Matt J
Matt J 2021 年 4 月 7 日
編集済み: Matt J 2021 年 4 月 7 日
Another option might be to generate output files in an OutputFcn,
This lets you detect which particular sub-stage of the iteration the code is currently in, and generate some sort of customized output accordingly.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSurrogate Optimization についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by