主要内容

模拟退火方法

在命令行设置模拟退火选项

通过创建一个选择选项选项对象使用optimoptions函数如下:

选项= Optimoptions(@simulannealbnd,......'param1'value1,'param2'value2,......);

本节中的每个选项都是由其字段名称列出的选项.例如,InitialTemperature表示对应的字段选项

情节选项

绘图选项使您能够在模拟退火求解器运行时绘制数据。

PlotInterval指定对绘图函数的连续调用之间的迭代次数。

调用时显示情节simulannealbnd从命令行中,设置PlotFcn现场选项作为绘图函数的内置绘图函数名或句柄。你可以指定以下任意一个图:

  • 'saplotbestf'绘制最佳目标函数值。

  • “saplotbestx”绘制当前最好的点。

  • “saplotf”绘制当前函数值。

  • “saplotx”绘制当前点。

  • “saplotstopping”地块停止标准水平。

  • “saplottemperature”绘制每次迭代的温度。

  • @myfun绘制自定义绘图函数,其中myfun.是函数的名称。看到绘图功能的结构有关语法的描述。

例如,要显示最好的目标图,设置选项如下

选项= Optimoptions(@ simulannealbnd,'plotfcn','saplotbestf');

要显示多个图,请使用单元格数组语法

选项= Optimoptions(@simulannealbnd,......“PlotFcn”, {@plotfun1 @plotfun2,......});

在哪里@plotfun1@plotfun2,等等是plot函数的函数句柄。

如果指定多个绘图函数,所有绘图将作为子绘图显示在同一个窗口中。在单独的图形窗口中,右键单击任何子图以获得更大的版本。

绘图功能的结构

绘图函数的第一行具有表单

函数stop = plotfun(options,optimvalues,flag)

函数的输入参数是

  • 选项-使用optimoptions

  • optimvalues-包含关于求解器当前状态信息的结构。该结构包含以下字段:

    • x——当前点

    • fval- X的目标函数值

    • 贝斯克-迄今为止发现的最好的点

    • bestfval- 最佳点目标价值

    • 温度- 电流温度

    • 迭代- 电流迭代

    • Funccount.—函数计算次数

    • T0.—算法的开始时间

    • k——退火参数

  • 国旗- 调用绘图函数的当前状态。可能的值国旗

    • '在里面'——初始化状态

    • “通路”- 迭代状态

    • “完成”- 最终状态

输出参数停止提供在当前迭代时停止算法的方法。停止可以具有以下值:

  • - 算法继续到下一次迭代。

  • 真的- 算法在当前迭代处终止。

温度的选择

温度选项指定在算法过程中的每次迭代中如何降低温度。

  • InitialTemperature- 算法开始时的初始温度。默认为100..初始温度可以是一个长度相同的向量x,未知量的向量。simulannealbnd将标量初始温度展开成矢量。

  • 温度浮出水- 用于更新温度计划的功能。让k表示退火参数。(退火参数与重新退火前的迭代次数相同。)的选项是:

    • “temperatureexp”-温度等于InitialTemperature * 0.95 ^k.这是默认值。

    • “temperaturefast”-温度等于initialTemperature /k

    • “temperatureboltz”-温度等于initialtemperature / ln(k

    • @myfun-使用自定义函数,myfun.,以更新温度。的语法是:

      温度= myfun (optimValues选项)

      在哪里optimValues结构描述在绘图功能的结构选项是由optimoptions,或由默认选项组成,如果您没有创建任何选项。退火参数优化values.k.和温度optimValues.temperature长度等于当前点的元素数量的载体x.例如,函数temperaturefast是:

      温度= options.InitialTemperature. / optimValues.k;

算法设置

算法设置定义在每次迭代时生成新点的算法特定参数。

可以指定的参数simulannealbnd是:

  • 数据类型-在目标函数中使用的数据类型。选择:

    • “双”(默认)-一个类型的向量

    • '风俗'- 任何其他数据类型。你必须提供一个'风俗'退火功能。您不能使用混合函数。

  • AnnealingFcn-用于为下一次迭代生成新点的函数。的选择是:

    • 'Annealingfast'-台阶具有长度温度,方向均匀随机。这是默认值。

    • “annealingboltz”- 该步骤具有温度的长度平方根,随机均匀均匀。

    • @myfun-使用自定义退火算法,myfun..的语法是:

      newx = myfun(Optimvalues,问题)
      在哪里optimValues结构描述在输出函数的结构, 和问题是一个包含以下信息的结构:

      • 客观的:目标函数的功能手柄

      • X0.:起点

      • 据nvar:决策变量的数量

      • :决策变量的下界

      • UB.:决策变量的上界

      例如,当前的位置是OptimValues.x.,当前目标函数值为problem.objective (optimValues.x)

      您可以通过修改自定义目标函数来编写自定义目标函数saannealingfcntemplate.m文件。要保持所有迭代都在限定范围内,可以使用自定义的退火函数调用sahonorbounds作为最后的命令。

  • ReannealInterval- 在成果之前接受的积分数。默认值为100.

  • AcceptanceFcn-用于确定是否接受新点的函数。的选择是:

    • “acceptancesa”- 模拟退火验收功能,默认值。如果新的目标函数值小于旧的,则始终接受新点。否则,以概率随意接受新点,这取决于目标函数值的差异和当前温度。接受概率是

      1 1 + exp. Δ 马克斯 T

      其中δ=新客观的目标,T为当前温度。因为Δ和T是积极的,接受的可能性在0到1/2之间。较小的温度导致较小的验收概率。而且,较大的δ导致较小的接受概率。

    • @myfun-自定义接受函数,myfun..的语法是:

      acceptpoint = myfun (optimValues newx newfval);
      在哪里optimValues结构描述在输出函数的结构新兴这个点是否被评估为可接受的,并且newfval目标函数在新兴acceptpoint是一个布尔,有价值真的接受新兴, 和拒绝新兴

混合函数选项

混合函数是求解器迭代过程中或迭代结束时运行的另一个最小化函数。HybridInterval指定间隔(如果不是的话)从来没有或者结束),调用混合函数。属性指定混合函数Hybridfcn.选项。的选择是:

  • []—无混合功能。

  • 'fminsearch'-使用MATLAB®功能fminsearch.执行无约束极小化。

  • “patternsearch”——使用patternsearch执行受约束或无约束的最小化。

  • 'fminunc'-使用优化工具箱™功能Fminunc.执行无约束极小化。

  • “fmincon”—使用“优化工具箱”功能粉刺执行约束最小化。

