Function counts using parallel Fmincon
1 回表示 (過去 30 日間)
古いコメントを表示
Hello all,
I would like to use parallel fmincon. The function receivea an input vector X, generates a file name say Filei.txt (i.e. File1.txt, File2.txt, File3.txt,... at each iteration), runs a external program for the file, and will produce an out put y.
function y= f(X)
% (1) 'count' is the function call number
% (2) genera a file using X and count
name=strcat( 'File.' ,num2str(count),'.txt');
% run an external program say C.exe which takes name as its input and return y
% return y
I would like to use the parallel Fmincon to minimize this function. However, I know that I can not use persisten with parallel fmincon to generate the variable 'count'. Could you please suggest what should I do in this case?
0 件のコメント
回答 (1 件)
Walter Roberson
2017 年 8 月 31 日
編集済み: Walter Roberson
2017 年 8 月 31 日
Each worker has its own copy of the persistent variable. So use the local persistent variable together with the worker number to construct the file name. For example
t = getCurrentTask(); worker_number = t.ID;
name = sprintf('File.%d_%06d.txt', worker_number, count);
Question: is it important that the file names be sequential? Or do they just have to be different ? If they just have to be different, then use tempname()
2 件のコメント
Walter Roberson
2017 年 8 月 31 日
You can use persistent in something called by parfor.
N = 123;
T = zeros(1,N);
parfor K = 1 : N; T(K) = tryper(); end
T
length(unique(T))
function c = tryper
persistent count
if isempty(count); count = 0; end
count = count + 1;
t = getCurrentTask(); worker_number = t.ID;
c = worker_number * 10000 + count;
end
参考
カテゴリ
Help Center および File Exchange で Direct Search についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!