如何模拟退火工程

算法概述

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

  1. 算法生成一个随机试验点。该算法根据当前温度的概率分布来选择试验点到当前点的距离。你将试验点距离分布设为一个函数AnnealingFcn选项。选择:

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

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

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

    生成试验点后,算法如有必要,将其转移到界限内。该算法将试验点的每个不可行的组件从违反的界限和(可行的)值之间随机均匀地选择的值。

  2. 该算法确定新点是否比当前点更好或更差。如果新点比当前点好,则它将成为下一个点。如果新点比当前点差,则算法仍然可以使其成为下一个点。该算法基于验收功能接受更糟糕的点。选择接受功能AcceptanceFcn选项。选择:

    • @acceptansa.(默认) - 模拟退火验收功能。接受的可能性是

      1 1 + exp. Δ 马克斯 T.

      在哪里

      Δ=新客观的目标。
      T.0.=组件的初始温度一世
      T.=当前温度。

      因为Δ和T.是积极的,接受的概率在0到1/2之间。较小的温度导致较小的验收概率。而且,较大的δ导致较小的接受概率。

    • @myfun- 自定义验收功能,myfun.。对于自定义验收功能语法,请参阅算法设置

  3. 该算法系统地降低了温度,储存到目前为止发现的最佳点。这温度浮出水选项指定算法用于更新温度的功能。让K.表示退火参数。(退火参数与再退火前的迭代次数相同。)选项:

    • @temperatureexp(默认) -T.=T.0.* 0.95 ^K.

    • @temperaturefast-T.=T.0./K.

    • @temperatureboltz.-T.=T.0./ 日志(K.

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

  4. simulannealbnd接受后重新退火ReannealInterval.要点。Reannealing将退火参数设置为低于迭代号的值,从而提高每个维度的温度。退火参数取决于每个维度的目标函数的估计梯度的值。基本公式是

    K. 一世 = 日志 T. 0. T. 一世 马克斯 j S. j S. 一世

    在哪里

    K.一世=组件的退火参数一世
    T.0.=组件的初始温度一世
    T.一世=组件的电流温度一世
    S.一世物体方向的梯度一世时代界限的差异一世

    simulannealbnd保护退火参数值和其他不正当的值。

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

有关算法的更多信息,请参阅ingber[1]

停止算法的条件

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

  • functiontolerance.-算法运行到目标函数值的平均变化StallIterLim迭代率小于值functiontolerance.。默认值是1E-6

  • 最大- 当迭代的数量超过此最大迭代次数时,算法停止。您可以将最大迭代次数指定为正整数或。默认值是

  • MaxFunctionEvaluations.指定目标函数的最大评估数。如果函数评估的数量超过值,则该算法停止MaxFunctionEvaluations.。默认值是3000 * numberofvariables.

  • MaxTime指定算法在停止前运行的最长时间。默认值是

  • Objectivelimit.—当最佳目标函数值小于时,算法停止Objectivelimit.。默认值是-inf.

参考书目

[1] Ingber, L。自适应模拟退火(ASA):学习的经验教训。邀请纸张到一个特别的问题波兰期刊控制和控制论“模拟退火应用于组合优化”。1995.可用https://www.ingber.com/asa96_lessons.ps.gz.

也可以看看

相关的话题