有关输出函数和绘图函数的示例,请参见优化工具箱的输出函数而且绘制函数.
的OutputFcn
选项指定优化函数在每次迭代时调用的一个或多个函数。通常,您可以使用输出函数在每次迭代中绘制点,或者显示算法中的优化量。使用输出函数可以查看(但不能设置)优化量。你也可以根据你设置的条件暂停求解器的执行;看到输出函数或图函数的结构.
类似地,PlotFcn
选项指定优化函数在每次迭代时调用的一个或多个函数,并可以暂停求解器。图函数和输出函数的区别有两点:
预定义的图形函数存在于大多数求解器中,使您能够轻松获得典型的图形。
绘图函数将输出发送到窗口暂停而且停止按钮,使您能够在不丢失信息的情况下提前停止求解器。
谨慎
intlinprog
输出函数和绘图函数不同于其他求解器。看到intlinprog输出函数和图函数语法.
要设置输出函数或绘图函数,请执行以下操作:
将函数写为函数文件或本地函数。
使用optimoptions
的值OutputFcn
或PlotFcn
为函数句柄,即函数名前面加@符号。例如,如果输出函数为outfun.m
,命令
选项= optimoptions(@solvername,“OutputFcn”, @outfun);
指定OutputFcn
成为…的手柄outfun
.若要指定多个输出函数或绘图函数,请使用语法
选项= optimoptions(“solvername”,“OutputFcn”, {@outfun, @outfun2});
若要使用制表符补全帮助选择内置绘图函数名,请使用引号而不是函数句柄。
调用优化函数选项
作为输入参数。
传递额外参数说明如何将参数或数据传递给输出函数或绘图函数(如有必要)。
输出函数或绘图函数的函数定义行有如下形式:
stop = outfun(x,optimValues,state)
在哪里
x
是算法在当前迭代中计算出的点。
optimValues
包含来自当前迭代的数据的结构。optimValues字段详细描述了结构。
状态
算法的当前状态。算法状态列出可能的值。
停止
那是国旗吗真正的
或假
根据优化例程是否应该停止(真正的
)或继续(假
).详细信息请参见停止标志.
优化函数将输入参数的值传递给outfun
在每次迭代中。
字段说明如下表所示optimValues
结构。一个特定的优化函数只返回其中一些字段的值。对于每个字段,表的Returned by Functions列列出了返回该字段的函数。
的一些领域optimValues
对应优化函数的输出参数。在优化算法的最后一次迭代之后,该字段的值等于相应的输出参数。例如,optimValues.fval
对应于输出参数fval
.所以,如果你打电话fmincon
用输出函数返回fval
的最终值optimValues.fval
=fval
.下表的Description列表示具有相应输出参数的字段。
的某些字段的值optimValues
在命令行中显示显示
领域的选项
设置为“通路”
,详见迭代显示.例如,optimValues.fval
显示在f (x)
列。下表中的“命令行显示”列表示在命令行中可以显示的字段。
一些optimValues
以下字段只适用于特定算法:
作为- - - - - -有效集
D -trust-region-dogleg
知识产权- - - - - -内点
LM -levenberg-marquardt
Q -拟牛顿
SQP -sqp
TR -信赖域
TRR -trust-region-reflective
一些optimValues
字段存在于某些求解器或算法中,但总是被空值或零值填充,因此毫无意义。这些字段包括:
constrviolation
为fminunc
TR
而且fsolve
TRR
.
过程
为fmincon
TRR
而且SQP
,以及fminunc
.
optimValues字段
优化值字段(OptimValues . Field) | 描述 | 函数返回 | 命令行显示 |
---|---|---|---|
|
多目标问题的实现因子。详细信息请参见目标实现方法. |
没有一个 |
|
|
当前优化迭代中的共轭梯度迭代次数。 |
|
看到迭代显示. |
|
最大约束违反。 |
|
看到迭代显示. |
|
简并度的度量。重点是简并如果:
看到简并度. |
|
没有一个 |
|
搜索方向的方向导数。 |
|
看到迭代显示. |
|
一阶最优性(取决于算法)。最终值等于优化函数输出 |
|
看到迭代显示. |
|
函数计算的累计次数。最终值等于优化函数输出 |
|
看到迭代显示. |
|
函数值在当前点。最终值等于优化函数输出 为 |
|
看到迭代显示. |
|
目标函数的当前梯度——如果你提供的话,可以是解析梯度,也可以是有限差分近似。最终值等于优化函数输出 |
|
没有一个 |
|
迭代数-开始于 |
|
看到迭代显示. |
|
Levenberg-Marquardt参数, |
|
|
|
实际步长除以最初预测的步长 |
看到迭代显示. |
|
|
最大函数值 |
fminimax |
没有一个 |
|
|
|
没有一个 |
|
过程信息。 |
|
看到迭代显示. |
|
目标函数变化量与二次近似变化量的比值。 |
|
没有一个 |
|
残差向量。 |
看到迭代显示. |
|
|
残差平方的2模。 |
看到迭代显示. |
|
|
搜索方向。 |
|
没有一个 |
|
当前信任区域步骤的状态。如果当前信任区域步骤成功,则返回true;如果当前信任区域步骤不成功,则返回false。 |
|
没有一个 |
|
当前步长(位移 |
|
看到迭代显示. |
|
信任区域半径。 |
|
看到迭代显示. |
字段的值简并
,表示当前优化点的简并度x
,定义如下。首先,定义一个向量r
,大小与x
,为此r(我)
最小距离是多少x(我)
到我下界和上界的第Th项,磅
而且乌兰巴托
.也就是说,
R = min(abs(ub-x, x-lb))
然后是简并
向量的最小元素是什么R + abs(毕业)
,在那里研究生
是目标函数的梯度。的价值简并
如果有索引则为0我
以下两种情况都成立:
Grad (i) = 0
x(我)
等于我下界或上界的项。
下表列出了的可能值状态
:
状态 | 描述 |
---|---|
|
算法处于第一次迭代前的初始状态。 |
|
该算法是在迭代的一些计算昂贵的部分。在这种状态下,输出函数可以中断优化的当前迭代。此时,值 |
|
该算法处于迭代的末尾。 |
|
在最后一次迭代后,算法处于最终状态。 |
的“中断”
状态仅在fmincon
“激活集”
算法和fgoalattain
,fminimax
,fseminf
解决者。在那里,这种状态可以出现在二次规划子问题求解或直线搜索之前。
下面的代码说明了输出函数如何使用值状态
决定在当前迭代中执行哪些任务:
开关状态情况下“通路”根据需要更新绘图或图形界面。情况下“中断”这里可能没有行动。检查条件以查看%是否应该停止优化。情况下“init”%用于设置图形或图形界面情况下“完成”%清理的情节,gui,或最终情节否则结束
输出参数停止
那是国旗吗真正的
或假
.该标志告诉优化函数优化是否应该停止(真正的
)或继续(假
).属性的典型使用方法停止
国旗。
输出函数或绘图函数可以在基于中的当前数据的任何迭代中停止优化optimValues
.例如,下面的代码集停止
来真正的
,当方向导数的大小小于时,停止优化. 01
:
函数stop = outfun(x,optimValues,state) stop = false;%检查方向导数范数是否小于0.01。如果norm(optimValues.directionalderivative) < .01 stop = true;结束
如果将GUI设计为执行优化,则可以使输出函数在用户单击时停止优化停止按钮。下面的代码展示了如何做到这一点,假设停止按钮回调存储值真正的
在optimstop
字段处理
结构称为hObject
:
函数stop = outfun(x,optimValues,state) stop = false;检查用户是否要求停止优化。stop = getappdata(hObject,“optimstop”);