在MATLAB中查看每次迭代的模式搜索优化结果

时间:2018-04-07 11:48:41

标签: matlab

我有一个非常耗时的优化问题,我需要做很多次(这对我来说这是一个试错法)。但是,我不想等待最终结果。我需要在每次迭代时看到优化的结果。更具体地说,我想看到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),非常感谢!

巴巴克

1 个答案:

答案 0 :(得分:0)

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
   ...

这是输出:

{{1}}

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