模拟退火算法执行以下步骤:
该算法生成一个随机试验点。该算法通过带刻度根据当前温度的概率分布选择从当前点试验点的距离。您可以设置测试点距离分布与功能AnnealingFcn
选项。选择:
@annealingfast
(默认) - 步骤长度等于当前温度,以及方向是均匀地随机的。
@annealingboltz
- 步骤长度等于温度的平方根,以及方向是均匀地随机的。
@myfun
- 自定义退火算法,myfun
。对于自定义功能退火语法,请参见算法设置。
生成所述试验点之后,算法移动它,如果需要的话,留界限内。该算法在试验点的每个不可行成分转移到随机统一选择之间的违反约束,并在先前的迭代中(可行)值的值。
该算法确定新点是否比当前点好还是坏。如果新的点比当前点更好,这将成为下一个点。如果新的点比目前的点差,该算法还可以将其作为下一个点。该算法接受基于接受功能差了点。选择与验收功能AcceptanceFcn
选项。选择:
@acceptancesa
(默认) - 模拟退火受理功能。接受的概率是
哪里
Δ=新的目标 - 老的目标。
Ť0=组分的初始温度一世
Ť=当前温度。
由于两个Δ和Ť是正的,接受的概率为0和1/2之间。较小的温度导致较小的接受概率。此外,较大的Δ导致较小的接受概率。
@myfun
- 自受理功能,myfun
。对于自定义功能验收语法,请参见算法设置。
该算法系统地降低了温度,储存迄今为止发现的最佳点。该TemperatureFcn
选项指定函数的算法使用更新的温度。让ķ表示退火参数。(退火参数是相同的迭代次数,直到再退火。)选项:
@temperatureexp
(默认) -Ť=Ť0* 0.95 ^ķ。
@temperaturefast
-Ť=Ť0/ķ。
@temperatureboltz
-Ť=Ť0/日志(ķ)。
@myfun
- 自定义温度函数,myfun
。对于自定义温度函数的语法,请参阅温度选项。
simulannealbnd
reanneals它接受后ReannealInterval
点。再退火套退火参数以降低比迭代数的值,从而提高在每个维度的温度。退火参数取决于在每个维度的目标函数的估计梯度的值。基本公式是
哪里
ķ一世=用于组分退火参数一世。
Ť0=组分的初始温度一世。
Ť一世=组分的当前温度一世。
小号一世=目标方向的梯度一世在方向边界的时间差一世。
simulannealbnd
保障的退火参数值对天道酬勤
和其他不当值。
该算法停止时在所述目标函数的平均变化是小相对于FunctionTolerance
,或当它达到任何其它的停止标准。看到停止条件算法。
有关算法的更多信息,请参见Ingber[1]。
模拟退火算法使用以下条件来决定何时停止:
FunctionTolerance
- 该算法运行,直到目标函数的值的平均变化StallIterLim
迭代是小于的值FunctionTolerance
。默认值是1E-6
。
MaxIterations
- 当迭代次数超过迭代这个最大数量的算法停止。您可以指定迭代的最大数量为正整数或天道酬勤
。默认值是天道酬勤
。
MaxFunctionEvaluations
指定目标函数评估的最大数量。如果函数计算的数量超过该值的算法停止MaxFunctionEvaluations
。默认值是3000个* numberofvariables
。
MAXTIME
指定停止前的算法运行在几秒钟的最长时间。默认值是天道酬勤
。
ObjectiveLimit
- 当最佳目标函数值小于值的算法停止ObjectiveLimit
。默认值是-Inf
。
[1] Ingber,L.自适应模拟退火(ASA):经验教训。特邀纸的一个特殊问题波兰杂志的控制与控制论在“模拟退火应用于组合优化。”1995年从可用https://www.ingber.com/asa96_lessons.ps.gz