输出功能语法

什么是输出函数?

Outputfcn领域的选项指定一个或多个功能,在每次迭代优化的函数调用。通常情况下,你可能会在每次迭代使用输出功能积点或从算法优化的显示数量。使用输出功能,您可以查看,但不能设置,优化的数量。

谨慎

intlinprog输出函数和绘图函数与其他求解器不同。看到intlinprog输出函数和绘图函数语法

要设置输出函数,请执行以下操作:

  1. 写输出功能的函数文件或局部功能。

  2. 采用optimoptions设置的值Outputfcn作为函数句柄,即函数名的前面加上@符号。例如,如果输出函数是outfun.m, 命令

    选项= optimoptions(@ solvername, 'OutputFcn',@outfun);

    指定OutputFcn成为…的把柄outfun。要指定多个输出函数,请使用语法

    选项= optimoptions(@ solvername, 'OutputFcn',{@ outfun,@ outfun2});
  3. 调用优化函数选项作为输入参数。

看到输出功能作为一个输出函数的例子。

传递额外的参数说明如何参数化的输出功能OutputFcn,如果必要的。

输出函数的结构

输出函数的函数定义行具有下列形式:

停止= outfun (x, optimValues状态)

在哪里

  • X是在当前迭代由所述算法计算的点。

  • optimValues是从当前迭代包含数据的结构。在optimValues领域详细描述的结构。

  • 状态是算法的当前状态。算法状态列出可能的值。

  • 国旗是吗真正的取决于优化例程应该退出还是继续。看到停止标志为更多的信息。

优化功能传递的输入参数的值outfun在每一个迭代。

在optimValues领域

下表列出了的字段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对于fminuncTRfsolveTRR

  • 程序对于fminconTRRSQP,对于fminunc

optimValues场

OptimValues字段(optimValues.field) 描述 通过函数返回 命令行显示

attainfactor

多目标的问题达成的因素。有关详细信息,请参阅目标的实现方法

fgoalattain

没有一个

cgiterations

在当前优化迭代共轭梯度迭代次数。

fminconTRR (IP),fminunc(TR),fsolve(TRR),lsqcurvefit(TRR),lsqnonlin(TRR)

CG迭代

看到迭代显示

constrviolation

最大约束冲突。

fgoalattainfminconfminimaxfseminf

fminuncTRfsolveTRR提供空白字段的值。

马克斯约束可行性

看到迭代显示

简并

简并度的测量。一个点是简并如果

相对于其中一个变量的偏导数的点处为0。

甲界约束为在该点处该变量活性。

看到

fmincon(TRR),lsqcurvefit(TRR),lsqnonlin(TRR)

没有一个

directionalderivative

在搜索方向定向衍生物。

fgoalattainfmincon(),fminimaxfminunc(Q),fseminffsolve(LM),lsqcurvefit(LM),lsqnonlin(LM)

方向导数

看到迭代显示

firstorderopt

一阶最优性(取决于算法)。最终值等于优化功能输出output.firstorderopt

fgoalattainfminconfminimaxfminuncfseminffsolvelsqcurvefitlsqnonlin

一阶最优性

看到迭代显示

funccount

函数计算的累积次数。最终值等于优化功能输出output.funcCount

fgoalattainfminbndfminconfminimaxfminsearchfminuncfsolvefzerofseminflsqcurvefitlsqnonlin

F-countFUNC数

看到迭代显示

FVAL

函数在当前点的值。最终值等于优化功能输出FVAL

对于fsolveFVAL是矢量函数值,还是迭代显示f (x)这是矢量的平方范。

fgoalattainfminbndfminconfminimaxfminsearchfminuncfseminffsolvefzero

f (x)

看到迭代显示

梯度

目标函数的当前梯度 - 如果你提供给它或有限差分逼近无论是分析梯度。最终值等于优化功能输出研究生

fgoalattainfminconfminimaxfminuncfseminffsolvelsqcurvefitlsqnonlin

没有一个

迭代

迭代次数-从0。最终值等于优化功能输出output.iterations

fgoalattainfminbndfminconfminimaxfminsearchfminuncfsolvefseminffzerolsqcurvefitlsqnonlin

迭代

看到迭代显示

λ

Levenberg-Marquardt参数,λ在当前迭代。看到Levenberg-Marquardt方法

fsolve(LM),lsqcurvefit(LM),lsqnonlin(LM)

