主要内容

输出函数和绘图函数语法

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

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

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

类似地,PlotFcn选项指定优化函数在每次迭代时调用的一个或多个函数,并可以停止求解器。绘图函数和输出函数之间的区别是双重的:

  • 大多数求解器都有预定义的绘图函数,使您可以轻松获得典型的绘图。

  • plot函数将输出发送到具有暂停停止按钮,使您能够在不丢失信息的情况下提前停止求解程序。

谨慎

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

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

  1. 将函数作为函数文件或局部函数写入。

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

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

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

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

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

    tab补齐列表

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

传递额外的参数说明如何在必要时将参数或数据传递给输出函数或绘图函数。

输出函数或绘图函数的结构

输出函数或plot函数的函数定义线形式如下:

停止= outfun (x, optimValues状态)

在哪里

  • 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字段存在于某些求解器或算法中,但总是用空值或零值填充,所以没有意义。这些领域包括:

  • constrviolationfminuncTRfsolveTRR

  • 过程fminconTRRSQP,对于fminunc

optimValues字段

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

attainfactor

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

fgoalattain

没有一个

cgiterations

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

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

CG-iterations

看到迭代显示

constrviolation

最大的约束违反。

fgoalattainfminconfminimaxfseminf

fminuncTRfsolveTRR提供空白字段值。

马克斯约束可行性

看到迭代显示

简并

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

  • 对其中一个变量的偏导数在这一点是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线搜索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(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以下两种情况都是正确的:

  • 研究生(i) = 0

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

算法的状态

下表列出了可能的值状态

状态 描述

“init”

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

“中断”

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

“通路”

算法是在迭代的末尾。

“完成”

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

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

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

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

停止标志

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

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

输出函数或plot函数可以在基于中的当前数据的任何迭代中停止优化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;%检查用户是否请求停止优化。停止= getappdata (hObject,“optimstop”);

相关的话题