模拟退火算法执行如下步骤:
该算法生成随机试验点。该算法通过概率分布选择试验点与当前点的距离,概率分布根据当前温度。您将试验点距离分布设置为函数Annealingfcn.
选择。选择:
@annealingfast.
(默认) - 步长等于当前温度,方向均匀随机。
@annealingboltz.
—步长等于温度的平方根,方向均匀随机。
@myfun.
-自定义退火算法myfun
.对于自定义退火功能语法,请参阅算法设置.
在生成试验点之后,如果有必要,算法会移动它,使其保持在界限之内。该算法将试验点的每个不可行分量移到在违逆界和(可行)值之间一致随机选择的值。
算法确定新点比当前点更好还是更差。如果新点比当前点更好,它就成为下一个点。如果新点比当前点差,算法仍然可以使它成为下一个点。算法根据接受函数接受较差的点。选择接受函数与acceptancyfcn.
选择。选择:
@acceptancesa
(默认) - 模拟退火验收功能。接受的可能性是
在哪里
Δ =新目标-旧目标。
T0=元件初始温度我
T=当前温度。
由于δ和T是正的,接受的概率在0到1/2之间。温度越低,接受概率越小。此外,Δ越大,接受概率越小。
@myfun.
-自定义验收功能,myfun
.有关自定义接受函数语法,请参见算法设置.
该算法系统地降低温度,存储到目前为止找到的最佳点。的TemperatureFcn
选项指定算法用来更新温度的函数。让k表示退火参数。(退火参数与迭代号相同,直到reannealing。)选项:
@temperatureexp.
(默认)T=T0* 0.95 ^k.
@temperaturefast.
- - - - - -T=T0/k.
@temperatureboltz
- - - - - -T=T0/日志(k).
@myfun.
-自定义温度功能,myfun
.对于自定义温度函数语法,请参阅温度的选择.
Simulannealbnd.
它接受后的reannealsReannealInterval
点。重新退火将退火参数设置为小于迭代数的值,从而提高每个维度的温度。退火参数依赖于目标函数在每个维度上的估计梯度值。基本公式是
在哪里
k我=组件的退火参数我.
T0=元件初始温度我.
T我=元件当前温度我.
年代我=方向目标的梯度我乘以方向上界限的差我.
Simulannealbnd.
保护退火参数值INF.
以及其他不恰当的值。
当目标函数的平均变化相对较小时,算法停止FunctionTolerance
,或当它达到任何其他停止标准。看到算法的停止条件.
有关该算法的更多信息,请参见Ingber[1].
模拟退火算法使用以下条件来确定何时停止:
FunctionTolerance
- 算法运行,直到目标函数的平均变化Stalliterlim.
迭代的值小于FunctionTolerance
.默认值为1 e-6
.
MaxIterations
—当迭代次数超过该最大迭代次数时,算法停止。您可以将最大迭代次数指定为正整数或INF.
.默认值为INF.
.
MaxFunctionEvaluations
指定目标函数的最大求值次数。如果函数求值的次数超过值,则算法停止MaxFunctionEvaluations
.默认值为3000 * numberofvariables
.
MaxTime.
指定算法停止前运行的最大时间(以秒为单位)。默认值为INF.
.
ObjectiveLimit
- 当最佳目标函数值小于值时,算法停止ObjectiveLimit
.默认值为负
.
[1] ingber,L.自适应模拟退火(ASA):经验教训.邀请报纸到特刊波兰控制和控制论杂志模拟退火在组合优化中的应用。1995。可以从https://www.ingber.com/asa96_lessons.ps.gz