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



>我有一个非常耗时的优化问题,我需要做很多次(这对我来说是一个试错问题)。但是,我不想等待最终结果。我需要在每次迭代时查看优化结果。更具体地说,我想看到 x 值(解决方案),并且对 fval(x 处的目标函数值)不太感兴趣。不幸的是,模式搜索只显示 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),非常感谢!

巴巴克

应按如下方式指定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
...

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

最新更新