1.算法概述
相比于传统贪心算法,模拟退火算法最大的改进就是对于非最优解系统能够以一定的概率接受,下边通过公式具体说明:
假设前一个状态为x(n)
,系统根据某一指标(梯度下降),状态变为x(n+1)
,相应的,系统的能量(全局最优解的函数值)由E(n)
变为E(n+1)
,定义系统由x(n)
变为x(n+1)
的接受概率P
为:
P
=
{
1
,
E
(
n
+
1
)
<
E
(
n
)
e
−
E
(
n
+
1
)
−
E
(
n
)
T
,
E
(
n
+
1
)
≥
E
(
n
)
P = \left\{\begin{matrix} 1, E(n+1)<E(n)& \\ & \\ & \\ e^{-\frac{E(n+1) - E(n)}{T}}, E(n+1) \geq E(n)& \end{matrix}\right.
P=⎩⎪⎪⎨⎪⎪⎧1,E(n+1)<E(n)e−TE(n+1)−E(n),E(n+1)≥E(n)
通过上述公式可知,当当前状态的能量优于前一状态的能量(全局最优解的函数值)时,算法接受当前解(以概率1的概率接受);当当前状态的能量差于前一状态的能量时,系统会以一定概率接受当前解,
通过分析第二种情况下的接受概率公式可知:接受概率和两次状态的能量差呈负相关,和参数T呈正相关说明当前解和当前最优解的差距越大,接受当前解的概率越低;T参数越大,接受的概率越大。
2.参数控制
在上面的公式中,可以调节的参数就是T,T如果过大,就会导致退火太快,达到局部最优值就会结束迭代,如果取值较小,则计算时间会增加,实际应用中采用退火温度表,在退火初期采用较大的T值,随着退火的进行,逐步降低,具体如下:
2.1 初始的温度
T(0) 应选的足够高,使的所有转移状态都被接受。初始温度越高,获得高质量的解的概率越大,耗费的时间越长。
2.2 退火速率
最简单的下降方式是指数式下降:
T
(
n
)
=
λ
T
(
n
)
,
n
=
1
,
2
,
3
,
.
.
.
.
.
T(n) = \lambda T(n) ,n =1,2,3,.....
T(n)=λT(n),n=1,2,3,.....
其中 λ是小于1的正数,一般取值为0.8到0.99之间。使的对每一温度,有足够的转移尝试,指数式下降的收敛速度比较慢,
其他下降方式如下:
T
(
n
)
=
T
(
0
)
l
o
g
(
1
+
t
)
T(n) = \frac{T(0)}{log(1+t)}
T(n)=log(1+t)T(0)
T
(
n
)
=
T
(
0
)
1
+
t
T(n) = \frac{T(0)}{1+t}
T(n)=1+tT(0)
t为迭代次数
2.3 终止温度
如果在若干次迭代的情况下每有可以更新的新状态或者达到用户设定的阈值,则退火完成。