请注意

确保您的混合函数接受您的问题约束。除此以外,simulannealbnd抛出一个错误。

您可以为混合函数设置单独的选项。用优化集fminsearch., 或者optimoptions粉刺patternsearch, 或者Fminunc..例如:

Hybridopts = Optimoptions('fminunc'......“显示”“通路”“算法”“拟牛顿”);
的混合选项simulannealbnd 选项如下:
选择= optimoptions (@simulannealbnd选项,......'hybridfcn', {@fminunc, hybridopts});
杂交必须在您设置之前存在选项

看到遗传算法中的混合方案了一个例子。看到何时使用混合函数

停止条件的选择

停止标准确定导致算法终止的原因。您可以指定以下选项:

  • FunctionTolerance-算法运行直到目标函数值的平均变化StallIterLim迭代次数少于FunctionTolerance.默认值为1E-6

  • MaxIterations- 如果迭代次数超过此最大迭代次数,则停止该算法。您可以将最大迭代次数指定为正整数或是默认的。

  • MaxFunctionEvaluations指定目标函数的最大求值次数。如果函数求值的数量超过最大函数求值的数量,则算法停止。允许的最大值为3000 * numberofvariables

  • MaxTime指定算法停止前运行的最大时间(以秒为单位)。

  • ObjectiveLimit—当可行点的最佳目标函数值小于时,算法停止ObjectiveLimit

输出函数的选择

输出函数是算法在每次迭代时调用的函数。默认值是没有输出函数,[].首先必须使用中描述的语法创建输出函数输出函数的结构

使用优化应用程序:

  • 指定输出函数作为@myfun,在那里myfun.是函数的名称。

  • 要在输出函数中传递额外的参数,请使用匿名函数

  • 对于多个输出函数,输入输出函数句柄的单元格数组:{@ myfun1,@ myfun2,...}

在命令行:

  • 选项= Optimoptions(@ simulannealbnd,'outputfcn',@ myfun);

  • 对于多个输出函数,请输入函数句柄的单元格数组:

    选项= Optimoptions(@simulannealbnd,......'outputfcn',{@ myfun1,@ myfun2,......});

要查看可用于编写自己的输出功能的模板,请输入

编辑saoutputfcntemplate

在matlab命令行。

输出函数的结构

输出函数的调用语法如下。

(停止、选择optchanged) = myfun(选项、optimvalues标志)

该函数具有以下输入参数:

  • 选项-使用optimoptions

  • optimvalues-包含关于求解器当前状态信息的结构。该结构包含以下字段:

    • x——当前点

    • fval- X的目标函数值

    • 贝斯克-迄今为止发现的最好的点

    • bestfval- 最佳点目标价值

    • 温度-当前温度,与之长度相同的矢量x

    • 迭代- 电流迭代

    • Funccount.—函数计算次数

    • T0.—算法的开始时间

    • k-退火参数,一个长度相同的矢量x

  • 国旗-调用输出函数的当前状态。可能的值国旗

    • '在里面'——初始化状态

    • “通路”- 迭代状态

    • “完成”- 最终状态

通过额外的参数说明如何向输出函数提供附加参数。

输出函数返回以下参数:

  • 停止-提供在当前迭代时停止算法的方法。停止可以具有以下值:

    • - 算法继续到下一次迭代。

    • 真的- 算法在当前迭代处终止。

  • 选项- 由输出函数修改的选项。

  • optchanged-一个布尔标志,指示更改选项.这必须设置为真的如果选项改变了。

显示选项

使用展示选项指定在运行算法时在命令行显示多少信息。可用的选项有

  • - 没有显示输出。这是默认值选项从优化应用程序导出。

  • iter—每次迭代都会显示信息。

  • 诊断—每次迭代都会显示信息。此外,诊断程序还列出了一些问题信息和从默认设置更改的选项。

  • 最后- 显示停止的原因。这是创建的选项的默认值optimoptions

这两个iter诊断显示如下信息:

  • 迭代- 迭代号码

  • F计数-目标函数评估的累计次数

  • 最好的f (x)- 最佳客观函数值

  • 当前f (x)- 当前的目标函数值

  • 平均温度-平均温度函数值