基于模拟退火算法的TSP算法

合集下载

1.1通俗解释matlab之模拟退火求TSP问题

1.1通俗解释matlab之模拟退火求TSP问题

1.初识模拟退火算法说起模拟退火算法,不管哪个地方讲反正都有那么一段历史来源,模拟退火据说就是根据物理学上物质分子在温度较高的时候运动剧烈,很容易从一个转台转到另一个状态,而在温度较低的时候运动缓慢,状态也就基本上固定而不宜发生转变。

明不明白这个具体的物理过程无所谓,理解后面算法流程后就明白了什么是退火降温。

说白了,如果和算法结合起来的话,就是高温的时候问题的解很容易发生改变,从一个解很容易变化到另外的一个解,随着温度的降低,解的这种改变性越来越低。

而在每一次降温的过程中,算法都会记录上在本次温度下的所有改变的解中的优秀解,并传递到下一次的降温过程中。

这样,你想一想,开始解的变化范围很大,并一直在寻找优解,慢慢的变化范围变小,就变成了锁定前一次寻找到的最优解。

其实基本上所有的算法都是这样的一个过程,先广度搜索,在集中寻找等等,不同的是不同的算法他们的搜索速度、搜索的准确率不同而已。

2.我要解决的问题既然是优化算法,那就用它来解决一个常见的问题---旅行商问题,也叫TSP问题。

问题是什么样子的呢,就是随机给你不同的地点,要你每个地点走一次的话,怎么走这个地点的顺序才能使得你走的总路程最短呢,像这类问题最好的验证实例就是邮递员了吧,他会想怎么邮递所有的包裹才能使得他要走的总路线最少吧。

好了下面我随便给出30个不同的点代表不同的位置吧,点的左边都在0~1之间,如下:cities1=[0.6606,0.9695,0.5906,0.2124,0.0398,0.1367,0.9536,0.6091,0.8767,0.8148,0.38 76,0.7041,0.0213,0.3429,0.7471,0.4606,0.7695,0.5006,0.3124,0.0098,0.3637,0.5336,0.2 091,0.4767,0.4148,0.5876,0.6041,0.3213,0.6429,0.7471;0.9500,0.6740,0.5029,0.8274,0.9697,0.5979,0.2184,0.7148,0.2395,0.2867,0.8200,0.329 6,0.1649,0.3025,0.8192,0.6500,0.7420,0.0229,0.7274,0.4697,0.0979,0.2684,0.7948,0.43 95,0.8867,0.3200,0.5296,0.3649,0.7025,0.9192];注意了,这就是30对(x,y)的值,在matlab下画出来就如图所示:plot(cities1(1,:),cities1(2,:),'*')现在问题就是怎么首尾相连这些点才能是他们点之间的距离最小。

基于改进模拟退火算法求解TSP问题

基于改进模拟退火算法求解TSP问题

基于改进模拟退火算法求解TSP问题姚明海;王娜【期刊名称】《渤海大学学报(自然科学版)》【年(卷),期】2013(034)001【摘要】By analyzing the principles and the shortcomings of traditional simulated annealing algorithm, the improved simulated annealing algorithm is proposed for the characteristic of TSP. The traditional simulated annealing algorithm producing the new solution is random, when the parameter is not accurate. It cant lead to the optimal solution; the traditional simulated annealing algorithm is easy to lose the optimal solution of current. Put forward a new method to select the initial solution and generation the solution, the method of the improved the current solution and adding memory function for optimal solution of current. Experimental test results show that the new algorithm has faster convergence and stability than traditional simulated annealing algorithm.%对传统模拟退火算法的原理和不足进行分析,针对TSP问题的特点提出了改进的模拟退火算法.就传统模拟退火算法生成新解的随机性太强、参数设置不当不能搜索到全局最优解、容易丢失当前最优解等问题提出了新的初始解选择方案、新解生成机制和当前解的改良及增加记忆功能等方法.实验结果表明,新算法传统的模拟退火算法具有更快的收敛速度和更高的稳定性.【总页数】6页(P79-84)【作者】姚明海;王娜【作者单位】渤海大学信息科学与技术学院,辽宁锦州121013;锦州师专计算机系,辽宁锦州121000【正文语种】中文【中图分类】TP31【相关文献】1.基于并行模拟退火算法的TSP问题求解 [J], 郏宣耀2.求解TSP问题的改进模拟退火算法 [J], 杨卫波;赵燕伟3.基于混合遗传模拟退火算法求解TSP问题 [J], 杜宗宗;刘国栋4.求解TSP问题的改进模拟退火算法 [J], 何锦福;符强;王豪东5.一种基于改进模拟退火算法的TSP问题的应用研究 [J], 齐安智因版权原因,仅展示原文概要,查看原文内容请购买。

