模拟退火算法来源于热力学中固体物质的退火冷却过程 (退火是一种金属热处理工艺,指的是将金属缓慢加热到一定温度,保持足够时间,然后以适宜速度冷却)。
模拟退火的算法思想是参考物理退火的过程而来,物理退火的过程为:加温过程 -> 等温过程 -> 冷却过程。
通过加温,增强粒子的热运动,让各部分变得均匀。当温度足够高时,固体将熔解为液体,从而消除原先系统中可能存在的非均匀状态,保证后续进行的过程是从平衡态开始,由于是加温过程温度上升,所以该过程系统能量增加。
对于与周围环境交换热量而温度保持不变的封闭系统,系统状态的自发变化总是朝着自由能减少的方向进行,当自由能达到最小时,系统达到平衡态。
通过一定速率对液体进行冷却,减弱粒子的热运动并趋于有序,在每个温度都达到平衡态,最后在常温时达到基态,能量减为最小,从而得到低能态的晶体结构。
组合优化 | 物理退火 |
---|---|
解 | 粒子状态 |
最优解 | 能量最低态 |
设定初温 | 熔解过程 |
MetropolisMetropolisMetropolis 抽样过程 | 等温过程 |
控制参数下降 | 冷却过程 |
目标函数 | 能量 |
模拟退火算法的基本原理:对于目标函数 f(X)f(X)f(X)、自变量为 XXX 的 nnn 维极小化问题(极大化问题乘以−1-1−1转化为极小化问题),初值 X0X_0X0 可以随机化或者自己设置。
设 fk,fk+1f_k,f_{k+1}fk,fk+1 分别为目标函数在第 kkk 次和第 k+1k+1k+1 次迭代值,即 fk=f(Xk),fk+1=f(Xk+1)f_k=f(X_k),f_{k+1}=f(X_{k+1})fk=f(Xk),fk+1=f(Xk+1)。
若 fk>fk+1f_k>f_{k+1}fk>fk+1,则接受 Xk+1X_{k+1}Xk+1 作为下一次迭代的初值继续进行运算,直至满足终止条件(收敛或者迭代次数耗尽);
若 fk
以求解极小值问题为例:
(1)(1)(1)设定初始温度 TTT,迭代次数 LLL,误差 ϵ\epsilonϵ,初始解 X0X_0X0,得到目标函数f(X0)f(X_0)f(X0);
(2)(2)(2)循环进行迭代,k=1,⋯,Lk=1,\cdots,Lk=1,⋯,L;
(3)(3)(3)根据当前温度得到新解 X′X'X′(第一个可以随机生成), 代入 f(X)f(X)f(X) 得到 f(X′)f(X')f(X′);
(4)(4)(4)若 f(X)>f(X′)f(X)>f(X')f(X)>f(X′),则接受 X′X'X′ 作为下一次迭代的初值,若 f(X)
(6)(6)(6)TTT 减小,然后回到流程(2)(2)(2),在当前温度下继续循环迭代,执行步骤(3,4,5)(3,4,5)(3,4,5);
(7)(7)(7)注意,这里的终止条件可以有多个,比如:迭代次数耗尽、满足最优解、温度降低到一定值、新目标函数与原先目标函数的误差小于 ϵ\epsilonϵ。