matlab 中 FORTRAN 函数的并行全局优化
Parallel global optimization of a FORTRAN function in matlab
我需要全局优化 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 输入的 "private" 修饰符。
谢谢!
经过一番挖掘,我想出了以下解决方案,它似乎有效。
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 在两个嵌套函数的声明中方便地假定了更广泛的范围。
我需要全局优化 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 输入的 "private" 修饰符。
谢谢!
经过一番挖掘,我想出了以下解决方案,它似乎有效。
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 在两个嵌套函数的声明中方便地假定了更广泛的范围。