模拟退火算法(SA)求解TSP问题(C语言实现)

模拟退火算法(SA)求解TSP问题(C语言实现)

模拟退⽕算法(SA)求解TSP问题(C语⾔实现) 这篇⽂章是之前写的智能算法(遗传算法(GA)、粒⼦群算法(PSO))的补充。

其实代码我⽼早之前就写完了,今天恰好重新翻到了,就拿出来给⼤家分享⼀下,也当是回顾与总结了。

⾸先介绍⼀下模拟退⽕算法(SA)。

模拟退⽕算法(simulated annealing,SA)算法最早是由Metropolis等⼈提出的。

其出发点是基于物理中固体物质的退⽕过程与⼀般组合优化问题之间的相似性。

模拟退⽕算法是⼀种通⽤的优化算法,其物理退⽕过程由以下三部分组成: (1)加温过程 (2)等温过程 (3)冷却过程 其中加温过程对应算法设定的初始温度,等温过程对应算法的Metropolis抽样过程,冷却过程对应控制参数的下降。

这⾥能量的变化就是⽬标函数,要得到的最优解就是能量最低状态。

Metropolis准则是SA算法收敛于全局最优解的关键所在,Metropolis准则以⼀定的概率接受恶化解,这样就使得算法可以跳离局部最优解的陷阱。

模拟退⽕算法为求解传统⽅法难以处理的TSP问题提供了⼀个有效的途径和通⽤的处理框架,并逐渐发展成为⼀种迭代⾃适应启发式概率搜索算法。

模拟退⽕算法可以⽤于求解不同的⾮线性问题,对于不可微甚⾄不连续函数的优化,能以较⼤概率求得全局最优解,该算法还具有较强的鲁棒性、全局收敛性、隐含并⾏性以及⼴泛的适应性,对⽬标函数以及约束函数没有任何要求。

SA 算法实现的步骤如下:(下⾯以最⼩化问题为例) (1)初始化:取温度T0⾜够⼤,令T = T0,取任意解S1,确定每个T时的迭代次数,即 Metropolis链长L。

(2)对当前温度T和k=1,2,3,...,L,重复步骤(3)~(6) (3)对当前解S1随机产⽣⼀个扰动得到⼀个新解 S2. (4)计算S2的增量df = f(S2) - f(S1),其中f(S1)为S1的代价函数。

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

基于模拟退火算法的TSP问题研究报告附MATLAB程序

基于模拟退火算法的TSP问题研究报告附MATLAB程序

minL(T ) dtiti1
i 1
• 解的邻域:随机产生2个位置,让序列T上对应的 两个位置上的城市顺序对换。
max{ dij | j i, j 1, n} min{dij | j i, j 1, n}
i 1 i 1 n n
4.模拟退火算法求TSP问题
岗位职责三工作总结项目运维项目实施银青高速视频监控东毛隧道停车场项目全面实施ip设置贵州独平高速项目全面实施监控室机柜布线四心得体会在这段时间的学习过程中我对部门很多产品从零学起刚到公司的时候感觉压力很大经过这些时间的认真学习和实际操作调整心态现已完全能融入公司的各项岗位职责和管理制度中
TSP问题的模拟退火算法
3. 参数选取

t0
优。
tk+1=α*tk maxstep=maxstep+a
t0太大,计算时间增加;t0太小,会过早陷入局部最
4.模拟退火算法求TSP问题
• 解的表示:用一个访问序列T=(t1,t2,t3…,tn,t1)来表示 经过n个城市的顺序。 • 距离矩阵:D=(dij)是由城市i和城市j之间的距离所 组成的距离矩阵。 n • 数学模型:
如需程序,点击上传者,见“我的文档”。
1. 模拟退火简介
1.1 问题讨论
2. 模拟退火算法步骤 3. 参数选取 4. 模拟退火算法求解TSP问题
1模拟退火简介
• 物理解释:材料中的原子原来会停留在使内能 有局部最小值的位置,加热使能量变大,原子 会离开原来位置,而随机在其他位置中移动。 退火冷却时速度较慢,使得原子有较多可能可 以找到内能比原先更低的位置。 • 统计学解释:我们将热力学的理论套用到统计 学上,将搜寻空间内每一点想像成空气内的分 子;搜寻空间内的每一点,也像空气分子一样 带有“动能”,以表示该点对命题的合适程度。 算法先以搜寻空间内一个任意点作起始:每一 步先选择一个“邻居”,然后再计算从现有位 置到达“邻居”的概率。

