输出函数和情节函数的语法
输出函数和情节函数是什么?
输出函数和情节函数的例子,请参阅输出函数优化工具箱和绘制函数。
的OutputFcn
选项指定一个或多个函数,每个迭代的优化函数调用。通常,您可以使用一个输出函数绘制点的数量在每个迭代或显示优化算法。使用一个输出函数你可以查看,但不设置,优化量。你也可以停止执行的解算器根据条件设置;看到结构输出函数或情节的功能。
类似地,PlotFcn
选项指定一个或多个函数的优化函数调用在每一次迭代,并且可以停止解决者。绘制函数和输出函数的区别有两个:
预定义的情节功能存在对于大多数解决方案,使您能够轻易获得典型的情节。
绘制函数将输出发送到一个窗口暂停和停止按钮,使您能够阻止早期在不丢失信息的前提下解决。
谨慎
intlinprog
输出函数和情节函数不同于其他连接器。看到intlinprog输出函数和情节函数的语法。
建立一个输出函数或情节,做到以下几点:
把函数写成一个函数文件或本地函数。
使用
optimoptions
设置的价值OutputFcn
或PlotFcn
一个函数处理,即由@符号之前的函数的名称。例如,如果输出函数outfun.m
,命令选择= optimoptions (@solvername,“OutputFcn”,@outfun);
指定
OutputFcn
句柄outfun
。指定多个输出函数或函数,使用语法选择= optimoptions (“solvername”,“OutputFcn”,{@outfun, @outfun2});
使用tab补齐来帮助选择一个内置的函数名,使用引号而不是一个函数处理。
调用优化函数
选项
作为输入参数。
传递额外的参数解释如何传递参数或数据输出函数或情节,如果必要的。
结构输出函数或情节的功能
输出的函数定义行函数或情节函数具有以下形式:
停止= outfun (x, optimValues状态)
在哪里
x
是点在当前迭代计算的算法。optimValues
是一个包含当前迭代的数据结构。字段optimValues详细描述了结构。状态
的当前状态算法。算法的状态列出了可能的值。停止
是一个标志呢真正的
或假
取决于优化常规应该停止(真正的
)或继续(假
)。有关详细信息,请参见停止标志。
优化将输入参数的值传递给函数outfun
在每一个迭代。
字段optimValues
下表列出的字段optimValues
结构。只有一些特定的优化函数返回值的字段。对于每个字段,返回的函数列的表列出了函数返回。
相应的输出参数
的一些领域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-norm残余的平方。 |
看到迭代显示。 |
|
|
搜索方向。 |
|
没有一个 |
|
当前的信赖域步的状态。返回true,如果当前信赖域步是成功的,和假如果信赖域步是不成功的。 |
|
没有一个 |
|
当前步长(位移 |
|
看到迭代显示。 |
|
信赖域半径。 |
|
看到迭代显示。 |
简并度
字段的值简并
衡量当前优化点的简并度x
,定义如下。首先,定义一个向量r
相同的大小x
,r(我)
最小距离吗x(我)
到我th条目的上下边界,磅
和乌兰巴托
。也就是说,
r = min (abs (ub-x x-lb))
然后的价值简并
的最小输入向量r + abs(研究生)
,在那里研究生
是目标函数的梯度。的价值简并
如果有索引为0我
,以下是正确的:
研究生(i) = 0
x(我)
等于我入口较低或上界。
算法的状态
下表列出了可能的值状态
:
状态 | 描述 |
---|---|
|
该算法在第一次迭代前的初始状态。 |
|
该算法在某些迭代计算昂贵的部分。在这种状态下,输出函数可以中断当前迭代的优化。在这个时候,的值 |
|
该算法是迭代的末尾。 |
|
该算法是在最后一次迭代后的最终状态。 |
的“中断”
只有在发生fmincon
“激活集”
算法和fgoalattain
,fminimax
,fseminf
解决者。国家可以发生在二次规划子问题解决方案或一行搜索。
下面的代码演示了如何输出函数可能使用的价值状态
决定哪些任务在当前迭代执行:
开关状态情况下“通路”%更新图或根据需要gui情况下“中断”%可能没有行动。检查条件看%优化是否应该辞职。情况下“init”%设置情节或gui情况下“完成”%清理的阴谋、gui或最后的情节否则结束
停止标志
输出参数停止
是一个标志呢真正的
或假
。国旗告诉优化函数优化是否应该停止(真正的
)或继续(假
)。下面的例子展示典型的使用方法停止
国旗。
基于数据optimValues停止优化
输出函数或情节功能可以在任何迭代停止优化基于当前数据optimValues
。例如,下面的代码集停止
来真正的
停止优化,方向导数的大小小于. 01
:
函数停止= outfun (x, optimValues状态)停止= false;%检查方向导数规范是否小于. 01。如果规范(optimValues.directionalderivative) < . 01停止= true;结束
停止优化基于GUI的输入
如果你在设计一个GUI进行优化,可以使输出函数停止优化当用户点击停止在GUI按钮。下面的代码展示了如何做到这一点,假设停止按钮回调存储值真正的
在optimstop
一个领域处理
结构称为hObject
:
函数停止= outfun (x, optimValues状态)停止= false;%检查用户请求停止优化。停止= getappdata (hObject,“optimstop”);