算法介绍
模拟退火算法(Simulate Anneal,SA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解。美国物理学家 N.Metropolis 和同仁在1953年发表研究复杂系统、计算其中能量分布的文章,他们使用蒙特卡罗模拟法计算多分子系统中分子的能量分布。
模拟退火的出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法是一种通用的优化算法,其物理退火过程由加温过程、等温过程、冷却过程这三部分组成。
启发来源
在热力学上,退火(annealing)现象指物体逐渐降温的物理现象,温度愈低,物体的能量状态会低;够低后,液体开始冷凝与结晶,在结晶状态时,系统的能量状态最低。大自然在缓慢降温(亦即,退火)时,可“找到”最低能量状态:结晶。但是,如果过程过急过快,快速降温(亦称「淬炼」,quenching)时,会导致不是最低能态的非晶形。
如下图所示,首先(左图)物体处于非晶体状态。我们将固体加温至充分高(中图),再让其徐徐冷却,也就退火(右图)。加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小(此时物体以晶体形态呈现)。
似乎,大自然知道慢工出细活:缓缓降温,使得物体分子在每一温度时,能够有足够时间找到安顿位置,则逐渐地,到最后可得到最低能态,系统最安稳。
爬山算法
爬山算法是一种Greegy算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。
如上图:从A开始迭代搜索解空间,寻找最优解,但是该算法采用的是贪心策略,所以当搜索到B点时,发现再往后小幅度移动搜索时,不能得到比B点更好的结果了,至此停止了搜索,陷入到局部最优解的问题中。
模拟退火
介绍了以上的爬山算法,这种贪心算法往往得到的解并不是解空间中的全局最优解,如何有效的避免陷入局部最优解中,模拟退火算法应运而生。
其实模拟退火算法也是一种Greedy算法,但是在搜索最优解过程中,加入了随机的因素,一定的概率接受一个比当前解要差的解,故此,存在一定的概率跳出局部最优解,从而找到真正的全局最优解。
- 算法流程
- 由一个产生函数从当前的解空间 { x 1 , x 2 , x 3 , . . . , x n } \{x_1, x_2, x_3, ..., x_n\} { x1,x2,x3,...,xn}中产生一个新解(一般采用随机方法生成新解,比如交换顺序等)。
- 使用目标函数 f ( x ) f(x) f(x),计算出新解对应的目标值 f ( x n e w ) f(x_{new}) f(xnew)。
- 判断新解是否可以采纳,变成当前的解。采纳采用的准则——Metropolis准则:
p =