模拟退火算法

141 阅读5分钟

模拟退火算法是模拟自然界物体降温过程的一个优化算法,如果一个物体被快速降温,那么由于分子没来及达到最佳的状态,此时并不是该物体能量最低的状态,正确的做法是缓慢地降低温度,并且在达到局部最优状态时适当的增加能量,以一定的概率跳出局部最优解。

模拟退火算法包含两个部分即Metropolis算法退火过程。Metropolis算法就是如何在局部最优解的情况下让其跳出来,是退火的基础。

算法模型

1. T——温度

2. ΔT——温度变化率,每次温度等于上一次温度乘上ΔT,实际应用时一般取0.95−0.99,模拟逐渐降温

再定义一些量:

3. S——当前选择的解

4. ΔS——解变动值(扰动值)

5. S1——当前的目标解,等于S+ΔS

6. ΔE——当前解的函数值与目标解函数值之差(能量差),等于E(S)−E(S1)

T初期设置为一个较大值,目的是使的所有转移状态都被接受。初始温度越高,获得高质量的解的概率越大,耗费的时间越长。然后逐渐降低,即退火,退火方式有多种,通常最简单的就是指数型的下降:

除此之外还有其他的下降方式:

算法步骤:

(1) 初始化:初始温度T(充分大),初始解状态S(是算法迭代的起点),每个T值的迭代次数L

(2) 对k=1, …, L做第(3)至第6步:

(3) 产生新解S′

(4) 计算增量ΔT=C(S′)-C(S),其中C(S)为代价函数

(5) 若ΔT<0则接受S′作为新的当前解,否则以概率exp(-ΔT/T)接受S′作为新的当前解.

(6) 如果满足终止条件则输出当前解作为最优解,结束程序。终止条件通常取为连续若干个新解都没有被接受时终止算法。

(7) T逐渐减少,且T->0,然后转第2步。

其中,步骤3,通常由一个产生函数从当前解产生一个位于解空间的新解;S’= S+ΔS 为便于后续的计算和接受,减少算法耗时,通常选择由当前新解经过简单地变换即可产生新解的方法,如对构成新解的全部或部分元素进行置换、互换等,注意到产生新解的变换方法决定了当前新解的邻域结构,因而对冷却进度表的选取有一定的影响。通常每次的ΔS应该在一个大小与T成正比的值域内随机取值。

参考:

blog.csdn.net/weixin_4239…

www.cnblogs.com/flashhu/p/8…