模拟退火的工作原理
算法概述
模拟退火算法的步骤如下:
该算法生成一个随机试点。该算法根据当前温度的变化,采用具有一定尺度的概率分布来选择试验点到当前点的距离。将试点距离分布设为一个函数
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