主要内容

模拟退火的工作原理

算法概述

模拟退火算法执行如下步骤:

  1. 该算法生成一个随机试点。该算法通过概率分布来选择试验点与当前点的距离,其尺度取决于当前温度。你把试验点距离分布设为一个函数AnnealingFcn选择。选择:

    • @annealingfast(默认)-步长等于当前温度,方向均匀随机。

    • @annealingboltz—步长等于温度的平方根,方向均匀随机。

    • @myfun-自定义退火算法myfun.有关自定义退火函数的语法,请参见算法设置

    在生成试验点之后,如果有必要,算法会移动它,使其保持在界限之内。该算法将试验点的每个不可行分量移到在违逆界和(可行)值之间一致随机选择的值。

  2. 算法确定新点比当前点更好还是更差。如果新点比当前点更好,它就成为下一个点。如果新点比当前点差,算法仍然可以使它成为下一个点。算法根据接受函数接受较差的点。选择接受函数与AcceptanceFcn选择。选择:

    • @acceptancesa(默认)-模拟退火接受函数。接受的概率是

      1 1 + 经验值 Δ 马克斯 T

      在哪里

      Δ =新目标-旧目标。
      T0=元件初始温度
      T当前的温度。

      因为Δ和T是正的,接受的概率在0到1/2之间。温度越低,接受概率越小。此外,Δ越大,接受概率越小。

    • @myfun-自定义验收功能,myfun.有关自定义接受函数语法,请参见算法设置

  3. 该算法系统地降低温度,存储到目前为止找到的最佳点。的TemperatureFcn选项指定算法用来更新温度的函数。让k表示退火参数。(退火参数与重新退火前的迭代次数相同。)选项:

    • @temperatureexp(默认)TT0* 0.95 ^k

    • @temperaturefast- - - - - -TT0/k

    • @temperatureboltz- - - - - -TT0/日志(k

    • @myfun-自定义温度功能,myfun.有关自定义温度函数的语法,请参见温度的选择

  4. simulannealbnd接受后再退火ReannealInterval点。重新退火将退火参数设置为小于迭代数的值,从而提高每个维度的温度。退火参数依赖于目标函数在每个维度上的估计梯度值。基本公式是

    k 日志 T 0 T 马克斯 j 年代 j 年代

    在哪里

    k=组件的退火参数
    T0=元件初始温度
    T=元件当前温度
    年代=目标方向的梯度乘以方向上界限的差

    simulannealbnd保护退火参数值以及其他不恰当的值。

  5. 当目标函数的平均变化相对较小时,算法停止FunctionTolerance,或当它达到任何其他停止标准。看到算法的停止条件

有关该算法的更多信息,请参见Ingber[1]

算法的停止条件

模拟退火算法使用以下条件来确定何时停止:

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

  • MaxIterations—当迭代次数超过该最大迭代次数时,算法停止。您可以将最大迭代次数指定为正整数或.默认值为

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

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

  • ObjectiveLimit—当最佳目标函数值小于时,算法停止ObjectiveLimit.默认值为

参考书目

[1] Ingber, L。自适应模拟退火(ASA):经验教训.邀请报纸到特刊波兰控制和控制论杂志模拟退火在组合优化中的应用。1995。可以从https://www.ingber.com/asa96_lessons.ps.gz

另请参阅

相关的话题