基于模拟退火算法的TSP算法
专业综合设计报告
课程名称:电子专业综合设计
设计名称:基于模拟退火算法的TSP算法
姓名:
学号:
班级:电子0903
指导教师:朱正为
起止日期:2012.11.1-2012.12.30
专业综合设计任务书
学生班级:电子0903 学生姓名:学号:20095830
设计名称:基于模拟退火算法的TSP算法
起止日期:2012.11.1-2012.12.30指导教师
设计要求:
旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。
此设计是用模拟退火算法来实现TSP问题的寻求最优解。
专业综合设计学生日志
时间设计内容
2012.11.9初步了解模拟退火算法的TSP算法
2012.11.12设计算法流程、确定解题思路
2012.11.20讨论算法流程及解题思路的可行性,为仿真做准备
2012.12.2运用MATLAB软件进行实验仿真,分析仿真结果
2012.12.8整理实验报告
2012.12.17 答辩
专业综合设计考勤表
周星期一星期二星期三星期四星期五
专业综合设计评语表指导教师评语:
成绩:指导教师:
年月日
一设计目的和意义 (5)
二设计原理 (5)
2.1 模拟退火算法的基本原理 (5)
2.2 TSP问题介绍 (6)
三详细设计步骤 (8)
3.1.算法流程 (8)
3.2模拟退火算法实现步骤................................................................................. 错误!未定义书签。四设计结果及分析 (9)
4.1 MATLAB程序实现及主函数 (9)
4.1.1计算距离矩阵 (9)
4.1.2 初始解 (10)
4.1.3 生成新解 (10)
4.1.4 Metropolis 准则函数................................................................................................ (10)
4.1.5 画路线轨迹图 (11)
4.1.6 输出路径函数 (12)
4.1.7 可行解路线长度函数 (12)
4.1.8 模拟退火算法的主函数 (13)
4.2.仿真结果 (15)
五体会 (18)
六参考文献 (18)
基于模拟退火算法的TSP算法
一、设计目的和意义
旅行商问题是组合优化领域里的一个典型的、易于描述却难以处理的NP难题,其可能的路径数目与城市数目是呈指数型增长的,求解非常困难。首先介绍了旅行商问题,给出了其数学描述以及实际应用,进而给出解决TSP的一种比较精确的算法——模拟退火算法。然后阐述了模拟退火算法的基本原理,重点说明了其基本思想及关键技术。最后运用MATLAB语言实现了该算法,并将其运用到解决旅行商问题的优化之中。数值仿真的结果表明了该方法能够对数据进行全局寻优,有效克服了基于导数的优化算法容易陷入局部最优的问题。
了解模拟退火算法的TSP算法的基本思路及原理,并应用MATLAB实现仿真,熟练掌握MATLAB的操作方式及应用,能正确书写报告。
二、设计原理
2.1 模拟退火算法的基本原理
模拟退火算法足2O世纪8O年代初提出的一种基于蒙特卡罗(Mente Carlo)迭代求解策略的启发式随机优化算法。它通过Metropolis接受准则概率接受劣化解并以此跳出局部最优,通过温度更新函数的退温过程进行趋化式搜索并最终进入全局最优解集。其出发点是基于物理中固体物质的退火过程与一搬的组合优化问题之间的相似性。模拟退火法是一种通用的优化算法,其物理退火过程由以下三部分组成。
(1)加温过程。其目的是增强粒子的热运动,使其偏离平衡位置。当温度足够高时,固体将熔为液体,从而消除系统原先存在的非均匀状态。
(2)等温过程。对于与周围环境交换热量而温度不变的密封系统,系统状态的自发变化总是朝自由能减少的方向进行的,当自由能达到最小时,系统达到平衡状态。
(3)冷却过程。使粒子热运动减弱,系统能量下降,得到晶体结构。
其中,加热过程对应算法的设定初温,等温过程对应算法的 Metropolis 抽样过程,冷却过程对应控制参数的下降。这里能量的变化就是目标函数,要得到的最优解就
是能量最低态。Metropolis 准则是SA算法收敛于全局最优解的关键所在,Metropolis 准则以一定的概率接受恶化解,这样就使算法跳离局部最优的陷阱。
模拟退火算法为求解传统方法难处理的TSP问题提供了一个有效的途径和通用框架,并逐渐发展成一种迭代自适应启发式概率性搜索算法。模拟退火算法可以用以求解不同的非线性问题,对不可微甚至不连续的函数优化,能以较大的概率求的全局有化解,该算法还具有较强的鲁棒性、全局收敛性、隐含并行性及广泛的适应性,并且能处理不同类型的优化设计变量(离散的、连续的和混合型的),不需要任何的辅助信息,对目标函数和约束函数没有任何要求。利用 Metropolis 算法并适当的控制温度下降过程,在优化问题中具有很强的竞争力,此设计即为基于模拟退火算法的TSP算法。
SA算法实现过程如下(以最小化问题为例):
(1)初始化:取初始温度T
0足够大,令T=T
,任取初始解S1,确定每个T时的迭代次数,即
Metropolis 链长L。
(2)对当前温度T和k=1,2,……,l,重复步骤(3)~(6)。
(3)对当前S
1随机扰动产生一个新解S
2。
(4)计算S
2的增量df=f(S
2
)-f(S
1
)其中f为S
1
的代价函数。
(5)若df<0 ,则接受S
2作为新的当前解,即S
1
=S
2
;否则计算S
2
的接受概率exp
(-df/T),即随机产生(0,1)区间上均匀分布的随机数 rand,若exp(-df/T)>rand
也接受S
2作为新的当前解,S
1
=S
2
;否则保留当前解S
1
。
(6)如果满足终止条件Stop,则输出当前解s1为最优解,结束程序。终止条件Stop 通常为:在连续若干个 Metropolis 链中新解s2都没有被接受时终止算法,或是设定结束温度。否则按衰减函数衰减 T 后返回步骤(2)。
以上步骤成为 Metropolis 过程。逐渐降低控制温度,重复 Metropolis 过程,直至满足结束准则 Stop,求出最优解。
2.2 TSP问题介绍
旅行商问题(Traveling Salesman Problem,简称TSP)又名货郎担问题,是威廉·哈密尔顿爵士和英国数学家克克曼(T.P.Kirkman)于19世纪初提出的一个数学问题,也是著名的组合优化问题。问题是这样描述的:一名商人要到若干城市去推销商品,已知城市个数和各城市间的路程(或旅费),要求找到一条从城市1出发,经过所有城市且每个城市只能访问一次,最后回到城市1的路线,使总的路程(或旅费)最小。TSP刚提出时,不少人认为这个问题很简单。后来人们才逐步意识到这个问题只是表述简单,易于
为人们所理解,而其计算复杂性却是问题的输入规模的指数函数,属于相当难解的问题。这个问题数学描述为:假设有n个城市,并分别编号,给定一个完全无向图G=(V,E),V={1,2,…,n},n>1。其每一边(i,j)∈E有一非负整数耗费C i,j(即上的权记为C i,j,i,j∈V)。G的一条巡回路线是经过V中的每个顶点恰好一次的回路。一条巡回路线的耗费是这条路线上所有边的权值之和。TSP问题就是要找出G的最小耗费回路。
人们在考虑解决这个问题时,一般首先想到的最原始的一种方法就是:列出每一条可供选择的路线(即对给定的城市进行排列组合),计算出每条路线的总里程,最后从中选出一条最短的路线。假设现在给定的4个城市分别为A、B、C和D,各城市之间的耗费为己知数,如图1所示。我们可以通过一个组合的状态空间图来表示所有的组合,如图
(1-1)
图 1 顶点带权图图 2 TSP问题的解空间树
从图中不难看出,可供选择的路线共有6条,从中很快可以选出一条总耗费最短的路线:顶点序列为(A,C,B,D,A)。由此推算,若设城市数目为n时,那么组合路径数则为(n-1)!。很显然,当城市数目不多时要找到最短距离的路线并不难,但随着城市数目的不断增大,组合路线数将呈指数级数规律急剧增长,以至达到无法计算的地步,这就是所谓的“组合爆炸问题”。假设现在城市的数目增为20个,组合路径数则为(20-1)!≈1.216×1017,如此庞大的组合数目,若计算机以每秒检索1000万条路线的速度计算,也需要花上386年的时间[6]。
三、详细设计步骤
3.1算法流程
模拟退火算法求解流程框图如图1所示。
图3 模拟退火算法求解流程框图
3.2模拟退火算法实现步骤如下:
(1)控制参数的设置
需要设置的主要控制参数有降温速率q、初始温度T0、结束温度T end以及链长L。
(2)初始解
对于n个城市TSP问题,得到的解就是对1~n的一个排序,其中每个数字为对应城市的编号,如对10个城市的TSP问题{1,2,3,4,5,6,7,8,9,10},则|1|10|2|4|5|6|8|7|9|3就
是一个合法的解,采用产生随机排列的方法产生一个初始解S。
(3)解变换生成新解
通过对当前解S1进行变换,产生新的路径数组即新解,这里采用的变换是产生随机数的方法来产生将要交换的两个城市,用二邻域变换法产生新的路径,即新的可行
解S2。
例如n=10时,产生两个[1,10]范围内的随机整数r1和r2,确定两个位置,将其对换位置,如r1=4,r2=7
9 5 1 6 3 8 7 10 4 2 得到的新解为
9 5 1 7 3 8 6 10 4 2
(4)Metropolis 准则 若路径长度函数为f (S ),新解的路径为f (S 2),路径差为d f =f (S 2)-f (S 1),则Metropolis 准则为
{1,0
=
exp(
),0df P df
df T <≥如果df<0,则以概率1接受新路线,否则以概率exp (-df/T )接
受新路线。 (5)降温
利用降温速率q 进行降温,即T=qT,若T 小于结束温度,则停止迭代输出当前状态,否则继续迭代。
四 、设计结果及分析
4.1 MATLAB 程序实现及主函数 4.1.1 计算距离矩阵
利用给出的N 个城市的坐标,算出N 个城市的两两之间的距离,得到距离矩阵(N ?N )。计算函数为Distance ,得到初始群种。程序如下
4.1.2 初始解
function D=Distanse(a) %% 计算两两城市之间的距离 %输入 a 各城市的位置坐标 %输出 D 两两城市之间的距离 row=size(a,1); D=zeros(row,row); for i=1:row for j=i+1:row D(i,j)=((a(i,1)-a(j,1))^2+(a(i,2)-a(j,2))^2)^0.5; D(j,i)=D(i,j); end end
初始解的产生直接使用MATLAB自带的函数randperm,如城市格式为N个,则产生初始解:
S1=randperm(N);%随机产生一个初始路线
4.1.3 生成新解
解变换生成新解函数为NewAnswer,程序代码如下:
function S2=NewAnswer(S1)
%% 输入
% S1:当前解
%% 输出
% S2:新解
N=length(S1);
S2=S1;
a=round(rand(1,2)*(N-1)+1); %产生两个随机位置用来交换
W=S2(a(1));
S2(a(1))=S2(a(2));
S2(a(2))=W; %得到一个新路线
4.1.4 Metropolis 准则函数
Metropolis 准则函数为Metropolis,程序代码如下:
function [S,R]=Metropolis(S1,S2,D,T)
%% 输入
% S1:当前解
% S2: 新解
% D: 距离矩阵(两两城市的之间的距离)
% T: 当前温度
%% 输出
% S:下一个当前解
% R:下一个当前解的路线距离
%%
R1=PathLength(D,S1); %计算路线长度
N=length(S1); %得到城市的个数
R2=PathLength(D,S2); %计算路线长度
dC=R2-R1; %计算能力之差
if dC<0 %如果能力降低接受新路线
S=S2;
R=R2;
elseif exp(-dC/T)>=rand %以exp(-dC/T)概率接受新路线
S=S2;
R=R2;
else %不接受新路线
S=S1;
R=R1;
end
4.1.5 画路线轨迹图
画出给的路线的轨迹图函数为DrawPath,程序代码如下:
function DrawPath(Chrom,X)
%% 画路径函数
%输入
% Chrom 待画路径
% X 各城市坐标位置
R=[Chrom(1,:) Chrom(1,1)]; %一个随机解(个体)
figure;
hold on
plot(X(:,1),X(:,2),'o','color',[0.5,0.5,0.5])
plot(X(Chrom(1,1),1),X(Chrom(1,1),2),'rv','MarkerSize',20)
for i=1:size(X,1)
text(X(i,1)+0.05,X(i,2)+0.05,num2str(i),'color',[1,0,0]);
end
A=X(R,:);
row=size(A,1);
for i=2:row
[arrowx,arrowy] = dsxy2figxy(gca,A(i-1:i,1),A(i-1:i,2));%坐标转换
annotation('textarrow',arrowx,arrowy,'HeadWidth',8,'color',[0,0,1]);
end
hold off
xlabel('横坐标')
ylabel('纵坐标')
title('轨迹图')
box on
4.1.6 输出路径函数
将得到的路径输出显示在Command Window 中,函数名为OutputPath。
function p=OutputPath(R)
%% 输出路径函数
%输入:R 路径
R=[R,R(1)];
N=length(R);
p=num2str(R(1));
for i=2:N
p=[p,'—>',num2str(R(i))];
end
disp(p)
4.1.7 可行解路线长度函数
计算可行解的路线长度函数为PathLength ,程序代码如下:
function len=PathLength(D,Chrom)
%% 计算各个体的路径长度
% 输入:
% D 两两城市之间的距离
% Chrom 个体的轨迹
[row,col]=size(D);
NIND=size(Chrom,1);
len=zeros(NIND,1);
for i=1:NIND
p=[Chrom(i,:) Chrom(i,1)];
i1=p(1:end-1);
i2=p(2:end);
len(i,1)=sum(D((i1-1)*col+i2));
end
4.1.8 模拟退火算法的主函数
模拟退火算法参数设置如表一所列。
表一参数设定
降温速率q初始温度T0结束温度T end链长L
0.91000 0.001 200
主函数代码如下:
clc;
clear;
close all;
%%
tic
T0=1000; % 初始温度
Tend=1e-3; % 终止温度
L=500; % 各温度下的迭代次数(链长)
q=0.9; %降温速率
%% 加载数据
load CityPosition1;
%%
D=Distanse(X); %计算距离矩阵
N=size(D,1); %城市的个数
%% 初始解
S1=randperm(N); %随机产生一个初始路线
%% 画出随机解的路径图
DrawPath(S1,X)
pause(0.0001)
%% 输出随机解的路径和总距离
disp('初始种群中的一个随机值:')
OutputPath(S1);
Rlength=PathLength(D,S1);
disp(['总距离:',num2str(Rlength)]);
%% 计算迭代的次数Time
Time=ceil(double(solve(['1000*(0.9)^x=',num2str(Tend)])));
count=0; %迭代计数
Obj=zeros(Time,1); %目标值矩阵初始化
track=zeros(Time,N); %每代的最优路线矩阵初始化
%% 迭代
while T0>Tend
count=count+1; %更新迭代次数
temp=zeros(L,N+1);
for k=1:L
%% 产生新解
S2=NewAnswer(S1);
%% Metropolis法则判断是否接受新解
[S1,R]=Metropolis(S1,S2,D,T0); %Metropolis 抽样算法
temp(k,:)=[S1 R]; %记录下一路线的及其路程
end
%% 记录每次迭代过程的最优路线
[d0,index]=min(temp(:,end)); %找出当前温度下最优路线
if count==1 || d0 Obj(count)=d0; %如果当前温度下最优路程小于上一路程则记录当前路程else Obj(count)=Obj(count-1);%如果当前温度下最优路程大于上一路程则记录上一路程end track(count,:)=temp(index,1:end-1); %记录当前温度的最优路线 T0=q*T0; %降温 fprintf(1,'%d\n',count) %输出当前迭代次数 end %% 优化过程迭代图 figure plot(1:count,Obj) xlabel('迭代次数') ylabel('距离') title('优化过程') %% 最优解的路径图 DrawPath(track(end,:),X) %% 输出最优解的路线和总距离 disp('最优解:') S=track(end,:); p=OutputPath(S); disp(['总距离:',num2str(PathLength(D,S))]); disp('-------------------------------------------------------------') toc 4.2仿真结果及分析 优化前的一个随机路线图如图4所示: 图4 总路线距离约为57.00 优化以后的最优解路线如下图5: 图5 该优化路径的总路程近似为30.00,已为最优解。模拟退火算法进化过程图如下图6: 由图可以看出,优化前后路径长度得到很大改进,变为原来的52.4%,65代以后路径长度已经保持不变了,可以认为已经是最优解了。 上图为用模拟退火算法解决TSP的GUI(Graphics User Interface,图形用户界面)。这是由14个城市构成的一个对称TSP实例,利用上述算法对该实例进行模拟退火求解,设定初始温度T0=1000,冷却速率为0.9,经过仿真得到的最优解与已知最优解非常接近,所需时间也令人满意。 五、体会 使用MATIAB对求解TSP问题的模拟退火算法程序进行了仿真。平均结果表明,首先该算法能够找到TSP问题的最优解,说明算法的正确性。其次算法对TSP问题的求解时间并不呈指数增长,说明了算法的有效性。 5.1关于MATLAB的体会 MATLAB 是当今科学界最具影响力、也是最具活力的软件,它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。然后,了解到了MATLAB软件的功能。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能。我们应该熟练掌握其使用方法。 5.2关于基于模拟退火算法的TSP算法的体会 模拟退火算法是依据Metropolis准则接受新解,该准则除了接受优化解外,还在一定的限定范围内接受劣解,这正是模拟退火算法与局部搜索法的本质区别,在避免陷入局部极小值、提高解空间的搜索能力和扩大搜索范围方面具有明显的优越性。本次设计给出了一种TSP的求解算法,并用MATLAB语言编程实现了算法。算法实验结果表明,对大多数组合优化问题而言,模拟退火算法在求最优解和求解时间均达到了满意的结果。利用MATLAB语言实现的模拟退火程序,能够找到系统的最优解,仿真结果证明了该方法的有效性。采用该方法既可使我们熟悉MATLAB语言,又可以加深对模拟退火算法的认识和理解,以此来设计智能系统。 旅行商问题一直都是业界研究的重点,其应用范围广,在许多领域都有其重要的指导意义。随着对TSP问题研究的深入,目前已经提出了多种TSP问题的变种,如:多目标TSP问题、局部重复路径的TSP问题、多人TSP问题以及带时间约束的TSP问题等等。TSP的算法研究领域中,除非有新的解决组合优化问题的算法框架出现,各种仿自然的算法结合局部优化的算法思想仍将是研究的重点。针对各种模拟退火算法的优 劣,如何扬长避短,提高算法的时间效率和寻优能力,目前许多学者致力于各种求解算法的综合集成的研究,如遗传模拟退火算法、模拟退火蚁群算法、混合遗传算法、混合蚂蚁算法等等。结合实际问题设计适当的算法参数和局部优化策略以构造混合算法将是解决TSP的重要途径。客观地说,目前并不存在一种求解TSP问题的最佳算法,各个算法都有其应用的局限性:经典算法追求精确解,但是忽略了算法的时空消耗,可行性不高;而现代流行改进算法则是追求近似解,降低了算法的时空消耗,但是在求解结果 上往往不能让人满意。我认为今后在TSP的算法研究上应该把握3个方面:继续改进已有TSP算法;采用人工智能的思想,创造新的TSP算法;集合各个算法的优点,进行混合TSP算法的研究。目前这些相关方向业界人士都有所涉及,也都取得了一定成效,相信在不久的将来,TSP问题一定会有更好的解决方案。 六、参考文献 [1] 高海昌,冯博琴,朱莉.只能优化算法求解TSP问题[J].控制与决策,2006,21(03):241-247,252. [2] 苗卉,杨韬.旅行商问题(TSP)的改进模拟退火算法.微计算机信息(管控一体化),2007,23(11):241 [3] 万军洲. 基于模拟退火技术的旅行商问题求解算法.软件导刊,2006,(8):88,88-89. [4] 盛国华,陈玉金,改进模拟退火算法求解TSP问题[J].电脑知识与技术,2008(15):1103-1104,1103. [5] 曲强,陈雪波.基于MA TLAB的模拟退火算法的实现.鞍山科技大学学报,2003,26(3):197-198 [6] 冯剑,岳琪,模拟退火算法求解TSP问题[J].森林工程,2008,24(01):94-96. 专业综合设计报告 课程名称:电子专业综合设计 设计名称:基于模拟退火算法的TSP算法姓名: 学号: 班级:电子0903 指导教师:朱正为 起止日期:2012.11.1-2012.12.30 专业综合设计任务书 学生班级:电子0903 学生姓名:学号: 20095830 设计名称:基于模拟退火算法的TSP算法 起止日期: 2012.11.1-2012.12.30 指导教师 专业综合设计学生日志 专业综合设计考勤表 专业综合设计评语表 一设计目的和意义 (6) 二设计原理 (6) 2.1 模拟退火算法的基本原理 (5) 2.2 TSP问题介绍................................................................................................................... .. (6) 三详细设计步骤................................................................................................................... . (9) 3.1.算法流程 (8) 3.2模拟退火算法实现步骤........................................................ 错误!未定义书签。四设计结果及分析.. (9) 4.1 MATLAB程序实现及主函数 (9) 4.1.1 计算距离矩阵 (9) 4.1.2 初始解................................................................................................................... . (10) 4.1.3 生成新解................................................................................................................... (10) 4.1.4 Metropolis 准则函数................................................................................................ (10) 4.1.5 画路线轨迹图 (11) 4.1.6 输出路径函数 (12) 4.1.7 可行解路线长度函数 (12) 4.1.8 模拟退火算法的主函数 (13) 解析模拟退火算法 一.爬山算法(Hill Climbing) 介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,因为在A点无论向那个方向小幅度移动都不能得到更优的解。 二.模拟退火(SA,Simulated Annealing)思想 爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜索到局部的最优值。模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以图1为例,模拟退火算法在搜索到局部最优解A后,会以一定的概率接受到E的移动。也许经过几次这样的不是局部最优的移动后会到达D点,于是就跳出了局部最大值A。 模拟退火算法描述: 若J(Y(i+1))>=J(Y(i))(即移动后得到更优解),则总是接受该移动 若J(Y(i+1)) 模拟退火算法 一、模拟退火算法概念 模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据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) 计算增量Δt′=C(S′)-C(S),其中C(S)为评价函数 (5) 若Δt′<0则接受S′作为新的当前解,否则以概率exp(-Δt′/T)接受S′作为新的当前解. (6) 如果满足终止条件则输出当前解作为最优解,结束程序。 终止条件通常取为连续若干个新解都没有被接受时终止算法。 (7) T逐渐减少,且T->0,然后转第2步。 算法对应动态演示图: 模拟退火算法新解的产生和接受可分为如下四个步骤: 第一步是由一个产生函数从当前解产生一个位于解空间的新解;为便于后续的计算和接受,减少算法耗时,通常选择由当前新解经过简单地变换即可产生新解的方法,如对构成新解的全部或部分元素进行置换、互换等,注意到产生新解的变换方法决定了当前新解的邻域结构,因而对冷却进度表的选取有一定的影响。 第二步是计算与新解所对应的目标函数差。因为目标函数差仅由变换部分产生,所以目标函数差的计算最好按增量计算。事实表明,对大多数应用而言,这是计算目标函数差的最快方法。 第三步是判断新解是否被接受,判断的依据是一个接受准则,最常用的接受准则是Metropo1is准则: 若Δt′<0则接受S′作为新的当前解S,否则以概率exp(-Δt′/T)接受S′作为新的当前解S。 第四步是当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可。此时,当前解实现了一次迭代。可在此基础上开始下一轮试验。而当新解被判定为舍弃时,则在原当前解的基础上继续下一轮试验。 模拟退火算法与初始值无关,算法求得的解与初始解状态S(是算法迭代的起点)无关;模拟退火算法具有渐近收敛性,已在理论上被证明是一种以概率l 收敛于全局最优解的全局优化算法;模拟退火算法具有并行性。 模 拟退火算法 一 定义 1 概念 什么是退火?在热力学上,退火现象指物体逐渐降温的物理现象,温度愈低,物体的能量状态会低;够低后,液体开始冷凝与结晶,在结晶状态时,系统的能量状态最低。大自然在缓慢降温(亦即,退火)时,可“找到”最低能量状态:结晶。但是,如果过程过急过快,快速降温(亦称「淬炼」)时,会导致不是最低能态的非晶形。如下图所示,首先(左图)物体处于非晶体状态。我们将固体加温至充分高(中图),再让其徐徐冷却,也就退火(右图)。加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小(此时物体以晶体形态呈现)。 似乎,大自然知道慢工出细活:缓缓降温,使得物体分子在每一温度时,能够有足够时间找到安顿位置,则逐渐地,到最后可得到最低能态,系统最安稳。 模拟退火算法(SA)最早的思想是由N. Metropolis 等人于1953年提出。1983 年,S. Kirkpatrick 等成功地将退火思想引入到组合优化领域。它是基于Monte-Carlo 迭代求解策略的一种随机寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。 模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。在迭代更新可行解时,以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以下图为例,假定初始解为左边蓝色点A ,模拟退火算法会快速搜索到局部最优解B ,但在搜索到局部最优解后,不是就此结束,而是会以一定的概率接受到左边的移动。也许经过几次这样的不是局部最优的移动后会到达全局最优点D ,于是就跳出了局部最小值。 根据热力学的原理,在温度为T 时,出现能量差dE 的降温的概率为P(dE),表示 为: ()?? ? ??=kT dE E P ex p d 。其中k 是波尔兹曼常数,值为-2310×13)1.3806488(=k ,exp 表示自然指数,且dE<0。因此dE/kT<0,所以P(dE)函数的取值范围是(0,1)。满足概率密度函数的定义。其实这条公式更直观意思就是:温度越高,出现一次能量差为P(dE)的降温的概率就越大;温度越低,则 第4卷第2期2007年4月 工程地球物理学报 CHIN ESE J OU RNAL OF EN GIN EERIN G GEOP H YSICS Vol 14,No 12Apr 1,2007 文章编号:1672—7940(2007)02—0135—06 模拟退火算法及其改进 蒋龙聪,刘江平 (中国地质大学地球物理与空间信息学院,武汉430074) 作者简介:蒋龙聪(1983— ),男,硕士研究生,现在主要从事地震数据处理和反演理论方法研究。E 2mail :longcja @https://www.360docs.net/doc/151006878.html, 刘江平(1957— ),男,教授,博士生导师,主要从事地震勘探的科研与教学工作。E 2mail :liujp @https://www.360docs.net/doc/151006878.html, 摘 要:借鉴遗传算法中的非均匀变异思想,用非均匀变异策略对当前模型扰动产生新的模型,对传统的模 拟退火算法提出了改进,通过多峰值函数数值优化测试结果表明,该算法在高温的时候能够进行大范围的搜索,随着温度的降低,逐渐缩小解的搜索范围,大大加快了收敛速度,证实了该改进算法的有效性和高效性。 关键词:模拟退火算法;非均匀变异;数值最优化;反演 中图分类号:P631文献标识码:A 收稿日期:2006— 12—07R evised Simulated Annealing Algorithm Jiang Longcong ,Liu Jiangping (I nstitute of Geop hysics and Geomatics ,China Universit y of Geosciences ,W uhan 430074,China ) Abstract :Based on t he idea of non 2uniform mutation in genetic algorit hm ,we present a novel revised simulated annealing (RSA ),which used t he non 2uniform mutation to generate a new model f rom current model.Tested by some numerical f unctions ,RSA can search in t he large area for t he solutions in high temperat ure.Wit h t he lowering of t he temperat ure ,t he area of searching t he solutions will be gradually reduced and convergence will speed up.So t he re 2sult s p rove t he effectiveness of RSA. K ey w ords :simulate annealing ;non 2uniform mutation ;numerical optimal ;inversion 1 引 言 人类对地球内部物理性质(包括速度、密度、电导率、温度等)以及矿产资源分布的了解,大多来自地表地质和地球物理、地球化学资料的反演和解释[1]。反演方法可以分为线性反演和非线性反演两种,线性反演已成为一套科学的反演理论,然而,绝大部分地球物理问题都是非线性的,并且实践表明,线性反演方法有容易陷入局部极值和依赖于初始值等缺点。因此,地球物理学者们不 断的尝试开发非线性反演方法,比如人工神经网 络[2]、小波多尺度反演[3]、模拟退火算法[4]等。 模拟退火算法是近年发展起来的全局最优化算法,其主要优点是;不用求目标函数的偏导数及解大型矩阵方程组,即能找到一个全局最优解,而且易于加入约束条件,编写程序简单。目前此法已开始用于解决非线性地球物理反问题,如波形反演、静校正、叠前偏移速度分析等非线性反演中,并取得了较好的效果。 然而,由于模拟退火法是建立在随机搜寻方法的基础上,要达到一定的精度要求,每一模型参 智能信息处理实验报告 14电科一班 XX XXXX 模拟退火算法解决函数优化问题 实验二 一、实验目的 1. 掌握模拟退火算法的基本原理和步骤。 2. 复习VB 、VC 的基本概念、基本语法和编程方法,并熟练使用VB 或VC 编写遗传算法程序。 二、实验设备 微机 三、实验原理 模拟退火算法是基于Monte Carlo 迭代求解策略的一种随机寻优算法,其出发点是基于物理退火过程与组合优化之间的相似性,模拟退火算法由某一较高初温开始,利用具有概率突跳特性的Metropolis 抽样策略在解空间中进行随机搜索,伴随温度的不断下降重复抽样过程,最终得到问题的全局最优解。 标准模拟退火算法的一般步骤可描述如下: (1) 令m =0,给定初温t m ,随机产生初始状态s m ; (2) Repeat ; s old =s m ; (2.1) Repeat ; (2.1.1) 产生新状态:s new =Generate(s old ); (2.1.2) 若min{1, exp[(C (s old )-C (s new ))/t m ]}≥random[0, 1],则s old =s new ; (2.1.3) Until 抽样稳定准则满足; (2.2) 退温:t m +1=update(t m ),s m +1=s old ,m =m +1; (3) Until 算法终止准则满足; (4) 输出算法搜索结果:s m 。 四、实验内容及步骤 1. 上机编写程序,解决以下函数优化问题:()221min 10i i i f x x =??=≤ ? ?? ∑X 2. 调试程序。 3. 根据实验结果,写实验报告。 模拟退火算法文献综述 吕正祥交控1501 1模拟退火算法简述 1.1模拟退火算法的来源 模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。 模拟退火算法(Simulated Annealing,SA)最早由Kirkpatrick 等应用于组合优化领域,它是基于Monte-Carlo迭代求解策略的一种随机寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。模拟退火算法是一种通用的优化算法,理论上算法具有概率的全局优化性能,目前已在工程中得到了广泛应用,诸如VLSI、生产调度、控制工程、机器学习、神经网络、信号处理等领域。 模拟退火算法是通过赋予搜索过程一种时变且最终趋于零的概率突跳性,从而可有效避免陷入局部极小并最终趋于全局最优的串行结构的优化算法。 1.2模拟退火算法的模型 模拟退火算法可以分解为解空间、目标函数和初始解三部分。 1.3模拟退火的基本思想 (1) 初始化:初始温度T(充分大),初始解状态S(是算法迭代的起点),每个T值的迭代次数L (2) 对k=1,……,L做第(3)至第6步: (3) 产生新解S′ (4) 计算增量Δt′=C(S′)-C(S),其中C(S)为评价函数 (5) 若Δt′<0则接受S′作为新的当前解,否则以概率exp(-Δt′/T)接受S′作为新的当前解. (6) 如果满足终止条件则输出当前解作为最优解,结束程序。终止条件通常取为连续若干个新解都没有被接受时终止算法。 (7) T逐渐减少,且T->0,然后转第2步。 模拟退火算法 算法简介 模拟退火算法得益于材料的统计力学的研究成果。统计力学表明材料中粒子的不同结构对应于粒子的不同能量水平。在高温条件下,粒子的能量较高,可以自由运动和重新排列。在低温条件下,粒子能量较低。如果从高温开始,非常缓慢地降温(这个过程被称为退火),粒子就可以在每个温度下达到热平衡。当系统完全被冷却时,最终形成处于低能状态的晶体。 如果用粒子的能量定义材料的状态,Metropolis 算法用一个简单的数学模型描述了退火过程。假设材料在状态i 之下的能量为)(i E ,那么材料在温度T 时从状态i 进入状态j 就遵循如下规律: (1)如果)()(i E j E ≤,接受该状态被转换。 (2)如果)()(i E j E >,则状态转换以如下概率被接受: 其中K 是物理学中的波尔兹曼常数,T 是材料温度。 在某一个特定温度下,进行了充分的转换之后,材料将达到热平衡。这时材料处于状态i 的概率满足波尔兹曼分布: ∑∈--= =S j KT j E KT i E T e e i x P )()()( 其中x 表示材料当前状态的随机变量,S 表示状态空间集合。 显然 | |1lim )()(S e e S j KT j E KT i E T = ∑∈-- ∞ → 其中||S 表示集合S 中状态的数量。这表明所有状态在高温下具有相同的概率。而当温度下降时, ∑∑∑?-- ∈-- -- →∈-- -- →+ =min min min min min min min )()()(0 )()(0 lim lim S j KT E j E S j KT E j E KT E i E T S j KT E j E KT E i E T e e e e e ?? ? ??∈==∑∈-- -- →其它若 0 ||1 lim min min )()(0 min min min S i S e e S j KT E j E KT E i E T 其中)(min min j E E S j ∈=且})(|{min min E i E i S ==。 上式表明当温度降至很低时,材料会以很大概率进入最小能量状态。 假定我们要解决的问题是一个寻找最小值的优化问题。将物理学中模拟退火的思想应用于优化问题就可以得到模拟退火寻优方法。 考虑这样一个组合优化问题:优化函数为+→R x F :,其中S x ∈,它表示优化问题的一个可行解,}0,|{>∈=+y R y y R ,S 表示函数的定义域。S x N ?)(表示x 的一个邻域集合。 首先给定一个初始温度0T 和该优化问题的一个初始解)0(x ,并由 )0(x 生成下一个解))0(('x N x ∈,是否接受'x 作为一个新解)1(x 依赖于下 面概率: ??? ??<=→--其它若 ))0(()'(0 )) 0(()'( 1)')0((T x f x f e x f x f x x P基于模拟退火算法的TSP算法
模拟退火算法介绍
模拟退火算法基本原理介绍
模拟退火算法报告
模拟退火算法及其改进_蒋龙聪
模拟退火算法解决函数优化问题
模拟退火算法研究概况
数学建模优秀方法-模拟退火算法简介