用模拟退火算法求解TSP

用模拟退火算法求解TSP

用模拟退火算法求解TSP
TSP问题(旅行商问题)是一个NP难问题。

模拟退火算法是一种解决复杂问题的启发式优化算法,被广泛应用于求解TSP问题。

下面是使用模拟退火算法求解TSP1650的步骤:
1. 初始化:随机生成一个初始解集,即随机生成一个城市序列,并计算其路径长度。

2. 降温:将系统温度下降,即通过调节温度参数来控制搜索范围,随着时间的推移,温度逐渐下降。

3. 移动:通过移动城市序列来扰动当前解集,得到新的解集。

比如,随机选择两个城市交换其顺序,得到新的城市序列。

4. 计算路径长度:计算新的城市序列的路径长度。

5. 判断是否接受新的解集:按照一定概率接受新的解集,比如如果新解集的路径长度更短,则接受新解集,否则以一定概率接受新解集,以避免陷入局部最优解。

6. 重复以上步骤,直到温度降至最低,或者找到满足要求的解。

7. 输出最优解:得到满足要求的解后,输出路径长度和城市序列。

求解TSP1650很困难,需要大量的计算资源和时间,运行时间可能需要数小时或数天。

模拟退火算法解决TSP问题要点

模拟退火算法解决TSP问题要点

智能优化方法课题报告专业班级:电子信息科学与技术12-3班课题名称:模拟退火算法解决TSP问题指导教师:姚睿学生姓名:蒋文斌学号: 08123453(课题设计时间:2015年3月28日——2015年 4月13日)中国矿业大学计算机学院一、问题描述旅行商问题(Traveling monituihuolesman Problem ,简称TSP )又名货郎担问题,是威廉·哈密尔顿爵士和英国数学家克克曼(T.P.Kirkman)于19世纪初提出的一个数学问题,也是著名的组合优化问题。

问题是这样描述的:一名商人要到若干城市去推销商品,已知城市个数和各城市间的路程(或旅费),要求找到一条从城市1出发,经过所有城市且每个城市只能访问一次,最后回到城市1的路线,使总的路程(或旅费)最小。

TSP 刚提出时,不少人认为这个问题很简单。

后来人们才逐步意识到这个问题只是表述简单,易于为人们所理解,而其计算复杂性却是问题的输入规模的指数函数,属于相当难解的问题。

这个问题数学描述为:假设有n 个城市,并分别编号,给定一个完全无向图G=(V ,E ),V={1,2,…,n},n>1。

其每一边(i,j)∈E 有一非负整数耗费 Ci,j(即上的权记为Ci,j ,i ,j ∈V)。

