模拟退火法(Simulated annealing, SA)是模拟热力学中经典粒子系统的降温过程,来求解极值问题(一般是全局极小值)。当孤立粒子系统的温度以足够慢的速度下降时,系统近似处于热力学平衡状态,最后系统将达到本身的最低能量状态,即基态,这相当于能量函数的全局极小点。其步骤如下(也称为Metropolis过程):
注意每次迭代T0会减少,这是为了保证模型的稳定,不然很难得到结果。其中随机产生的扰动不一定就是一个数,你可以这样理解,他是使目标函数发生变化的量。最好的学习方式还是通过实例来理解模拟退火算法吧。
应用一:
神经网络中非常常见的BP算法(逆向传播算法)是基于梯度下降策略需找最优参数。训练误差E是关于边权值和阈值(模型参数)的函数。梯度下降策略的基本思想是通过修改模型参数向梯度的逆方向前行,即向训练误差E减小的方向前行,直到找到局部最优参数使得E局部最小。可见结果的好坏与初始点(即参数的初始值)的选择有很大关系。这就是常说的陷入局部最小困境。当有多个局部极小值时,跳出当前局部极小值而向全局最小值靠拢就可以使用模拟退火算法的思想,对应步骤(4)。
应用二:
98年全国大学生数学建模竞赛B题“水灾巡视问题”,是一个推销员问题,本题有53个点,所有可能性大约为exp(53),目前没有好方法求出精确解,既然求不出精确解,我们使用模拟退火法求出一个较优解,将所有结点编号为1到53,1到53的排列就是系统的结构,结构的变化规则是:从1到53的排列中随机选取一个子排列,将其反转或将其移至另一处,能量E自然是路径总长度。具体算法描述如下:
步1: 设定初始温度T,给定一个初始的巡视路线。
步2:步3 --8循环K次
步3:步 4--7循环M次
步4:随机选择路线的一段
步5:随机确定将选定的路线反转或移动,即两种调整方式:反转、移动。
步6:计算代价D,即调整前后的总路程的长度之差
步7:按照如下规则确定是否做调整:
如果D<0,则调整
如果D>0,则按照EXP(-D/T)的概率进行调整
步8:T*0.9-->T,降温