2

使用算法时如何将output.stepsize其用作停止标准?fmincon'active-set'

当我尝试解决非线性约束非凸优化问题时,我观察到output.stepsize选项 inside'PlotFcns'将是比容差或最大评估更好的停止标准。但是在 options 参数结构中,没有这样的选项。

我还注意到fmincon用于nonlcon解决计算问题的方法output.stepsize

如果我不想更改fminconor的原始代码nonlcon,如何设置上限output.stepsize以用作优化运行的停止标准?

4

1 回答 1

1

这是您可以尝试实现此目的的一种方法。我正在使用文档中的一个示例(那里也讨论了如何做到这一点)。我只是添加了一个在字段达到阈值时返回的输出函数。我还必须确保该字段不为空,因为它似乎在初始化时。stop = trueoptimValues.stepsize

function fmincontest
A = [-1 -2 -2;
      1  2  2];
b = [0;72];
x0 = [10;10;10];
options = optimoptions('fmincon','Algorithm','active-set','OutputFcn',@outfun);
[x,fval,exitflag] = fmincon(@myfun,x0,A,b,[],[],[],[],[],options)

function f = myfun(x)
f = -x(1)*x(2)*x(3);

function stop = outfun(x, optimValues, state)
stop = ~isempty(optimValues.stepsize) && optimValues.stepsize < 0.05;

如果您检查 的exit_flag输出fmincon,您会看到它-1现在返回,因为输出函数正在停止优化,再次如文档中所示。如果您已经在使用plot 函数,则可以使用它,因为它们具有相同的格式。

您需要根据您的问题对其进行调整,调整阈值,当然还要确认它是否有效。我无法评论这是一个多么好的想法。您应该确认在所有情况下仍能令人满意地满足您的误差容限。而且我仍然想问为什么你不能指定适当的'TolCon''TolX'公差来达到你所需要的。

于 2013-10-25T13:57:35.360 回答