模拟退火算法及MATLAB代码
什么是单目标全局优化问题
单目标优化问题指的是所评测目标只有一个,只需要根据具体的满足函数条件,求得最值的问题。
多目标优化问题的各个子目标之间是矛盾的 ,一个子目标的改善有可能会引起另一个或者另几个子目标的性能降低 , 也就是要同时使多个子目标一起达到最优值是不可能的 , 而只能在它们中间进行协调和折中处理 , 使各个子目标都尽可能地达到最优化。其与单目标优化问题的本质区别在于 ,它的解并非唯一 ,而是存在一组由众多 Pareto最优解组成的最优解集合 ,集合中的各个元素称为 Pareto最优解或非劣最优解。
全局优化研究的是多变量非线性函数在某个约束区域上的全局最优解的特性和构造寻求全局最优解的计算方法,以及求解方法的理论性质和计算表现。由于很可能在一个全局优化问题里存在多个局部最优解,且它们不同于问题的全局最优解,因此人们无法借助于经典的局部优化方法求解这些问题,特别是至今还没有很好的全局性判定准则,使得全局优化的研究极具挑战性。然而,自从20世纪70年代中后期以来,全局优化以惊人的速度在许多方面取得了长足的进展,许多新的全局优化理论及算法也相继出现,并得到了广泛应用。目前全局优化已作为最优化领域中一个独立的学科分支,引起了国内外学者的广泛重视并掀起了该领域的研究热潮,成为一个强有力的工具,被人们应用于对实际问题进行的建模和分析中。
模拟退火算法MATLAB源码
clear
clc
%生成初始解
sol_new2=1; %(1)解空间(初始解)
sol_new1=2-sol_new2^2;
sol_current1 = sol_new1;
sol_best1 = sol_new1;
sol_current2 = sol_new2;
sol_best2 = sol_new2;
E_current = inf;
E_best = inf;
rand('state',sum(clock)); %初始化随机数发生器
t=90; %初始温度
tf=89.9; %结束温度
a = 0.99; %温度下降比例
while t>=tf%(7)结束条件
for r=1:1000 %退火次数
%产生随机扰动(3)新解的产生
sol_new2=sol_new2+rand*0.2;
sol_new1=2-sol_new2^2;
%检查是否满足约束
if sol_new1^2-sol_new2>=0 && -sol_new1-sol_new2^2+2==0 && sol_new1>=0 &&sol_new2>=0
else
sol_new2=rand*2;
sol_new1=2-sol_new2^2;
continue;
end
%退火过程
E_new=sol_new1^2+sol_new2^2+8;%(2)目标函数
if E_new<E_current%(5)接受准则
E_current=E_new;
sol_current1=sol_new1;
sol_current2=sol_new2;
if E_new<E_best
%把冷却过程中最好的解保存下来
E_best=E_new;
sol_best1=sol_new1;
sol_best2=sol_new2;
end
else
if rand<exp(-(E_new-E_current)/t)%(4)代价函数差
E_current=E_new;
sol_current1=sol_new1;
sol_current2=sol_new2;
else
sol_new1=sol_current1;
sol_new2=sol_current2;
end
end
plot(r,E_best,'*')
hold on
end
t=t*a;%(6)降温
end
disp('最优解为:')
disp(sol_best1)
disp(sol_best2)
disp('目标表达式的最小值等于:')
disp(E_best)
模拟退火算法的基本原理
模拟退火算法是一种随机搜索算法(启发式算法),随机搜索方法也称作概率搜索算法,这很好理解,是一种能够在优化问题的可行集中随机采样,逐步完成搜索的算法。模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据Metropolis准则,粒子在温度T时趋于平衡的概率为e(-ΔE/(kT)),其中E为温度T时的内能,ΔE为其改变量,k为Boltzmann常数。用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成控制参数t,即得到解组合优化问题的模拟退火算法:由初始解i和控制参数初值t开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解,这是基于蒙特卡罗迭代求解法的一种启发式随机搜索过程。退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止条件S
算法流程图
1)初始化:初始温度T(充分大),初始解状态S(足算法选代的起点),个T值的迭代次数L
2)对k-1.,… L做第(3)至第6步
3)产生新解S’
4)计算增量At=C(S)-C(S),其中C(S)为评价函数
5)若△t’<0则接受S作为新的当前解,否则以概率exp(-△t/T)接受S作为新的当前解。
6)如果满足终止条件则输出当前解作为最优解,结束程序。终止条件通常取为连续着干个新解都没有被接受时终止算法。
7)T逐渐减少,且T->0,然后转第2步
模拟退火算法的要素
①状态空间: 即解空间,也称为搜索空间,是经过编码的可能解组成的集合。
②状态产生函数: 应尽可能保证产生的候选解遍布整个状态空间,可采用附加扰动、随机产生、移位、平滑、边界取值等多种算子作为模拟退火的状态产生函数。状态产生函数通常产生的候选解的方式和候选解产生的概率分布两部分组成。
③初始温度: 实验表明,初始温度越高,得到高质量解的概率越大,但算法计算的时间越长。兼顾算法求解的质量和执行效率,选择初温的方法常有:随机产生一组状态,确定最大值和最小值间的差值d,利用函数得到初温,如 T0= dp,其中 p 为初始接受概率; 或均匀抽样一组状态,以各状态的目标值的方差为初温。
④冷却进度表: 是指从某一高温状态向低温状态冷却时的降温管理表,也即温度衰减函数,也可称为退火策略。最简单的控制参数衰减函数为:Tk= aTk - 1= akT0( k = 1,2,…)
( 1)其中,a 是常取值 0. 5 ~0. 9,这种退火策略是很常用。经典的模拟退火衰减函数为:Tk=T0lg( 1 + k)( k = 1,2,…)
( 2)其中,Tk为第 k 步时的温度值,T0为初始温度。也可以选择其它的衰减函数如 Tk=T0ln k,Tk=T0k等等。衰减函数应选择小的比较合适,可避免过长的马尔可夫链和迭代次数增加。
⑤Metropolis 准则: Metropolis 准则是 Metropolis等人在 1953 年提出的重要性采样法,其基本思想是采样是着重选择那些具有重要贡献的状态,则可以较快地达到较好的结果。该准则是 SA 算法收敛于全局最优解的关键。粒子初始状态 i 为当前状态,Ei 是该状态的能量,即目标函数在状态 i 的值,某个粒子位移随机产生一微小变化,得一新状态 j,其能量为 Ej。如果 Ej< Ei,则 j 状态是重要状态,如果 Ej> Ei,则要根据概率 p 来判定,p 计算公式如下:p = exp(Ei- EjκT) 式中,T 为温度,κ 为玻耳兹曼常数,exp 表示自然指数。温度越小,则降温概率 p 就越小,温度越高,与出现一次能量差为 dE 的降温概率 p 就越大。p 越大则 j 状态是重要状态的概率就越大。若 j 是重要状态,则取代 i 成为当前状态,否则舍弃新状态。再重复以上新状态产生过程。这种接受新状态转移的准则即为 Metropolis 准则。
⑥内循环终止的准则: 也称为 Metropolis 抽样稳定准则,用于决定各温度下产生候选解的个数,该准则包括有: 目标函数的平均值是否稳定; 连续若干步目标函数值变化较; 按一定的步数抽样。
⑦外循环终止的准则: 即决定算法何时结束,主要包括: 循环迭代的次数设置; 终止温度的阈值设置; 检验系统熵值是否稳定; 检验算法收敛到最优值连续若干步保持不变。其中终止温度的设置常用的是 Kirkpatrick 等提出准则: 在若干个马尔可夫链中解无任何变化( 恶化或优化) 就终止算法。迭代次数 Lk的选取了冷却进度表密切相关,一般 Tk小衰减,则 Lk值就适当大。
模拟退火算法提出者及国内主要研究者及个人主页
模拟退火算法(Simulated Annealing,SA)最早的思想是由N. Metropolis 等人于1953年提出,1983年S.Kirkpatrick成功将退火算法引入组合优化领域。杨若黎和顾基发提出了一种高效的模拟退火全局算法。陈华根快速模拟退火算法。钟勇加入了记忆功能
戴金海 国防科技大学航天与材料工程学院
http://xueshu.baidu.com/scholarID/CN-B075PQ2J?site=author_jump
阳春华 中南大学信息科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BV74HC0J?site=author_jump
郑大钟 清华大学自动化系
http://xueshu.baidu.com/scholarID/CN-BZ733OWJ?site=author_jump
王士同 江南大学信息工程学院
http://xueshu.baidu.com/scholarID/CN-B275DHMJ?site=author_jump
李振坤 广东工业大学计算机学院
http://xueshu.baidu.com/scholarID/CN-BZ74VI1J?site=author_jump
桂卫华 中南大学信息科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BL73QACJ?site=author_jump
郭英 空军工程大学电讯工程学院
http://xueshu.baidu.com/scholarID/CN-BM75IITJ?site=author_jump
潘全科 聊城大学计算机学院
http://xueshu.baidu.com/scholarID/CN-BY739AXJ?site=author_jump
张跃 清华大学自动化系
http://xueshu.baidu.com/scholarID/CN-B375KYNJ?site=author_jump
吴小俊 江南大学信息工程学院
http://xueshu.baidu.com/scholarID/CN-BK75SDDJ?site=author_jump
吴敏 中南大学信息科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BW74CLAJ?site=author_jump
彭宏 华南理工大学计算机科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BX74YT5J?site=author_jump
孙雨耕 天津大学电气与自动化工程学院
http://xueshu.baidu.com/scholarID/CN-B173YCNJ?site=author_jump
郑启伦 华南理工大学计算机科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BA75GWLJ?site=author_jump
唐泽圣 清华大学计算机科学与技术系
http://xueshu.baidu.com/scholarID/CN-BV75DYVJ?site=author_jump
查建中 北京交通大学机械与电子控制工程学院
http://xueshu.baidu.com/scholarID/CN-BV75TKNJ?site=author_jump
杨善林 合肥工业大学管理学院
http://xueshu.baidu.com/scholarID/CN-BO75AS9J?site=author_jump
陈松乔 中南大学信息科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BW746BXJ?site=author_jump
桂卫华 中南大学信息科学与工程学院
http://xueshu.baidu.com/scholarID/CN-BL73QACJ?site=author_jump
郑纬民 清华大学计算机科学与技术系
http://xueshu.baidu.com/scholarID/CN-BI74PNLJ?site=author_jump
孙家广 清华大学计算机科学与技术系
http://xueshu.baidu.com/scholarID/CN-BJ7346CJ?site=author_jump
吴澄 清华大学自动化系
http://xueshu.baidu.com/scholarID/CN-BY74OPIJ?site=author_jump
须文波 江南大学信息工程学院
http://xueshu.baidu.com/scholarID/CN-BL75KSNJ?site=author_jump
金以慧 清华大学自动化系
http://xueshu.baidu.com/scholarID/CN-B973R97J?site=author_jump
杨炳儒 北京科技大学信息工程学院
http://xueshu.baidu.com/scholarID/CN-B174EZEJ?site=author_jump
(此数据为19年在知网查找到的数据,必然有大量疏漏,请见谅。)
基于模拟火算法的一些变形算法
陈华根,李丽华等提出基于 Ingber 提出的非常快速的模拟退火算法(VFSA)
李红军提出模拟退火与遗传算法相结合
刘敏等提出自适应的模拟遗传算法
余建军,孙树栋提出将模拟退火与免疫算法混合
杨静宇等提出基于模拟退火的粒子群优化算法。
测试问题集
旅行商问题
三维装箱问题
最大流问题
背包问题
np问题
马尔可夫随机场
图着色问题
CEC测试集
可改进方向
设计出合适的状态产生函数,使其根据搜索进程的需要表现出状态的空间分散性或局部区域性
设计高效的退火策略
避免状态的迂回搜索
采用并行搜索结构
为避免陷入局部极小,改进对温度控制的方法
选择合适的初始状态
设计合适的算法终止准则
增加升温或重升温,算法进程的适当时机将温度提高,避免陷入局部最优解
增加记忆功能,避免迂回搜索
补充搜索功能,以最小解再次执行退火
对每一当前状态,采用多次搜索策略,以概率接受区域内最优状态
结合其他搜索机制算法,如遗传,混沌
并行策略(操作并行策略,试演并行策略,区域分裂策略和混乱松弛策略)