【问题标题】:To see the results of patternsearch optimization for each iteration in MATLAB在 MATLAB 中查看每次迭代的模式搜索优化结果
【发布时间】:2020-07-14 12:05:22
【问题描述】:

我有一个非常耗时的优化问题,我需要做很多次(这对我来说是一个反复试验的问题)。但是,我不想等待最终结果。我需要在每次迭代时查看优化的结果。更具体地说,我想查看 x 值(解决方案)并且对 fval(x 处的目标函数值)不太感兴趣。不幸的是,patternsearch 只显示 fval 而不是每次迭代的优化解决方案。我知道我应该通过“输出函数”来解决这个问题,但花了很多时间却不明白该怎么做。为了方便您,让我们考虑以下简单的优化问题:

options = optimoptions('patternsearch');
options = optimoptions(options,'Display', 'iter','TolX',1e-6);
x0=2;lb=-3;ub=3;
x = patternsearch(@(x)x^2,x0,[],[],[],[],lb,ub,[],options);

我们在命令窗口中看到的前几行如下所示:

Iter     f-count          f(x)      MeshSize     Method
    0        1              4             1      
    1        2              4           0.5     Refine Mesh
    2        3              0             1     Successful Poll

不幸的是,我对 x 一无所知。

能否请您更改我的代码,以便我在每次迭代时也能看到解决方案 (x),非常感谢!

巴巴克

【问题讨论】:

    标签: matlab


    【解决方案1】:

    patternsearch 的有效输出函数处理程序应指定如下:

    function [stop,options,optchanged] = fun(optimvalues,options,flag)
    

    以下代码应该足以显示您要查找的信息:

    options = optimoptions('patternsearch');
    options = optimoptions(options,'Display','iter','OutputFcns',@custom,'TolX',1e-6);
    x0 = 2; lb = -3; ub = 3;
    x = patternsearch(@(x)x^2,x0,[],[],[],[],lb,ub,[],options);
    
    function [stop,options,optchanged] = custom(optimvalues,options,flag)
        stop = false;
        optchanged = false;
    
        if (strcmp(flag,'iter'))
            disp(['   Iteration performed for X=' num2str(optimvalues.x)]);
        end
    end
    

    这是输出:

    Iter     Func-count       f(x)      MeshSize     Method
      0           1            4             1      
      Iteration performed for X=2
      1           2            4           0.5       Refine Mesh
      Iteration performed for X=0
      2           3            0             1       Successful Poll
      Iteration performed for X=0
      3           3            0           0.5       Refine Mesh
      Iteration performed for X=0
      4           5            0          0.25       Refine Mesh
      Iteration performed for X=0
       ...
    

    这只是一个示例,您当然可以调整该功能,以便以您喜欢的方式显示文本。

    【讨论】:

      猜你喜欢
      • 2019-09-29
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 2017-08-28
      • 2018-06-11
      • 1970-01-01
      相关资源
      最近更新 更多