- 模拟退火算法来源:
- 固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。
- 处在低温状态时,固体中分子具有的内能很低,在原本的位置上做小范围的振动。若是将固体加热到一定温度,分子内能将会增加,热运动加剧,分子排列的无序度增加。此时再将温度缓缓降低,在每个温度都达到平衡态(即准静态过程),分子具有的能量逐渐降低,最终回归到有序排列的状态,分子内能也跟着降到最低。
- 爬山算法主要缺点:会陷入局部最优解
- 比喻对比爬山算法和模拟退火算法:
- 爬山算法:兔子朝着比现在高的地方跳去。它找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。
- 模拟退火:兔子喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。
- 模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合一定的概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。对于下一个解的接受概率:假设当前时刻搜索的解为xt,对应的系统能量(目标函数)为Et,对搜索点施加随机扰动,产生新解xt+1,相应地,系统能量为Et+1,那么系统对搜索点从xt到xt+1转变的接受概率就为上公式。
- 将温度T当作控制参数,目标函数值f视为内能E,而固体在某温度T时的一个状态对应一个解,然后算法试图随着控制参数T的降低,使目标函数f(内能E)也逐渐降低,直至趋于全局最小值(退火中低温时的最低能量状态),就像金属退火过程一样。
- 模拟退火的流程
- 算法实质分两层循环,在任一温度水平下,随机扰动产生新解,并计算目标函数值的变化,决定是否被接受。由于算法初始温度比较高,这样,使E增大的新解在初始时也可能被接受,因而能跳出局部极小值,然后通过缓慢地降低温度,算法就最终可能收敛到全局最优解,具体流程为如下
- 令T=T0,表示开始退火的初始温度,随机产生一个初始解x0,并计算对应的目标函数值E(x0);
- 令T=kT,其中k取值0到1之间,为温度下降速率;
- 对当前解x_t施加随机扰动,在其邻域内产生一个新解x_(t+1),并计算对应的目标函数值E(x_(t+1)),计算△E=E(x_(t+1))-E(x_t)
- 若△E<0,接受新解作为当前解,否则按照概率e^(△E/(kT))判断是否接受新解;
- 在温度T下,重复L次扰动和接受过程,即执行步骤3和4;
- 判断温度是否达到终止温度水平,若是则终止算法,否则返回步骤2
- 需要注意的点:
- 初始点的选取对算法结果有一定的影响,最好是多次运行对结果进行综合判断。
- 在算法运行初期,温度下降快,避免接受过多的差结果。当运行时间增加,温度下降减缓,以便于更快稳定结果。
- 当迭代次数增加到一定次数时,结果可能已经达到稳定,但是距离算法结束还有一段时间。在设计程序时应该加入适当的输出条件,满足输出条件即可结束程序。
- 模拟退火算法是通过赋予搜索过程一种时变且最终趋于零的概率突跳性,从而可有效避免陷入局部极小并最终趋于全局最优的串行结构的优化算法。算法从某一较高初温出发,伴随温度参数的不断下降,结合一定的概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优