主要内容

输出函数和图函数语法

什么是输出函数和绘图函数?

有关输出函数和绘图函数的示例,请参见优化工具箱的输出函数而且绘制函数

OutputFcn选项指定优化函数在每次迭代时调用的一个或多个函数。通常,您可以使用输出函数在每次迭代中绘制点,或者显示算法中的优化量。使用输出函数可以查看(但不能设置)优化量。你也可以根据你设置的条件暂停求解器的执行;看到输出函数或图函数的结构

类似地,PlotFcn选项指定优化函数在每次迭代时调用的一个或多个函数,并可以暂停求解器。图函数和输出函数的区别有两点:

  • 预定义的图形函数存在于大多数求解器中,使您能够轻松获得典型的图形。

  • 绘图函数将输出发送到窗口暂停而且停止按钮,使您能够在不丢失信息的情况下提前停止求解器。

谨慎

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

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

  1. 将函数写为函数文件或本地函数。

  2. 使用optimoptions的值OutputFcnPlotFcn为函数句柄,即函数名前面加@符号。例如,如果输出函数为outfun.m,命令

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

    指定OutputFcn成为…的手柄outfun.若要指定多个输出函数或绘图函数,请使用语法

    选项= optimoptions(“solvername”“OutputFcn”, {@outfun, @outfun2});

    若要使用制表符补全帮助选择内置绘图函数名,请使用引号而不是函数句柄。

    tab补齐列表

  3. 调用优化函数选项作为输入参数。

传递额外参数说明如何将参数或数据传递给输出函数或绘图函数(如有必要)。

输出函数或图函数的结构

输出函数或绘图函数的函数定义行有如下形式:

stop = outfun(x,optimValues,state)

在哪里

  • x是算法在当前迭代中计算出的点。

  • optimValues包含来自当前迭代的数据的结构。optimValues字段详细描述了结构。

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

  • 停止那是国旗吗真正的根据优化例程是否应该停止(真正的)或继续().详细信息请参见停止标志

优化函数将输入参数的值传递给outfun在每次迭代中。

optimValues字段

字段说明如下表所示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字段存在于某些求解器或算法中,但总是被空值或零值填充,因此毫无意义。这些字段包括:

  • constrviolationfminuncTR而且fsolveTRR

  • 过程fminconTRR而且SQP,以及fminunc

optimValues字段

优化值字段(OptimValues . Field) 描述 函数返回 命令行显示

attainfactor

多目标问题的实现因子。详细信息请参见目标实现方法

fgoalattain

没有一个

cgiterations

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

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

CG-iterations

看到迭代显示

constrviolation

最大约束违反。

fgoalattainfminconfminimaxfseminf

fminuncTR而且fsolveTRR提供空白字段值。

马克斯约束可行性

看到迭代显示

简并

简并度的度量。重点是简并如果:

  • 对其中一个变量的偏导数在这一点上为0,并且

  • 在该点上,该变量的绑定约束是活动的。

看到简并度

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

没有一个

directionalderivative

搜索方向的方向导数。

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

方向导数

看到迭代显示

firstorderopt

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

fgoalattainfminconfminimaxfminuncfseminffsolvelsqcurvefitlsqnonlin

一阶最优性

看到迭代显示

funccount

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

fgoalattainfminbndfminconfminimaxfminsearchfminuncfsolvefzerofseminflsqcurvefitlsqnonlin

F-countFunc-count

看到迭代显示

fval

函数值在当前点。最终值等于优化函数输出fval

fsolvefval是向量函数的值,并迭代显示f (x)是这个向量的模的平方。

fgoalattainfminbndfminconfminimaxfminsearchfminuncfseminffsolvefzero

f (x)

看到迭代显示

梯度

目标函数的当前梯度——如果你提供的话,可以是解析梯度,也可以是有限差分近似。最终值等于优化函数输出研究生

