模拟退火算法执行以下步骤:
算法生成一个随机试验点。该算法根据当前温度的概率分布来选择试验点到当前点的距离。你将试验点距离分布设为一个函数AnnealingFcn
选项。选择:
@annealingfast
(默认)-步长等于当前温度,方向是均匀随机的。
@annealingboltz
- 步长等于温度的平方根,方向均匀随机。
@myfun
- 定制退火算法,myfun.
。有关自定义退火函数语法,请参见算法设置。
生成试验点后,算法如有必要,将其转移到界限内。该算法将试验点的每个不可行的组件从违反的界限和(可行的)值之间随机均匀地选择的值。
该算法确定新点是否比当前点更好或更差。如果新点比当前点好,则它将成为下一个点。如果新点比当前点差,则算法仍然可以使其成为下一个点。该算法基于验收功能接受更糟糕的点。选择接受功能AcceptanceFcn
选项。选择:
@acceptansa.
(默认) - 模拟退火验收功能。接受的可能性是
在哪里
Δ=新客观的目标。
T.0.=组件的初始温度一世
T.=当前温度。
因为Δ和T.是积极的,接受的概率在0到1/2之间。较小的温度导致较小的验收概率。而且,较大的δ导致较小的接受概率。
@myfun
- 自定义验收功能,myfun.
。对于自定义验收功能语法,请参阅算法设置。
该算法系统地降低了温度,储存到目前为止发现的最佳点。这温度浮出水
选项指定算法用于更新温度的功能。让K.表示退火参数。(退火参数与再退火前的迭代次数相同。)选项:
@temperatureexp
(默认) -T.=T.0.* 0.95 ^K.。
@temperaturefast
-T.=T.0./K.。
@temperatureboltz.
-T.=T.0./ 日志(K.)。
@myfun
- 定制温度功能,myfun.
。有关自定义温度函数语法,请参见温度选项。
simulannealbnd
接受后重新退火ReannealInterval.
要点。Reannealing将退火参数设置为低于迭代号的值,从而提高每个维度的温度。退火参数取决于每个维度的目标函数的估计梯度的值。基本公式是
在哪里
K.一世=组件的退火参数一世。
T.0.=组件的初始温度一世。
T.一世=组件的电流温度一世。
S.一世物体方向的梯度一世时代界限的差异一世。
simulannealbnd
保护退火参数值正
和其他不正当的值。
当目标函数的平均变化相对于的平均变化时,算法停止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.