现代优化算法 之 模拟退火
来源:互联网 发布:cf显示网络出现异常 编辑:程序博客网 时间:2024/06/07 14:30
现代优化算法
现代优化算法是 80 年代初兴起的启发式算法。这些算法包括禁忌搜索(tabu search),模拟退火(simulated annealing),遗传算法(genetic algorithms),人工神经网络(neural networks)。它们主要用于解决大量的实际应用问题。目前,这些算法在理论和实际应用方面得到了较大的发展。无论这些算法是怎样产生的,它们有一个共同的目标-求 NP-hard 组合优化问题的全局最优解。虽然有这些目标,但 NP-hard 理论限制它们只能以启发式的算法去求解实际问题。
启发式算法包含的算法很多,例如解决复杂优化问题的蚁群算法(Ant Colony Algorithms)。有些启发式算法是根据实际问题而产生的,如解空间分解、解空间的限制等;另一类算法是集成算法,这些算法是诸多启发式算法的合成。
现代优化算法解决组合优化问题,如 TSP(Traveling Salesman Problem)问题,QAP(Quadratic Assignment Problem)问题,JSP(Job-shop Scheduling Problem)问题等效果很好。
这一章讲解模拟退火的算法过程,之前也介绍过一些简单的模拟退火的思想,上次是基于ACM-ICPC的思想进行介绍的,这次是详细的计算推导过程。
模拟退火
模拟退火算法得益于材料的统计力学的研究成果。统计力学表明材料中粒子的不同结构对应于粒子的不同能量水平。在高温条件下,粒子的能量较高,可以自由运动和重新排列。在低温条件下,粒子能量较低。如果从高温开始,非常缓慢地降温(这个过程被称为退火),粒子就可以在每个温度下达到热平衡。当系统完全被冷却时,最终形成处于低能状态的晶体。
如果用粒子的能量定义材料的状态,Metropolis 算法用一个简单的数学模型描述了退火过程。假设材料在状态
- (1)如果
E(j)≤E(i) ,接受该状态被转换。 - (2)如果
E(j)>E(i) ,则状态转换以如下概率被接受:eE(i)−E(j)KT
其中
在某一个特定温度下,进行了充分的转换之后,材料将达到热平衡。这时材料处于状态
其中
显然
其中
其中
上式表明当温度降至很低时,材料会以很大概率进入最小能量状态。
假定我们要解决的问题是一个寻找最小值的优化问题。将物理学中模拟退火的思想应用于优化问题就可以得到模拟退火寻优方法。
考虑这样一个组合优化问题:优化函数为
首先给定一个初始温度
换句话说,如果生成的解 x’ 的函数值比前一个解的函数值更小,则接受
否则以概率
泛泛地说,对于某一个温度
在温度
我们注意到,在每个
当温度
并且
这说明如果温度下降十分缓慢,而在每个温度都有足够多次的状态转移,使之在每一个 温度下达到热平衡,则全局最优解将以概率 1 被找到。因此可以说模拟退火算法可以找 到全局最优解。
在模拟退火算法中应注意以下问题:
(1)理论上,降温过程要足够缓慢,要使得在每一温度下达到热平衡。但在计算 机实现中,如果降温速度过缓,所得到的解的性能会较为令人满意,但是算法会太慢, 相对于简单的搜索算法不具有明显优势。如果降温速度过快,很可能最终得不到全局最 优解。因此使用时要综合考虑解的性能和算法速度,在两者之间采取一种折衷。
(2)要确定在每一温度下状态转换的结束准则。实际操作可以考虑当连续 m 次的 转换过程没有使状态发生变化时结束该温度下的状态转换。最终温度的确定可以提前定 为一个较小的值Te ,或连续几个温度下转换过程没有使状态发生变化算法就结束。
(3)选择初始温度和确定某个可行解的邻域的方法也要恰当。
应用举例
题目
已知敌方100 个目标的经度、纬度如表1 所示。
我方有一个基地,经度和纬度为
我方派一架飞机从基地出发,侦察完敌方所有目标,再返回原来的基地。在敌方每一目标点的侦察时间不计,求该架飞机所花费的时间(假设我方飞机巡航时间可以充分长)。
这是一个旅行商问题,旅行社问题又是NP完全问题,目前没有已知的算法可以解决。我们依次给基地编号为
距离矩阵
求一个从点
上面问题中给定的是地理坐标(经度和纬度),我们必须求两点间的实际距离。设A, B两点的地理坐标分别为
其中
A, B两点的实际距离:
化简得
算法描述
求解的模拟退火算法描述如下:
(1)解空间
解空间
其中每一个循环排列表示侦察
(2)目标函数
此时的目标函数为侦察所有目标的路径长度或称代价函数。我们要求
而一次迭代由下列三步构成:
(3)新解的产生
① 2 变换法
任选序号
② 3 变换法
任选序号
(4)代价函数差
对于2 变换法,路径差可表示为
(5)接受准则
如果
(6)降温
利用选定的降温系数
(7)结束条件
用选定的终止温度
MATLAB程序如下:
clc,clearload sj.txt %加载敌方100 个目标的数据,数据按照表格中的位置保存在纯文本文件sj.txt 中x=sj(:,1:2:8);x=x(:);y=sj(:,2:2:8);y=y(:);sj=[x y];d1=[70,40];sj=[d1;sj;d1];sj=sj*pi/180;%距离矩阵dd=zeros(102);for i=1:101for j=i+1:102temp=cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))+sin(sj(i,2))*sin(sj(j,2));d(i,j)=6370*acos(temp);endendd=d+d';S0=[];Sum=inf;rand('state',sum(clock));for j=1:1000S=[1 1+randperm(100),102];temp=0;for i=1:101temp=temp+d(S(i),S(i+1));endif temp<SumS0=S;Sum=temp;endende=0.1^30;L=20000;at=0.999;T=1;%退火过程for k=1:L%产生新解c=2+floor(100*rand(1,2));c=sort(c);c1=c(1);c2=c(2);%计算代价函数值df=d(S0(c1-1),S0(c2))+d(S0(c1),S0(c2+1))-d(S0(c1-1),S0(c1))-d(S0(c2),S0(c2+1));%接受准则if df<0S0=[S0(1:c1-1),S0(c2:-1:c1),S0(c2+1:102)];Sum=Sum+df;elseif exp(-df/T)>rand(1)S0=[S0(1:c1-1),S0(c2:-1:c1),S0(c2+1:102)];Sum=Sum+df;endT=T*at;if T<ebreak;endend% 输出巡航路径及路径长度S0,Sum
计算结果为 44 小时左右。其中的一个巡航路径如图所示。
- 现代优化算法 之 模拟退火
- 机器学习之优化算法——模拟退火算法
- 现代启发式算法--初步了解模拟退火算法
- 现代启发式算法(二)——模拟退火算法
- 优化算法 - 爬山,模拟退火算法
- 优化算法——模拟退火算法
- 全局优化算法:模拟退火算法
- 【优化算法】大白话解析模拟退火算法
- 优化算法——模拟退火算法
- 模拟退火算法解决函数优化问题
- 优化算法-爬山法和模拟退火
- 模拟退火算法之运用实例
- TSP 之模拟退火算法 cpp实现
- 元启发式方法之模拟退火算法
- TSP问题之模拟退火算法
- 经典算法之—模拟退火
- 优化算法(模拟退火算法 与 遗传算法)
- 优化算法1:模拟退火算法思想解析
- 电源管理方案APM和ACPI比较
- binary search(java)
- 接口适配器模式
- sql学习笔记第一天
- OpenGL(2)——第一个 OpenGL 程序
- 现代优化算法 之 模拟退火
- Linux 常用命令
- ps的一些基本知识
- iOS PCM文件转MP3格式
- bounds和frame
- 12332
- div滑动效果
- gradle详解
- android 混淆打包