点击上方“计算机视觉cv”即可“进入公众号”
重磅干货第一时间送达
模拟退火算法基本思想
现代的模拟退火算法形成于20世纪80年代初,其思想源于固体的退火过程,即将固体加热至足够高的温度,再缓慢冷却。升温时,固体内部粒子随温度升高变为无序状,内能增大,而缓慢冷却时粒子又逐渐趋于有序,从理论上讲,如果冷却过程足够缓慢,那么冷却中任一温度时固体都能达到热平衡,而冷却到低温时将达到这一低温下的内能最小状态。
在这一过程中, 任一恒定温度都能达到热平衡是个重要步骤, 这一点可以用MonteCarlo算法模拟,不过其需要大量采样,工作量很大。但因为物理系统总是趋向于能量最低,而分子热运动则趋向于破坏这种低能量的状态,故而只需着重取贡献比较大的状态即可达到比较好的效果, 因而1953年Metropolis提出了这样一个重要性采样的方法, 即设从当前状态i生成新状态j.若新状态的内能小于状态i的内能(即Ej接受状态j, 其中k为Boltzmann常数, 这就是通常所说的Metropolis准则。
1953年, Kirkpatrick把模拟退火思想与组合最优化的相似点进行类比, 将模拟退火应用到了组合最优化问题中,在把模拟退火算法应用于最优化问题时,一般可以将温度T当做控制参数,目标函数值f视为内能E,而固体在某温度T时的一个状态对应一个解。然后算法试图随着控制参数T的降低,使目标函数值f(内能E)也逐渐降低,直至趋于全局最小值(退火中低温时的最低能量状态),就像固体退火过程一样。
其他一些参数的说明
退火过程由一组初始参数, 即冷却进度表(cooling schedule) 控制, 它的核心是尽量使系统达到准平衡,以使算法在有限的时间内逼近最优解。冷却进度表包括:
- ①控制参数的初值T。:冷却开始的温度。
- ②控制参数T的衰减函数:因计算机能够处理的都是离散数据,因此需要把连续的降温过程离散化成降温过程中的一系列温度点,衰减函数即计算这一系列温度的表达式。
- ③控制参数T的终值T,(停止准则)。
- ④Markov链的长度L.:任一温度T的迭代次数。
算法基本步骤
①令T=T。,即开始退火的初始温度,随机生成一个初始解工,并计算相应的目标函数值E(x0)。
②令T等于冷却进度表中的下一个值Ti。
③根据当前,进行扰动(扰动方式可以参考后面的实例),产生一个新解、计算应的目标函数值E(),得到△E=E()一E()。
④若△E<0,则新解被接受,作为新的当前解;若△E>0,则新解,按概率exp(一△E/) 接受,为当前温度。
⑤在温度下,重复L,次的扰动和接受过程,即执行步骤③与④。
⑥判断T是否已到达,是,则终止算法;否,则转到步骤②继续执行。
算法实质分两层循环,在任一温度随机扰动产生新解,并计算目标函数值