该Outputfcn
领域的选项
指定一个或多个功能,在每次迭代优化的函数调用。通常情况下,你可能会在每次迭代使用输出功能积点或从算法优化的显示数量。使用输出功能,您可以查看,但不能设置,优化的数量。
intlinprog
输出函数和绘图函数与其他求解器不同。看到intlinprog输出函数和绘图函数语法。
要设置输出函数,请执行以下操作:
写输出功能的函数文件或局部功能。
采用optimoptions
设置的值Outputfcn
作为函数句柄,即函数名的前面加上@符号。例如,如果输出函数是outfun.m
, 命令
选项= optimoptions(@ solvername, 'OutputFcn',@outfun);
指定OutputFcn
成为…的把柄outfun
。要指定多个输出函数,请使用语法
选项= optimoptions(@ solvername, 'OutputFcn',{@ outfun,@ outfun2});
调用优化函数选项
作为输入参数。
看到输出功能作为一个输出函数的例子。
传递额外的参数说明如何参数化的输出功能OutputFcn
,如果必要的。
输出函数的函数定义行具有下列形式:
停止= outfun (x, optimValues状态)
在哪里
X
是在当前迭代由所述算法计算的点。
optimValues
是从当前迭代包含数据的结构。在optimValues领域详细描述的结构。
状态
是算法的当前状态。算法状态列出可能的值。
停
国旗是吗真正的
或假
取决于优化例程应该退出还是继续。看到停止标志为更多的信息。
优化功能传递的输入参数的值outfun
在每一个迭代。
下表列出了的字段optimValues
结构。一个特定的优化函数只返回其中一些字段的值。对于每个字段,表的“由函数返回”列列出了返回该字段的函数。
一些领域的optimValues
对应优化函数的输出参数。优化算法最终迭代后,该字段的值等于相应的输出参数。例如,optimValues.fval
对应于输出参数FVAL
。所以,如果你打电话fmincon
带有输出函数和返回FVAL
的最终值optimValues.fval
等于FVAL
。下表的说明列表示具有相应的输出参数的字段。
的某些字段的值optimValues
在命令行中显示,当你调用优化功能与显示
领域的选项
设置'ITER'
,如在迭代显示。例如,optimValues.fval
显示于f (x)
列。下表的命令行显示列指示可以在命令行中显示的字段。
一些optimValues
场仅适用于特定的算法:
AS -有效集
D -trust-region-dogleg
知识产权- - - - - -内点
LM -levenberg-marquardt
Q -拟牛顿
SQP -sqp
TR -信任区域
TRR -信赖域反射
一些optimValues
字段在某些求解器或算法存在的,但总是充满空或零个值,因此毫无意义。这些领域包括:
constrviolation
对于fminunc
TR
和fsolve
TRR
。
程序
对于fmincon
TRR
和SQP
,对于fminunc
。
optimValues场
OptimValues字段(optimValues.field) | 描述 | 通过函数返回 | 命令行显示 |
---|---|---|---|
|
多目标的问题达成的因素。有关详细信息,请参阅目标的实现方法。 |
没有一个 |
|
|
在当前优化迭代共轭梯度迭代次数。 |
|
看到迭代显示。 |
|
最大约束冲突。 |
|
看到迭代显示。 |
|
简并度的测量。一个点是简并如果 相对于其中一个变量的偏导数的点处为0。 甲界约束为在该点处该变量活性。 看到简。 |
|
没有一个 |
|
在搜索方向定向衍生物。 |
|
看到迭代显示。 |
|
一阶最优性(取决于算法)。最终值等于优化功能输出 |
|
看到迭代显示。 |
|
函数计算的累积次数。最终值等于优化功能输出 |
|
看到迭代显示。 |
|
函数在当前点的值。最终值等于优化功能输出 对于 |
|
看到迭代显示。 |
|
目标函数的当前梯度 - 如果你提供给它或有限差分逼近无论是分析梯度。最终值等于优化功能输出 |
|
没有一个 |
|
迭代次数-从 |
|
看到迭代显示。 |
|
Levenberg-Marquardt参数, |
|
|
|
实际步长除以初始预测步长 |
看到迭代显示。 |
|
|
函数值最大 |
fminimax |
没有一个 |
|
|
|
没有一个 |
|
程序的消息。 |
|
看到迭代显示。 |
|
在目标函数的变化率在二次近似改变。 |
|
没有一个 |
|
残差向量。 |
看到迭代显示。 |
|
|
残余平方的2-范数。 |
看到迭代显示。 |
|
|
搜索方向。 |
|
没有一个 |
|
当前信任区域步骤的状态。如果当前信任区域步骤成功,则返回true;如果当前信任区域步骤不成功,则返回false。 |
|
没有一个 |
|
当前步长(在位移 |
|
看到迭代显示。 |
|
信任区域的半径。 |
|
看到迭代显示。 |
该字段的值简并
,其测量电流的优化点的简X
被定义为如下。首先,定义一个矢量[R
的尺寸相同的X
,R(I)
距离的最小值是多少X(ⅰ)
到一世下界和上界的第n个元素,磅
和乌兰巴托
。也就是说,
r = min(abs(ab -x, x-lb))
那么简并
是矢量的最小条目R + ABS(毕业)
,在那里研究生
是目标函数的梯度。的价值简并
如果有索引,是0吗一世
对于这两个以下为真:
研究生(i) = 0
X(ⅰ)
等于一世下界或上界的第一个入口。
下表列出了可能的值状态
:
州 | 描述 |
---|---|
|
算法在第一次迭代前处于初始状态。 |
|
该算法是迭代中计算开销较大的部分。在这种状态下,输出函数可以中断当前的优化迭代。此时,的值 |
|
该算法是在迭代的结束。 |
|
该算法是在最后一次迭代后的最终状态。 |
该“中断”
状态仅在发生fmincon
“有源集”
算法和fgoalattain
,fminimax
,fseminf
求解。在那里,可以在二次规划子问题的解决方案或线搜索出现之前的状态。
下面的代码演示了如何输出功能可以使用的值状态
决定在当前迭代完成哪些任务:
开关状态情况下'ITER'根据需要更新plot或gui情况下“中断”这里可能没有动作。检查条件%是否应该退出优化。情况下“init”设置绘图区或gui情况下“完成”的曲线,图形用户界面,或最终积%清理除此以外结束
输出参数停
国旗是吗真正的
或假
。该标志告诉优化函数的优化是否应该退出或继续。下面的例子说明了使用典型的方式停
国旗。
输出函数可以在基于当前数据的任何迭代中停止优化optimValues
。例如,下面的代码集停
来真正的
如果方向导数小于. 01
:
功能STOP = outfun(X,optimValues,状态)停止= FALSE;%检查方向导数是否小于0.01。如果optimValues.directionalderivative <0.01光阑= TRUE;结束
如果你设计一个GUI进行优化,可以使当用户点击一个输出功能停止优化停止在GUI按钮。下面的代码演示如何做到这一点,假设停止按钮回调存储的值真正的
在里面optimstop
一个场处理
结构称为hObject
:
功能STOP = outfun(X,optimValues,状态)停止= FALSE;检查用户是否请求停止优化。停止= getappdata (hObject,“optimstop”);