有关输出函数和绘图函数的示例,请参见优化工具箱的输出函数和绘制函数.
的OutputFcn
选项指定优化函数在每次迭代时调用的一个或多个函数。通常,您可以使用输出函数在每次迭代中绘制点,或显示算法的优化数量。使用输出函数,您可以查看(但不能设置)优化数量。您还可以根据您设置的条件停止求解器的执行;看到输出函数或绘图函数的结构.
类似地,PlotFcn
选项指定优化函数在每次迭代时调用的一个或多个函数,并可以停止求解器。绘图函数和输出函数之间的区别是双重的:
大多数求解器都有预定义的绘图函数,使您可以轻松获得典型的绘图。
plot函数将输出发送到具有暂停和停止按钮,使您能够在不丢失信息的情况下提前停止求解程序。
谨慎
intlinprog
输出函数和绘图函数不同于其他求解器中的函数。看到intlinprog输出函数和绘图函数语法.
要设置输出函数或绘图函数,请执行以下操作:
将函数作为函数文件或局部函数写入。
使用optimoptions
设置的值OutputFcn
或PlotFcn
为函数句柄,即在函数名前面加上@符号。例如,如果输出函数是outfun.m
,命令
选择= optimoptions (@solvername,“OutputFcn”, @outfun);
指定OutputFcn
做…的把柄outfun
.若要指定多个输出函数或绘图函数,请使用语法
选择= optimoptions (“solvername”,“OutputFcn”, {@outfun, @outfun2});
要使用制表符补全来帮助选择内置的绘图函数名,请使用引号而不是函数句柄。
用调用优化函数选项
作为输入参数。
传递额外的参数说明如何在必要时将参数或数据传递给输出函数或绘图函数。
输出函数或plot函数的函数定义线形式如下:
停止= outfun (x, optimValues状态)
在哪里
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字段(optimValues.field) | 描述 | 返回的函数 | 命令行显示 |
---|---|---|---|
|
多目标问题的达成因素。有关详细信息,请参见目标实现方法. |
没有一个 |
|
|
当前优化迭代的共轭梯度迭代次数。 |
|
看到迭代显示. |
|
最大的约束违反。 |
|
看到迭代显示. |
|
简并度的测量。一个点是简并如果:
看到简并度. |
|
没有一个 |
|
方向导数在搜索方向上。 |
|
看到迭代显示. |
|
一阶最优性(取决于算法)。最终值等于优化函数输出 |
|
看到迭代显示. |
|
函数求值的累计次数。最终值等于优化函数输出 |
|
看到迭代显示. |
|
当前点的函数值。最终值等于优化函数输出 为 |
|
看到迭代显示. |
|
目标函数的当前梯度-如果你提供它,可以是解析梯度或有限差分近似。最终值等于优化函数输出 |
|
没有一个 |
|
迭代数-从 |
|
看到迭代显示. |
|
Levenberg-Marquardt参数, |
|
|
|
实际步长除以最初预测的步长 |
看到迭代显示. |
|
|
函数值最大 |
fminimax |
没有一个 |
|
|
|
没有一个 |
|
过程信息。 |
|
看到迭代显示. |
|
目标函数的变化与二次逼近的变化之比。 |
|
没有一个 |
|
残余向量。 |
看到迭代显示. |
|
|
残差的2范数的平方。 |
看到迭代显示. |
|
|
搜索方向。 |
|
没有一个 |
|
当前信任区域步骤的状态。如果当前信任区域步骤成功,则返回true,如果信任区域步骤失败,则返回false。 |
|
没有一个 |
|
当前步长(位移 |
|
看到迭代显示. |
|
信任区域半径。 |
|
看到迭代显示. |
字段的值简并
,它测量当前优化点的简并度x
的定义如下。首先,定义一个向量r
,大小相同的x
,r(我)
最小距离是多少x(我)
到我上界和下界的第Th项,磅
和乌兰巴托
.也就是说,
R = min(abs(ub-x, x-lb))
然后是简并
向量的最小分量是多少r + abs(研究生)
,在那里研究生
为目标函数的梯度。的价值简并
如果有索引是否为0我
以下两种情况都是正确的:
研究生(i) = 0
x(我)
等于我上界或下界的第Th项
下表列出了可能的值状态
:
状态 | 描述 |
---|---|
|
算法在第一次迭代之前处于初始状态。 |
|
该算法在迭代的某些计算昂贵的部分。在这种状态下,输出函数可以中断当前的优化迭代。此时,价值观 |
|
算法是在迭代的末尾。 |
|
算法在最后一次迭代后处于最终状态。 |
的“中断”
状态只在fmincon
“激活集”
算法和fgoalattain
,fminimax
,fseminf
解决者。在那里,状态可以出现在二次规划子问题解决或行搜索之前。
下面的代码演示了输出函数如何使用的值状态
决定在当前迭代中执行哪些任务:
开关状态情况下“通路”%根据需要更新绘图或图形情况下“中断”这里可能没有行动。检查条件查看%优化是否应该退出。情况下“init”%设置绘图或图形界面情况下“完成”%地块、图形界面或最终地块的清理否则结束
输出参数停止
是国旗吗真正的
或假
.标志告诉优化函数是否应该停止优化(真正的
)或继续(假
).下面的示例展示了使用的典型方法停止
国旗。
输出函数或plot函数可以在基于中的当前数据的任何迭代中停止优化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;%检查用户是否请求停止优化。停止= getappdata (hObject,“optimstop”);