模拟退火
模拟退火
1.算法简介
当我们求解一个单峰函数时,可以使用爬山算法(或者梯度下降法),即根据当前位置的梯度大小来决定下一个位置,这样在单峰函数的情况下就能够最终稳定在峰值。但是当函数具有多个峰值时,爬山算法就会很容易陷入局部最优解。
模拟退火算法来源于固体退火原理,是一种基于概率的算法,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。对于模拟退火来说,就是基于当前模拟的温度来改变对于随机解的接受程度:温度越高,越容易接受当前看起来不是最优的解。当然,也有概率得出不是最优的解,这就需要调整参数。
2.算法过程
模拟退火的核心是三个参数:
\(T_0\) 表示初始温度,一般是一个比较大的数
\(T_k\) 表示终止温度,是一个很接近0的数
\(\Delta\) 表示降温系数,是一个略小于1的常数
模拟退火就是利用这三个参数来模拟温度的变化。
用 \(T\) 来表示当前温度,每一次迭代时 \(T=T\times \Delta\) ,表示温度的下降,直到 \(T<T_k\) 时算法结束
与此同时,我们用 \(E_0\) 表示已知最优解, \(E\) 表示当前解, \(\Delta E=E-E_0\) 表示解变动量, \(E_1\) 表示上一次被接受的解。
我们更新解的过程如下:
从 \(T_0\) 开始,每一次迭代当前温度 \(T\) 都乘上 \(\Delta\) ,同时在 \(E_1\) 的基础上根据温度 \(T\) 扰动产生新解 \(E\) 。如果 \(E\) 比 \(E_0\) 更优,则更新 \(E_0,E_1\);否则,根据Metropolis接受准则来概率性的接受新解并更新 \(E_1\) 。
Metropolis接受准则:假如我们要求函数最小值,则接受一个解的概率是
我对他的理解就是,当 \(E\) 比 \(E_0\) 更优时, \(\Delta E <0\) ,\(P>1\) ,表示必须接受这个解。
当 \(E\) 比 \(E_0\) 更劣时, \(\Delta E > 0\) ,\(P<1\) ,表示有 \(P\) 的概率接受这个解。且 $|\Delta E| $ 越大, 新解劣的程度就越厉害,接受他的概率就越小。
一个通俗的动图:


浙公网安备 33010602011771号