模拟退火是如何工作的
算法的轮廓
模拟退火算法执行以下步骤:
该算法生成一个随机试验。算法选择试用点从当前点的距离的概率分布与规模根据当前温度。设置审判点距离分布的函数
AnnealingFcn
选择。选择:@annealingfast
(默认),步长等于当前的温度,和方向均匀随机的。@annealingboltz
——步长=根号温度,和方向均匀随机的。@myfun
——自定义退火算法,myfun
。自定义退火函数语法,看算法设置。
生成试验后,该算法改变它,如果必要,保持在允许范围内。算法转变审判的每个不可行组件指向一个值均匀随机选择违反约束和在前面的迭代(可行)值。
算法确定新一点比当前更好或更糟一点。如果新的点比当前点,它就变成了下一个点。如果新的点比当前点,该算法仍然可以使它下一个点。该算法基于一个接受函数接受一个糟糕点。选择接受与功能
AcceptanceFcn
选择。选择:@acceptancesa
(默认)-模拟退火验收功能。接受的概率在哪里
Δ= new客观历史的目的。
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
,或者当它到达其他的停止准则。看到该算法停止条件。
在算法的更多信息,见因格贝尔[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