模拟退火如何工作
算法的轮廓
模拟退火算法执行以下步骤:
该算法生成一个随机试验点。该算法通过概率分布选择了试验点与当前温度的距离的距离。您将试验点距离分布设置为函数
退火FCN
选项。选择:@annealingfast
(默认) - 步长等于电流温度,方向是均匀的随机温度。@annealingboltz
- 步长等于温度的平方根,方向是均匀随机的。@MyFun
- 自定义退火算法,myfun
。对于自定义退火功能语法,请参阅算法设置。
生成试验点后,算法在必要时会移动它以保持范围。该算法将试验点的每个不可行的组件转移到在上一个迭代时违反结合和(可行的)值之间随机选择的值。
该算法确定新点比当前点更好还是更糟。如果新点比当前点更好,则将成为下一点。如果新点比当前点更糟糕,则该算法仍然可以使其成为下一点。该算法基于接受函数接受更糟糕的观点。选择接受功能
AccentanceFCN
选项。选择:@Acceptancesa
(默认) - 模拟退火接受函数。接受的可能性是在哪里
δ=新目标 - 旧目标。
t0=组件的初始温度一世
t=当前温度。由于δ和t是积极的,接受的可能性在0到1/2之间。较小的温度导致较小的接受概率。同样,较大的δ会导致较小的接受概率。
@MyFun
- 自定义接受功能,myfun
。有关自定义接受函数语法,请参见算法设置。
该算法系统地降低了温度,并存储到目前为止发现的最佳点。这
温度
选项指定算法用来更新温度的功能。让k表示退火参数。(退火参数与迭代编号相同,直到reannealing为止。)选项:@Temperatureexp
(默认) -t=t0* 0.95^k。@Temperaturefast
-t=t0/k。@TemperatureBoltz
-t=t0/ 日志(k)。@MyFun
- 自定义温度功能,myfun
。有关自定义温度功能语法,请参见温度选择。
simulanealbnd
reanneals接受后ReannealInterval
点。Reannealing将退火参数设置为低于迭代数的值,从而提高了每个维度的温度。退火参数取决于每个维度中目标函数的估计梯度的值。基本公式是在哪里
k一世=组件的退火参数一世。
t0=组件的初始温度一世。
t一世=分量的电流温度一世。
s一世=方向的客观梯度一世方向界限的时间差一世。simulanealbnd
保护退火参数值针对inf
和其他不当值。当目标函数的平均变化相对于相对于目标函数的平均变化相对于
函数授体
,或者当它达到其他任何停止标准时。看停止算法的条件。
有关该算法的更多信息,请参见Ingber[1]。
停止算法的条件
模拟退火算法使用以下条件来确定何时停止:
函数授体
- 该算法一直运行,直到目标函数的平均值变化Stalliterlim
迭代少于函数授体
。默认值是1E-6
。最大值
- 当迭代次数超过此最大迭代次数时,算法停止。您可以将最大迭代次数指定为正整数或inf
。默认值是inf
。maxfunction evaluations
指定目标函数的最大评估数量。如果函数评估的数量超过了,则该算法停止maxfunction evaluations
。默认值是3000*数字
。maxtime
指定算法在停止之前运行的最长时间。默认值是inf
。Objectivelimit
- 当最佳目标函数值小于值时,算法停止Objectivelimit
。默认值是-inf
。
参考书目
[1] Ingber,L。自适应模拟退火(ASA):经验教训。邀请纸上的论文波兰期刊控制和控制论在“应用于组合优化的模拟退火”上。1995年。可从https://www.ingber.com/asa96_lessons.ps.gz