模拟退火算法(Simulated annealing, SA)是一种基于蒙特卡罗(Monte Carlo)思想设计的,常用于在较大的解空间中搜索近似全局最优解的优化算法。本文将从模拟退火算法的历史、形式、特点、改进和实现等方面出发,对模拟退火算法作出介绍。
一、模拟退火算法的诞生
在众多科学领域,组合优化问题广泛存在,其中不乏 NP 完全问题(Nondeterministic polynomial-time complete problem),典型的如做决定版的旅行商问题(Decision version of the traveling salesman problem, TSP)。目前为止,所有已知的解决 NP 完全问题的算法的时间复杂度皆大于多项式时间。为处理这类问题,人们提出多种折衷的算法,包括近似算法(Approximation algorithm)、随机化算法(Randomized algorithm)、启发式算法(Heuristic algorithm)等,以求在可接受的时间内得到可接受的解。模拟退火算法即是近似算法、随机化算法中的一例。
美国物理学家 N. Metropolis 等人在 1953 年发表的《Equation of State Calculations by Fast Computing Machines》一文中,使用蒙特卡罗模拟法计算多分子系统中分子的能量分布。1983 年,物理学家 S. Kirkpatrick、C. D. Gelatt 和 M. P. Vecchi 在《Science》上发表了《Optimization by Simulated Annealing》。文章摘要中写道:「在统计力学(在有限温度下的热平衡中具有多个自由度的系统的行为)和多变量或组合优化问题(寻找给定多参数函数的最小值)之间,存在深刻且有用的联系。对固体退火的细节类比提供了一个优化复杂庞大系统的框架。这种与统计力学的联系带来了新信息,提供了一个研究传统优化问题和方法的全新视角。」文中指出 Metropolis 的程序可以被用在寻找更优解中,因为物理系统的能量和一些组合优化(Combinatorial optimization)问题中的成本函数相类似,而原子的随机微小移位可类比为优化问题中解的局部变动。由此,Kirkpatrick 等人以 Metropolis 的方法为基础发展出一套随机化算法,是为模拟退火算法。
二、由固体退火到模拟退火:实现形式
模拟退火算法来源于固体退火原理,将固体加温至充分高,再使其以足够慢的速度冷却,用原子或晶格空位的移动来释放内部残留应力,通过这些原子排列重组的过程来消除材料中的差排。加温时,固体内部粒子随温度升高变为无序状,内能增大,而缓慢冷却时粒子趋于有序,在每个温度都达到平衡态,按照物理规律,最终在常温时达到基态,内能减为最小。
常规的模拟退火算法类比这一过程进行实现,包括以下步骤:
( 1 ) 设定冷却进度表(Cooling schedule),其由以下一组初始参数组成:
冷却开始时的温度
,为避免陷入局部最优,应使此温度较高;
控制温度衰减的函数,最简单可处理为
,其中
为一个设定好的常数,经典的降温函数还有
,其中
为迭代次数;
温度的终值
,为避免精确度过差,应使此温度较低;
Markov 链的长度
,即在每一温度下的最大迭代次数。
( 2 ) 在数学模型中找到解空间与目标函数,并生成初始解。
解空间(Feasible region)
:若所有可能解均为可行解,解空间即为可能解
的集合 ;若存在不可行解,则限定解空间
为所有可行解的集合,或通常地,允许包含所有可能解但在目标函数中使用罚函数(Penalty function)以最终排除不可行解。
目标函数
:通常是解空间到实数集的映射,类比固体退火中的能量(Energy),常表示为
,在算法内部,解越优,目标函数值
应越小。
初始解
:模拟退火算法的健壮性(Robustness)较好,即最终解的求得不过分依赖于初始解的选取,故初始解通常随机选择,并得到相应的目标函数值
。
( 3 ) 新解的产生与接受,以及最优解的储存。
对当前解
进行随机扰动产生新解
,通常通过简单变换(如部分元素的互换)产生(所有可能产生的新解构成当前解的邻域)。然后计算相应