当前位置:文档之家› 基于模拟退火算法的TSP算法

基于模拟退火算法的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)初始化:取初始温度T0足够大,令T=T,任取初始解S1,确定每个T时的迭代次数,即Metropolis 链长L。

(2)对当前温度T和k=1,2,……,l,重复步骤(3)~(6)。

(3)对当前S1随机扰动产生一个新解S2。

(4)计算S2的增量df=f(S2)-f(S1)其中f为S1的代价函数。

(5)若df<0 ,则接受S2作为新的当前解,即S1=S2;否则计算S2的接受概率exp(-df/T),即随机产生(0,1)区间上均匀分布的随机数 rand,若exp(-df/T)>rand也接受S2作为新的当前解,S1=S2;否则保留当前解S1。

(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=79 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 dfdf 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;end4.1.5 画路线轨迹图画出给的路线的轨迹图函数为DrawPath,程序代码如下:function DrawPath(Chrom,X)%% 画路径函数%输入% Chrom 待画路径% X 各城市坐标位置R=[Chrom(1,:) Chrom(1,1)]; %一个随机解(个体)figure;hold onplot(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]);endA=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]);endhold offxlabel('横坐标')ylabel('纵坐标')title('轨迹图')box on4.1.6 输出路径函数将得到的路径输出显示在Command Window 中,函数名为OutputPath。

相关主题