LAMBDA

lssteplength

实际步长除以初始预测步长

fmincon(AS,SQP),fminunc(Q)

Steplength线搜索步长步长

看到迭代显示

maxfval

函数值最大

fminimax

没有一个

positivedefinite

0如果算法检测到负曲率而计算牛顿步。

1除此以外。

fmincon(TRR),fminunc(TR),fsolve(TRR),lsqcurvefit(TRR),lsqnonlin(TRR)

没有一个

程序

程序的消息。

fgoalattainfminbndfmincon(),fminimaxfminsearchfseminffzero

fminconTRRSQP,fminunc提供空白字段的值。

程序

看到迭代显示

在目标函数的变化率在二次近似改变。

fmincon(TRR),fminunc(TR),fsolve(TRR),lsqcurvefit(TRR),lsqnonlin(TRR)

没有一个

剩余的

残差向量。

lsqcurvefitlsqnonlin

剩余的

看到迭代显示

resnorm

残余平方的2-范数。

lsqcurvefitlsqnonlin

Resnorm

看到迭代显示

searchdirection

搜索方向。

fgoalattainfmincon(AS,SQP),fminimaxfminunc(Q),fseminffsolve(LM),lsqcurvefit(LM),lsqnonlin(LM)

没有一个

stepaccept

当前信任区域步骤的状态。如果当前信任区域步骤成功,则返回true;如果当前信任区域步骤不成功,则返回false。

fsolve(D)

没有一个

stepsize

当前步长(在位移X)。最终值等于优化功能输出output.stepsize

fgoalattainfminconfminimaxfminuncfseminffsolvelsqcurvefitlsqnonlin

步长一步规范

看到迭代显示

trustregionradius

信任区域的半径。

fminconTRR (IP),fminunc(TR),fsolve(d,TRR),lsqcurvefit(TRR),lsqnonlin(TRR)

信任区域半径

看到迭代显示

该字段的值简并,其测量电流的优化点的简X被定义为如下。首先,定义一个矢量[R的尺寸相同的X,R(I)距离的最小值是多少X(ⅰ)一世下界和上界的第n个元素,乌兰巴托。也就是说,

r = min(abs(ab -x, x-lb))

那么简并是矢量的最小条目R + ABS(毕业),在那里研究生是目标函数的梯度。的价值简并如果有索引,是0吗一世对于这两个以下为真:

  • 研究生(i) = 0

  • X(ⅰ)等于一世下界或上界的第一个入口。

算法状态

下表列出了可能的值状态

描述

“init”

算法在第一次迭代前处于初始状态。

“中断”

该算法是迭代中计算开销较大的部分。在这种状态下,输出函数可以中断当前的优化迭代。此时,的值XoptimValues是一样的,在对输出功能的最后一次通话中,状态= =“通路”

'ITER'

该算法是在迭代的结束。

“完成”

该算法是在最后一次迭代后的最终状态。

“中断”状态仅在发生fmincon“有源集”算法和fgoalattainfminimax,fseminf求解。在那里,可以在二次规划子问题的解决方案或线搜索出现之前的状态。

下面的代码演示了如何输出功能可以使用的值状态决定在当前迭代完成哪些任务:

开关状态情况下'ITER'根据需要更新plot或gui情况下“中断”这里可能没有动作。检查条件%是否应该退出优化。情况下“init”设置绘图区或gui情况下“完成”的曲线,图形用户界面,或最终积%清理除此以外结束

停止标志

输出参数国旗是吗真正的。该标志告诉优化函数的优化是否应该退出或继续。下面的例子说明了使用典型的方式国旗。

停止基于优化值中的数据的优化

输出函数可以在基于当前数据的任何迭代中停止优化optimValues。例如,下面的代码集真正的如果方向导数小于. 01

功能STOP = outfun(X,optimValues,状态)停止= FALSE;%检查方向导数是否小于0.01。如果optimValues.directionalderivative <0.01光阑= TRUE;结束

停止基于GUI输入的优化

如果你设计一个GUI进行优化,可以使当用户点击一个输出功能停止优化停止在GUI按钮。下面的代码演示如何做到这一点,假设停止按钮回调存储的值真正的在里面optimstop一个场处理结构称为hObject

功能STOP = outfun(X,optimValues,状态)停止= FALSE;检查用户是否请求停止优化。停止= getappdata (hObject,“optimstop”);