主要内容

输出函数和情节函数的语法

输出函数和情节函数是什么?

输出函数和情节函数的例子,请参阅输出函数优化工具箱绘制函数

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

类似地,PlotFcn选项指定一个或多个函数的优化函数调用在每一次迭代,并且可以停止解决者。绘制函数和输出函数的区别有两个:

  • 预定义的情节功能存在对于大多数解决方案,使您能够轻易获得典型的情节。

  • 绘制函数将输出发送到一个窗口暂停停止按钮,使您能够阻止早期在不丢失信息的前提下解决。

谨慎

intlinprog输出函数和情节函数不同于其他连接器。看到intlinprog输出函数和情节函数的语法

建立一个输出函数或情节,做到以下几点:

  1. 把函数写成一个函数文件或本地函数。

  2. 使用optimoptions设置的价值OutputFcnPlotFcn一个函数处理,即由@符号之前的函数的名称。例如,如果输出函数outfun.m,命令

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

    指定OutputFcn句柄outfun。指定多个输出函数或函数,使用语法

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

    使用tab补齐来帮助选择一个内置的函数名,使用引号而不是一个函数处理。

    tab补齐列表

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

传递额外的参数解释如何传递参数或数据输出函数或情节,如果必要的。

结构输出函数或情节的功能

输出的函数定义行函数或情节函数具有以下形式:

停止= 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解决在某些领域存在或算法,但总是充满了空或零值,所以是没有意义的。这些领域包括:

  • constrviolationfminuncTRfsolveTRR

  • 过程fminconTRRSQP,对于fminunc

optimValues字段

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

attainfactor

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

fgoalattain

没有一个

cgiterations

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

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

CG-iterations

看到迭代显示

constrviolation

最大的约束违反。

fgoalattain,fmincon,fminimax,fseminf

fminuncTRfsolveTRR提供空白字段值。

马克斯约束可行性

看到迭代显示

简并

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

  • 偏导数的一个变量为0的点,和

  • 为该变量绑定约束活跃点。

看到简并度

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

没有一个

directionalderivative

搜索方向的方向导数。

fgoalattain,fmincon(),fminimax,fminunc(问),fseminf,fsolve(LM),lsqcurvefit(LM),lsqnonlin(LM)

方向导数

看到迭代显示

firstorderopt

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

fgoalattain,fmincon,fminimax,fminunc,fseminf,fsolve,lsqcurvefit,lsqnonlin

一阶最优性

看到迭代显示

funccount

累积的数量评估函数。终值等于优化函数输出output.funcCount

fgoalattain,fminbnd,fmincon,fminimax,fminsearch,fminunc,fsolve,fzero,fseminf,lsqcurvefit,lsqnonlin

F-countFunc-count

看到迭代显示

fval

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

fsolve,fval是向量函数值,迭代显示f (x)这个向量的平方准则。

fgoalattain,fminbnd,fmincon,fminimax,fminsearch,fminunc,fseminf,fsolve,fzero

f (x)

看到迭代显示

梯度

当前的目标函数梯度,分析梯度如果你提供或有限差分近似。终值等于优化函数输出研究生

fgoalattain,fmincon,fminimax,fminunc,fseminf,fsolve,lsqcurvefit,lsqnonlin

没有一个

迭代

迭代次数——开始0。终值等于优化函数输出output.iterations

fgoalattain,fminbnd,fmincon,fminimax,fminsearch,fminunc,fsolve,fseminf,fzero,lsqcurvefit,lsqnonlin

迭代

看到迭代显示

λ

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)

没有一个

过程

过程信息。

fgoalattain,fminbnd,fmincon(),fminimax,fminsearch,fseminf,fzero

fminconTRRSQP,fminunc提供空白字段值。

过程

看到迭代显示

目标函数的变化比二阶近似的变化。

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

没有一个

剩余

残余向量。

lsqcurvefit,lsqnonlin,

剩余

看到迭代显示

resnorm

2-norm残余的平方。

lsqcurvefit,lsqnonlin

Resnorm

看到迭代显示

searchdirection

搜索方向。

fgoalattain,fmincon(SQP),fminimax,fminunc(问),fseminf,fsolve(LM),lsqcurvefit(LM),lsqnonlin(LM)

没有一个

stepaccept

当前的信赖域步的状态。返回true,如果当前信赖域步是成功的,和假如果信赖域步是不成功的。

fsolve(D)

没有一个

stepsize

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

fgoalattain,fmincon,fminimax,fminunc,fseminf,fsolve,lsqcurvefit,lsqnonlin

步长一步规范

看到迭代显示

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(我)等于入口较低或上界。

算法的状态

下表列出了可能的值状态:

状态 描述

“init”

该算法在第一次迭代前的初始状态。

“中断”

该算法在某些迭代计算昂贵的部分。在这种状态下,输出函数可以中断当前迭代的优化。在这个时候,的值xoptimValues是一样的在最后的输出函数调用吗状态= =“通路”

“通路”

该算法是迭代的末尾。

“完成”

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

“中断”只有在发生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”);

相关的话题