一、背景
模拟退火算法(Simulate Anneal Arithmetic,SAA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解。模拟退火是S.Kirkpatrick, C.D.Gelatt和M.P.Vecchi在1983年所发明。而V.Černý在1985年也独立发明此演算法。模拟退火算法是解决TSP问题的有效方法之一。
1. 算法的目的
(1)解决NP复杂性问题;
(2)克服优化过程陷入局部极小;
(3)克服初值依赖性;
2. 算法的启发
物质总是趋于最低的能态,最低能态是最稳定的状态。
先把固体加热至足够高温,使固体中所有粒子处于无序的状态(最高的熵值),然后将温度缓慢下降,粒子渐渐有序(熵值下降),这样只要温度上升得足够高,冷却过程足够慢,则所有粒子最终会处于最低能态(最低的熵值)。
同样地,模拟退火算法也是这个原理,只要初温足够高,温度下降足够慢,就一定能找到全局最优解。
二、模拟退火算法介绍
1. 主要环节
直接影响算法优化结果的主要环节:(1)新状态产生函数;(2)新状态接受函数;(3)退温函数;(4)退火结束准则;(5)初始温度
2. 回火技术
如果有uu了解爬山法,就会轻松地明白这是什么意思,如果没有听说过,也没关系。假设我们初始点是D点,(默认目标是找到全局最低点)使用爬山法的话,则只能接受比当前解小的新解,因此从D点出发只能到达A点,这显然只是个局部最优解,非全局最优解。因此,回火技术
就是以一定概率接受没有当前状态好的新解,即略微震动一下,使得我们能跳出当前这个山坡,有机会朝着全局最优解移动。
3. 优缺点
4. 步骤
给定初温t=t0,随机产生初始状态s=s0,令k=0;
Repeat
Repeat
产生新状态sj=Generate(s);
if min{1,exp[-(C(sj)-C(s))/tk]}>=randrom[0,1]
s=sj;
Until 抽样稳定准则满足;
退温tk+1=update(tk) 并 令k=k+1;
Until 算法终止准则满足;
输出算法搜索结果
初始温度过高 —— 收敛太慢; 初始温度过低 —— 只能找到局部最优解
5. 算法的核心内容(三函数,两准则)
(1)状态产生函数
在当前状态的邻域结构内以一定概率方式产生。两个尺度:① 产生的新解应尽可能地遍布整个解空间,不能完全在某点附近抽样,防止只能找到局部最优解;② 新解的产生又不能完全毫无关系,防止不收敛。
(2)状态接受函数
(3)温度更新函数
首先,谈一下初温的产生。初温越大,获得高质量解的机率越大,但花费较多的计算时间。因此,需要在接受范围内,选择一个较高的初温,这里给出三种方法:👇
然后回归问题 —— 温度更新函数,这里给出两种温度更新的函数:
①
α越接近1温度下降越慢,且其大小可以不断变化
② 其中t0为起始温度,K为算法温度下降的总次数,k是常数
(4)抽样稳定准则 (内循环终止准则)
(5)算法终止准则
① 零度法
给出一个较小的正数,当温度小于这个数时,算法停止,表示已经达到最低温度。
② 循环总数控制法
总的下降次数为一定值K,当温度迭代次数达到K值时,停止运算。
③ 基于不改进规则的控制法
在一个温度和给定的迭代次数内没有改进当前的局部最优解,则停止运算
。模拟退火算法的一个基本思想是跳出局部最优解,直观的结论是在较高的温度没能跳出局部最小解,则在低的温度跳出最优解的可能也比较小,由此产生上面的停止原则。
简单来讲:收敛了,就终止,即好几次都不变了
④ 接受概率控制法
三、模拟退火案例