MATLAB中FORTRAN函数的并行全局优化
问题描述:
我需要全局优化matlab中Fortran程序的参数输入。该函数接受以如下方式输入:MATLAB中FORTRAN函数的并行全局优化
z= fort_fun(X,str)
当X是十进制数和STR的向量是一个字符串。我需要为1020个str中的每一个识别对应于最优X的最小z值。我可以通过将str声明为全局变量,并在父脚本结尾处使用本地定义的函数来执行此过程。然而,为了更及时地执行我的代码(< 1个月),我想为平行PARFOR如下运行这个程序:
parfor i=1:n
%code to setupt global optomization problem....
z(i)=optimal output of --- fort_fun(X,str(i)) ---
end
...存储的z各自最终的优化值。如果我将str声明为全局变量,则parfor命令的每个线程将同时优化相同的str(i)。
有谁知道一种方法,我可以配置parfor命令的每个线程来优化“”fort_fun(X,str(i))“”?我相信OMP模拟将使用应用于str输入的“私有”修饰符。
谢谢!
答
经过一番挖掘,我想出了以下解决方案,它似乎工作。
parfor i=1:1019
str=str1(i,:);
[x1(i,:),x4(i,1)]=optimal(str,x0);
end
function [xf, z]=optimal(str,x0)
lb=[0,0,0];
opts = optimoptions(@fmincon,'Algorithm','interior-point','FunctionTolerance',1E-4,...
'OptimalityTolerance',1E-4,'StepTolerance',1E-4);
problem = createOptimProblem('fmincon','objective',@resulto,'options',opts...
,'x0',x0,'lb',lb);
gs = GlobalSearch('FunctionTolerance',1E-4,...
'XTolerance',1E-4)
[xf, z] = run(gs,problem);
function [result]=resulto(X)
result=fort_fun (X(1),X(2),X(3),str);
end
end
以上是代码,适用于此问题中讨论的一般情况。 MATLAB在两个嵌套函数的声明中方便地假设了更广的范围。