主要内容

模拟退火方法

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

通过创建一个指定选项选项对象使用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等等情节功能函数处理。

如果你指定多个图函数,所有情节作为次要情节出现在同一个窗口中。右键单击任何次要情节获得在一个单独的图放大窗口。

情节结构的功能

第一行的函数形式的阴谋

函数停止= plotfun(选项、optimvalues标志)

函数的输入参数

  • 选项——选项创建使用optimoptions

  • optimvalues——结构包含的当前状态信息解算器。该结构包含以下字段:

    • x——当前点

    • fval——目标函数在x的值

    • bestx发现到目前为止-最佳点

    • bestfval在最佳点,目标函数值

    • 温度——当前温度

    • 迭代——当前迭代

    • funccount——数量评估函数

    • t0——开始时间算法

    • k——退火参数

  • 国旗——情节函数被调用的当前状态。可能的值国旗

    • “init”——初始化状态

    • “通路”——迭代状态

    • “完成”——最终状态

输出参数停止提供了一种方法来停止在当前迭代算法。停止可以有以下值:

  • ——继续下一次迭代的算法。

  • 真正的——在当前迭代算法终止。

温度的选择

温度选项指定如何降低温度在每个迭代的算法。

  • InitialTemperature——初始温度的算法。默认值是One hundred.。初始温度可以是一个向量的长度相同x向量的未知数。simulannealbnd扩展一个标量初始温度为一个向量。

  • TemperatureFcn——温度函数用于更新时间表。让k表示退火参数。(退火参数是一样的迭代数,直到再次退火)。的选项是:

    • “temperatureexp”——温度等于InitialTemperature * 0.95 ^k。这是默认的。

    • “temperaturefast”——温度等于InitialTemperature /k

    • “temperatureboltz”——温度等于InitialTemperature / ln (k)

    • @myfun——使用一个自定义函数,myfun,更新温度。的语法是:

      温度= myfun (optimValues选项)

      在哪里optimValues是一个结构描述的情节结构的功能选项要么是创建optimoptions或由默认选项,如果您没有创建任何选项。两个退火参数optimValues.k和温度optimValues.temperature向量的长度等于当前点的元素的数量x。例如,函数temperaturefast是:

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

算法设置

算法设置定义算法中使用特定的参数生成新的点在每个迭代。

可以指定参数simulannealbnd是:

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

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

    • “自定义”——其他任何数据类型。你必须提供一个“自定义”退火函数。你不能使用混合功能。

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

    • “annealingfast”——步长度温度,随机方向一致。这是默认的。

    • “annealingboltz”——温度的步骤长度的平方根,随机方向一致。

    • @myfun——使用一个定制的退火算法,myfun。的语法是:

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

      • 客观的目标函数:函数处理

      • x0:起点

      • 据nvar:决策变量的数量

      • 决策变量:下界

      • 乌兰巴托决策变量:上界

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

      您可以编写一个自定义目标函数通过修改saannealingfcntemplate.m文件。保持所有迭代在允许范围内,您的自定义退火函数调用sahonorbounds最后一个命令。

  • ReannealInterval——点接受再次退火前的数量。默认值是One hundred.

  • AcceptanceFcn——函数用来决定是否一个新的点接受。的选择是:

    • “acceptancesa”——模拟退火接受函数,默认。如果新的目标函数值小于旧的,新的点总是接受。否则,新观点是接受随机概率取决于目标函数值的差异和对当前温度。接受概率是

      1 1 + 经验值 ( Δ 马克斯 ( T ) ) ,

      Δ= new客观历史的客观,T是当前温度。因为Δ和T是积极的,接受的概率是0到1/2。温度会导致小接受概率。同时,大Δ导致较小的接受概率。

    • @myfun——自定义验收功能,myfun。的语法是:

      acceptpoint = myfun (optimValues newx newfval);
      在哪里optimValues是一个结构描述的结构的输出功能,newx重点是评估验收,newfval目标函数在哪里newxacceptpoint一个布尔值,值吗真正的接受newx,拒绝newx

混合功能选项

混合函数是另一个最小化函数运行期间或结束时的迭代解算器。HybridInterval指定时间间隔(如果不是从来没有结束)的混合函数被调用。您可以指定一个混合函数使用HybridFcn选择。的选择是:

  • []——没有混合功能。

  • “fminsearch”——使用MATLAB®函数fminsearch执行无约束极小化。

  • “patternsearch”——使用patternsearch执行限制或无约束极小化。

  • “fminunc”——使用优化工具箱™函数fminunc执行无约束极小化。

  • “fmincon”——使用优化工具箱函数fmincon执行约束最小化。

请注意

确保你的混合函数接受你的问题约束。否则,simulannealbnd抛出一个错误。

你可以设置单独的选项混合功能。使用optimsetfminsearch,或optimoptionsfmincon,patternsearch,或fminunc。例如:

hybridopts = optimoptions (“fminunc”,“显示”,“通路”,“算法”,“拟牛顿”);
包括中的混合选项simulannealbnd 选项如下:
选择= optimoptions (@simulannealbnd选项,“HybridFcn”,{@fminunc, hybridopts});
hybridopts必须存在之前,你准备好了吗选项

看到遗传算法的混合方案了一个例子。看到当使用混合功能

停止条件的选择

停止标准确定的算法将会被终止。您可以指定以下选项:

  • FunctionTolerance——算法运行直到目标函数的平均变化值StallIterLim迭代小于FunctionTolerance。默认值是1 e-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的值

    • bestx发现到目前为止-最佳点

    • bestfval在最佳点,目标函数值

    • 温度——当前温度,相同长度的向量x

    • 迭代——当前迭代

    • funccount——数量评估函数

    • t0——开始时间算法

    • k——退火参数,一个向量长度一样x

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

    • “init”——初始化状态

    • “通路”——迭代状态

    • “完成”——最终状态

传递额外的参数解释如何提供额外的参数函数的输出。

输出函数返回以下参数:

  • 停止——提供了一种方法来停止在当前迭代算法。停止可以有以下值:

    • ——继续下一次迭代的算法。

    • 真正的——在当前迭代算法终止。

  • 选项——选项修改输出函数。

  • optchanged——一个布尔标志指示发生了改变选项。这必须设置为真正的如果选择改变。

显示选项

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

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

  • iter——信息显示在每一个迭代。

  • 诊断——信息显示在每一个迭代。此外,诊断信息和列出了一些问题已经从默认的选项。

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

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

  • 迭代——迭代数

  • f-count——累积数量的目标函数的评价

  • 最好的f (x)-最佳目标函数值

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

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