【问题标题】:Parallel global optimization of a FORTRAN function in matlabmatlab中FORTRAN函数的并行全局优化
【发布时间】:2017-08-23 01:25:53
【问题描述】:

我需要在 matlab 中全局优化 fortran 程序的参数输入。该函数以下列方式接受输入:

    z= fort_fun(X,str)

其中 X 是十进制数的向量,str 是字符串。我需要确定与 1020 个 str 中的每一个的最佳 X 对应的最小 z。我可以通过将 str 声明为全局变量并在父脚本末尾本地定义的函数来串行执行该过程。但是,为了更及时(

    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 输入的“私有”修饰符。

谢谢!

【问题讨论】:

    标签: matlab parallel-processing fortran mathematical-optimization parfor


    【解决方案1】:

    经过一番挖掘,我想出了以下解决方案,它似乎正在工作。

    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 在两个嵌套函数的声明中方便地假定了更广泛的范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 2021-09-11
      • 2015-01-27
      • 2016-03-06
      • 2022-11-29
      • 2012-07-04
      • 2016-10-26
      相关资源
      最近更新 更多