模拟退火算法执行如下步骤:
该算法生成一个随机试点。该算法通过概率分布来选择试验点与当前点的距离,其尺度取决于当前温度。你把试验点距离分布设为一个函数AnnealingFcn
选择。选择:
@annealingfast
(默认)-步长等于当前温度,方向均匀随机。
@annealingboltz
—步长等于温度的平方根,方向均匀随机。
@myfun
-自定义退火算法myfun
.有关自定义退火函数的语法,请参见算法设置.
在生成试验点之后,如果有必要,算法会移动它,使其保持在界限之内。该算法将试验点的每个不可行分量移到在违逆界和(可行)值之间一致随机选择的值。
算法确定新点比当前点更好还是更差。如果新点比当前点更好,它就成为下一个点。如果新点比当前点差,算法仍然可以使它成为下一个点。算法根据接受函数接受较差的点。选择接受函数与AcceptanceFcn
选择。选择:
@acceptancesa
(默认)-模拟退火接受函数。接受的概率是
在哪里
Δ =新目标-旧目标。
T0=元件初始温度我
T当前的温度。
因为Δ和T是正的,接受的概率在0到1/2之间。温度越低,接受概率越小。此外,Δ越大,接受概率越小。
@myfun
-自定义验收功能,myfun
.有关自定义接受函数语法,请参见算法设置.
该算法系统地降低温度,存储到目前为止找到的最佳点。的TemperatureFcn
选项指定算法用来更新温度的函数。让k表示退火参数。(退火参数与重新退火前的迭代次数相同。)选项:
@temperatureexp
(默认)T=T0* 0.95 ^k.
@temperaturefast
- - - - - -T=T0/k.
@temperatureboltz
- - - - - -T=T0/日志(k).
@myfun
-自定义温度功能,myfun
.有关自定义温度函数的语法,请参见温度的选择.
simulannealbnd
接受后再退火ReannealInterval
点。重新退火将退火参数设置为小于迭代数的值,从而提高每个维度的温度。退火参数依赖于目标函数在每个维度上的估计梯度值。基本公式是
在哪里
k我=组件的退火参数我.
T0=元件初始温度我.
T我=元件当前温度我.
年代我=目标方向的梯度我乘以方向上界限的差我.
simulannealbnd
保护退火参数值正
以及其他不恰当的值。
当目标函数的平均变化相对较小时,算法停止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