2023.11.3学习-模拟退火算法
模拟退火算法(Simulated Annealing, SA)
算法背景
在物理中,固体物质的退火过程可描述如下:
(1)加温过程。增强粒子的热运动,使其偏离平衡位置,当温度足够高时,固体熔化为液体,从而消除系统原先存在的非均匀状态。
(2)等温过程。对于与周围环境交换热量而温度不变的封闭系统,系统总是自发地朝自由能减少的方向进行,当自由能达到最小时,系统达到平衡状态。
(3)冷却过程。粒子的热运动减弱,系统能量下降,得到晶体结构。
目标函数:系统能量值。
最优解:能量最低态(可以得知,模拟退火算法求解的是最小值)
与贪心算法相比,模拟退火算法克服了前者容易陷入局部最优解的缺陷与对初值的依赖性,模拟退火算法的优势在于可以以一定的概率选择当前解邻域中较差的解,可以跳出局部最优,从而实现全局寻优的目的。
算法步骤
简要概述:假设初始温度为一个定值,并在该温度下产生一个随机解;之后,算法持续进行“产生新解------计算目标函数差------判断是否接受新解------接受或舍弃” 的迭代过程,从而达到在该温度下的热平衡状态;然后继续减小控制参数 T 的取值,重复上述在一定温度下达到热平衡状态的过程。当控制参数逐渐减小并趋于零时,系统整体趋于平衡状态,从而达到整体最优解。
(1)初始化。取初始温度T0足够大,令T = T0,随机产生初始解x0,并计算对应的目标函数值E(x0)。
(2)令T=kT,其中k是 0-1 的值,为温度下降系数。
(3)对当前解xt随机扰动产生一个新解xt+1。
(4)计算目标函数增量dE = E(xt) - E(xt+1)。
(5)若dE < 0,则接受xt+1作为新的当前解;否则计算xt+1的接受概率p = exp(-dE/kT),并随机产生(0, 1)区间上均匀分布的随机数rand,若p > rand,则也接受xt+1作为新的当前解,否则保留当前解xt。
步骤(4)~(5)即执行蒙特卡洛(Metropolis)判断准则(判断接受新解的概率p)
p = { 1 , E t + 1 < E t e − ( E t + 1 − E t ) k T , E t + 1 ≥ E t p=\begin{cases}1, \ E_{t+1} < E_t \\ e^{\frac {-(E_{t+1}-E_t)} {kT}}, E_{t+1}\geq E_t \end{cases} p={1, Et+1<EtekT−(Et+1−Et),Et+1≥Et
Et+1和Et分别为新解xt+1和当前解xt的系统能量(即目标函数)。当新解对应的目标函数小于当前解的目标函数值的时候,一定会接受新解;
反之,则以一定的概率接受新解,这个概率与新解与当前解的能量差(目标函数值的差)有关,相差越大,则接受新解的概率越小。这么做的意义就在于,有概率放弃更好的新解,而摆脱局部最优。
(6)在温度T下,循环步骤(3)~(5),共迭代L次扰动和接受过程。(L为马尔科夫链的长度)
(7)如果满足终止条件Stop,则输出当前解xt为最优解,结束程序(终止条件Stop通常为,在连续若干个马尔科夫链中新解xt都没有被接受时终止算法,或设定结束温度);否则返回步骤(2),衰减T后再次迭代。
回顾算法步骤,可将背景中的退火过程一一对应为:
加温过程 → 对算法设定初温(步骤(1))
等温过程 → 迭代L次,寻找系统能量(目标函数)极小值(步骤(3)~(6))
降温过程 → 控制参数T的下降(步骤(2)、(7))
算法特点
(1)不属于群优化算法(与遗传算法、粒子群优化算法、蚁群算法不同),不需要初始化种群。
(2)收敛速度较慢。
关键参数
(1)初始温度T0和马尔科夫链长度L。从算法原理上来看,初始温度越高,且马尔科夫链越长,算法搜索越充分,得到全局最优解的可能性越大,但同时也需要耗费更多的计算时间。
(2)温度下降系数k。温度下降速率k越小,温度下降就越快,对应的迭代次数就越少,就可能导致得不到全局最优解;同时,也会发现到算法后期,温度衰减变慢,算法收敛慢。一种改进措施是将系数k设置为动态的,如k = 0.99k,以加快后期温度下降,加快算法收敛。
(3)扰动算子。扰动算子不宜过大,防止错过全局最优解。