并设1,i j 0{ij X =边(,)在最优线路上, 其他G 的一条巡回路线是经过V 中的每个顶点恰好一次的回路。

一条巡回路线的耗费是这条路线上所有边的权值之和。

TSP 问题就是要找出G 的最小耗费回路。

人们在考虑解决这个问题时,一般首先想到的最原始的一种方法就是:列出每一条可供选择的路线(即对给定的城市进行排列组合),计算出每条路线的总里程,最后从中选出一条最短的路线。

假设现在给定的4个城市分别为A 、B 、C 和D ,各城市之间的耗费为己知数,如图1-1所示。

我们可以通过一个组合的状态空间图来表示所有的组合,如图1-2所示。

(1-1)图1-1 顶点带权图图1-2 TSP问题的解空间树1.模拟退火是什么?首先,让我们看看模拟退火是如何工作的,以及为什么它是善于解决旅行商问题。

用模拟退火算法解决TSP问题

用模拟退火算法解决TSP问题

用模拟退火算法解决TSP问题旅行商问题(Traveling Salesman Problem,TSP)是指一个旅行商要在不重复地经过全部的指定城市之后回到起点,所需要走的最短路径长度是多少。

由于TSP问题具有NP难度,因此传统的精确算法要花费大量的计算资源,得到的结果往往也只能是近似最优解。

而模拟退火算法是一种集合随机性和概率思想的启发式方法,可以快速地在解空间中搜索到一个较优的解。

一、模拟退火算法的原理及过程模拟退火算法是一种以概率为基础的全局优化算法,它的基本思想是利用随机性来逃离局部最优解,让搜索过程在解空间中跳跃,最终逐渐接近全局最优解。

模拟退火算法的过程可以分为三个阶段:初始化阶段、搜索阶段和收敛阶段。

初始化阶段:首先需要对问题进行建模,将问题转化为算法可处理的形式。

在TSP问题中,需要建立一个城市间距离矩阵。

然后随机生成一个初始解,通常是一个随机序列,表示旅行商经过城市的顺序。

搜索阶段:对生成的初始解进行扰动,得到一个新的解,并计算新解的目标函数值。

如果新解比原解更优,则直接接受该解。

如果新解比原解更劣,则有一定的概率接受该解,概率随着时间的推移逐渐降低。

收敛阶段:在搜索过程中,随着温度的不断下降,概率接受劣解的概率越来越小,这时算法逐渐收敛到一个局部最优解,也可能是全局最优解。

二、TSP问题的建模及求解TSP问题可以建立一张城市距离矩阵,然后用随机序列来表示旅行商经过城市的顺序。

目标函数可以定义为旅行商经过所有城市的总路径长度。

假设有n个城市,城市之间的距离矩阵为D,表示第i个城市和第j个城市之间的距离。

而旅行商经过城市的顺序可以用一个长度为n的序列{1,2,...,n}来表示,表示旅行商先经过第1个城市,然后是第2个城市,一直到第n个城市,然后再回到原点。

设目前的解序列为s={s1,s2,...,sn},则其总路径长度为:L(s) = ∑i=1n D(si,si+1) + D(sn,1)其中D(si,si+1)表示城市si和si+1之间的距离,D(sn,1)表示最后回到起点的距离。

模拟退火算法在tsp问题中的应用研究毕业(设计)论文

模拟退火算法在tsp问题中的应用研究毕业(设计)论文

毕业论文(设计)题目模拟退火算法在TSP问题中的应用研究毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。

尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。

对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。

作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。

除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。

对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。

本人完全意识到本声明的法律后果由本人承担。

作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。

本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。

涉密论文按学校规定处理。

作者签名:日期:年月日导师签名:日期:年月日目录摘要 (V)ABSTRACT........................................................... V I 第一章前言. (1)1.1 TSP问题的基本概念 (1)1.2 模拟退火算法的背景 (1)1.3 发展趋势 (2)第二章相关知识介绍 (3)2.1模拟退火算法的原理 (3)2.1.1 模拟退火的基本思想 (3)2.1.2 算法对应动态演示步骤 (4)2.2 TSP问题简述 (4)2.3组合优化问题简述 (5)2.4 蚁群算法及其它算法原理 (6)2.4.1蚁群优化算法 (6)2.4.2其它优化算法 (6)第三章问题描述与算法分析研究 (9)3.1应用研究整体规划 (9)3.2应用开发环境 (9)3.2.1开发语言 (9)3.2.2开发平台 (9)3.3 TSP问题的描述和分析 (9)3.4模拟退火算法的分析 (10)3.4.1模拟退火算法模型 (10)3.4.2模拟退火算法与优化问题分析 (11)3.5应用研究方案分析 (11)第四章算法具体设计与编码实现 (12)4.1基于模拟退火算法求解TSP问题详细设计 (12)4.1.1求解TSP问题的模拟退火算法及流程图 (12)4.1.2算法温度的选择和变化 (14)4.1.3定义坐标表的具体参数与具体实现 (15)4.1.4新解的产生方法 (17)4.2求解TSP问题的算法主体模块详细设计 (19)4.3算法的具体编码实现 (20)4.3.1建立城市坐标文本文件 (21)4.3.2 DOS下界面数据输出以及概率统计与分析 (21)第五章算法运行分析 (24)5.1 运行界面图示 (24)5.2 运行结果 (27)第六章结束语 (28)致谢 (29)参考文献 (29)摘要TSP问题是一个典型的NP 完全问题,模拟退火算法是求解此问题的一种理想方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

专业综合设计报告课程名称:电子专业综合设计设计名称:基于模拟退火算法的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。

相关文档
最新文档