fgoalattainfminconfminimaxfminuncfseminffsolvelsqcurvefitlsqnonlin

没有一个

迭代

迭代数-开始于0.最终值等于优化函数输出output.iterations

fgoalattainfminbndfminconfminimaxfminsearchfminuncfsolvefseminffzerolsqcurvefitlsqnonlin

迭代

看到迭代显示

λ

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

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

λ

lssteplength

实际步长除以最初预测的步长

fmincon(SQP),fminunc(问)

Steplength行搜索步长步长

看到迭代显示

maxfval

最大函数值

fminimax

没有一个

positivedefinite

0if算法在计算牛顿步时检测到负曲率。

1否则。

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

没有一个

过程

过程信息。

fgoalattainfminbndfmincon(),fminimaxfminsearchfseminffzero

fminconTRR而且SQP,fminunc提供空白字段值。

过程

看到迭代显示

目标函数变化量与二次近似变化量的比值。

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

没有一个

剩余

残差向量。

lsqcurvefitlsqnonlin

剩余

看到迭代显示

resnorm

残差平方的2模。

lsqcurvefitlsqnonlin

Resnorm

看到迭代显示

searchdirection

搜索方向。

fgoalattainfmincon(SQP),fminimaxfminunc(问),fseminffsolve(LM),lsqcurvefit(LM),lsqnonlin(LM)

没有一个

stepaccept

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

fsolve(D)

没有一个

stepsize

当前步长(位移x).最终值等于优化函数输出output.stepsize

fgoalattainfminconfminimaxfminuncfseminffsolvelsqcurvefitlsqnonlin

步长阶数规范

看到迭代显示

trustregionradius

信任区域半径。

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

信赖域半径

看到迭代显示

简并度

字段的值简并,表示当前优化点的简并度x,定义如下。首先,定义一个向量r,大小与x,为此r(我)最小距离是多少x(我)下界和上界的第Th项,而且乌兰巴托.也就是说,

R = min(abs(ub-x, x-lb))

然后是简并向量的最小元素是什么R + abs(毕业),在那里研究生是目标函数的梯度。的价值简并如果有索引则为0以下两种情况都成立:

  • Grad (i) = 0

  • x(我)等于下界或上界的项。

算法状态

下表列出了的可能值状态

状态 描述

“init”

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

“中断”

该算法是在迭代的一些计算昂贵的部分。在这种状态下,输出函数可以中断优化的当前迭代。此时,值x而且optimValues与最后一次调用输出函数时相同状态= =“通路”

“通路”

该算法处于迭代的末尾。

“完成”

在最后一次迭代后,算法处于最终状态。

“中断”状态仅在fmincon“激活集”算法和fgoalattainfminimax,fseminf解决者。在那里,这种状态可以出现在二次规划子问题求解或直线搜索之前。

下面的代码说明了输出函数如何使用值状态决定在当前迭代中执行哪些任务:

开关状态情况下“通路”根据需要更新绘图或图形界面。情况下“中断”这里可能没有行动。检查条件以查看%是否应该停止优化。情况下“init”%用于设置图形或图形界面情况下“完成”%清理的情节,gui,或最终情节否则结束

停止标志

输出参数停止那是国旗吗真正的.该标志告诉优化函数优化是否应该停止(真正的)或继续().属性的典型使用方法停止国旗。

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

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

函数stop = outfun(x,optimValues,state) stop = false;%检查方向导数范数是否小于0.01。如果norm(optimValues.directionalderivative) < .01 stop = true;结束

停止基于GUI输入的优化

如果将GUI设计为执行优化,则可以使输出函数在用户单击时停止优化停止按钮。下面的代码展示了如何做到这一点,假设停止按钮回调存储值真正的optimstop字段处理结构称为hObject

函数stop = outfun(x,optimValues,state) stop = false;检查用户是否要求停止优化。stop = getappdata(hObject,“optimstop”);

相关的话题