旅行商问题 Traveling Salesman Problem(TSP)

Slides:



Advertisements
Similar presentations
质数和合数 2 的因数( ) 6 的因数( ) 10 的因数 ( ) 12 的因数 ( ) 14 的因数 ( ) 11 的因数 ( ) 4 的因数( ) 9 的因数( ) 8 的因数( ) 7 的因数( ) 1 、 2 、 3 、 4 、 6 、 12 1 、 11 1 、 2 、 5 、 10.
Advertisements

一、 一阶线性微分方程及其解法 二、 一阶线性微分方程的简单应用 三、 小结及作业 §6.2 一阶线性微分方程.
第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
练一练: 在数轴上画出表示下列各数的点, 并指出这些点相互间的关系: -6 , 6 , -3 , 3 , -1.5, 1.5.
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
§3.4 空间直线的方程.
《解析几何》 -Chapter 3 §7 空间两直线的相关位置.
3.4 空间直线的方程.
第五章 二次型. 第五章 二次型 知识点1---二次型及其矩阵表示 二次型的基本概念 1. 线性变换与合同矩阵 2.
第三章 函数逼近 — 最佳平方逼近.
CET4 translation 越来越多的中国年轻人正对旅游产生兴趣,这是近年来的新趋势。年轻游客数量的不断增加,可以归因于他们迅速提高的收入和探索外部世界的好奇心。随着旅行多了,年轻人在大城市和著名景点花的时间少了,他们反而更为偏远的地方所吸引。有些人甚至选择长途背包旅行。最近调查显示,很多年轻人想要通过旅行体验不同的文化、丰富知识、拓宽视野。
10.2 立方根.
小学生游戏.
第5章 定积分及其应用 基本要求 5.1 定积分的概念与性质 5.2 微积分基本公式 5.3 定积分的换元积分法与分部积分法
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
在PHP和MYSQL中实现完美的中文显示
                                                                                                                                                                
SOA – Experiment 3: Web Services Composition Challenge
Windows网络操作系统管理 ——Windows Server 2008 R2.
以ISI平台为例,为您演示一下如何在Endnote文献中查看该文献的References
计算机数学基础 主讲老师: 邓辉文.
Online job scheduling in Distributed Machine Learning Clusters
What have we learned?.
数据挖掘工具性能比较.
动态规划(Dynamic Programming)
SOA – Experiment 2: Query Classification Web Service
若2002年我国国民生产总值为 亿元,如果 ,那么经过多少年国民生产总值 每年平均增长 是2002年时的2倍? 解:设经过 年国民生产总值为2002年时的2倍, 根据题意有 , 即.
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
第一章 函数与极限.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第二十二章 曲面积分 §1 第一型曲面积分 §2 第二型曲面积分 §3 高斯公式与斯托克斯公式.
顺序表的删除.
Three stability circuits analysis with TINA-TI
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
WPT MRC. WPT MRC 由题目引出的几个问题 1.做MRC-WPT的多了,与其他文章的区别是什么? 2.Charging Control的手段是什么? 3.Power Reigon是什么东西?
用计算器开方.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
复习: 若A(x1,y1,z1) , B(x2,y2,z2), 则 AB = OB - OA=(x2-x1 , y2-y1 , z2-z1)
正切函数的图象和性质 周期函数定义: 一般地,对于函数 (x),如果存在一个非零常数T,使得当x取定义域内的每一个值时,都有
iSIGHT 基本培训 使用 Excel的栅栏问题
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.1 变化率与导数   3.1.1 变化率问题 3.1.2 导数的概念.
3.1.2 空间向量的数量积运算 1.了解空间向量夹角的概念及表示方法. 2.掌握空间向量数量积的计算方法及应用.
树和图 tree and graph 蔡亚星.
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
1.非线性规划模型 2.非线性规划的Matlab形式
第七、八次实验要求.
建模常见问题MATLAB求解  .
分数再认识三 真假带分数的练习课.
2.2直接证明(一) 分析法 综合法.
高中数学选修 导数的计算.
§2 方阵的特征值与特征向量.
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本底对汞原子第一激发能测量的影响 钱振宇
线性规划 Linear Programming
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
第十七讲 密码执行(1).
第十二讲 密码执行(上).
插入排序的正确性证明 以及各种改进方法.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
§4.5 最大公因式的矩阵求法( Ⅱ ).
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
3.3.2 两点间的距离 山东省临沂第一中学.
Presentation transcript:

旅行商问题 Traveling Salesman Problem(TSP)

旅行商问题的发展历史 旅行商问题,也称货郎担问题,是一个较古老的问题。其起源已经有些模糊了。最早大概可以追溯到 1759 年 Euler 提出的骑士旅行问题。 十九世纪初,爱尔兰数学家William R. Hamilton和英国数学家Thomas P. Kirkman研究过一些与旅行商问题相关的数学问题。

二十世纪初,人们开始研究通用形式的旅行商问题。 二十世纪二十年代,数学家和经济学家 Karl Menger 在维也纳向他的同事提出了这个问题。 二十世纪三十年代,旅行商问题出现在 Princeton 大学的数学圈子里,主要的推动者有 Hassler Whitney 与 Merrill Flood。 二十世纪四十年代,统计学家(Mahalanobis(1940), Jessen(1942), Gosh(1948), Marks(1948))把它和农业应用联系在一起研究。美国RAND 公司也推动了这个问题的发展。 最终,旅行商问题成为了组合优化问题中的一个困难问题原型的典型代表。求解这种问题令人望而生畏:当问题规模变大的时候,路径的数目将是个天文数字,逐一检查它们几乎是不可能的。在很长的一段时间内,没有任何解决这个问题的好想法出现.

1954 年,旅行商问题的求解终于获得了突破。George Dantizig, Ray Fulkerson 和 Selmer Johnson 提出了一个求解旅行商问题的算法并用它成功地解决了一个有49 个城市的实例。这个规模在当时相当引人注目; 1977 年,Groetschel 找到了有 120 个城市的旅行商问题的最优路径; 1987年,Padberg 与 Rinaldi 找到了规模为 532 和 2392 的旅行商问题的最优路径;Groetschel与Holland找到了规模为666的旅行商问题的最优路径。 Applegate, Bixby,Chavátal 和 Cook 于 1994 年,1998年和 2001年解决了规模为 7397, 13509和 15112的旅行商问题。 2004 年,一个具有 24978 个城市的旅行商问题的最优路径由 Applegate, Bixby,Chavátal, Cook 和 Helsgaun 找到。这是到目前为止精确找到最优解的最大规模的旅行商问题.

旅行商问题吸引了越来越多的人对它进行研究。其中,有数学家,计算机科学家,运筹学家,还有一些其它领域的研究者。 然而,该问题是否存在一个有效的通用的求解方法仍然是一个开放性的问题。事实上,旅行商问题的解决将意味着 P=NP问题的解决。Clay Mathematics Institute 曾悬赏 100 万美元来寻求这个问题的解法,但没人拿到这个奖。

旅行商问题的描述 旅行商问题(TSP) 的文字描述可以表达如下:给定一组 N 个城市和它们两两之间的直达距离,找出一个闭合的回路,使得每个城市刚好经过一次且仅一次且总的旅行距离最短。即要寻求一条回路 T = (t 1 ,t2,...,tn),使得下列目标函数最小: 上式中 t i为城市号,取值为 [1 ,n ],从而 ( t1 , t2,...,tn)就可以看作是关于n的一个排列。d ( ti ,tj)表示城市 ti 与 t j之间的距离。对于对称型 TSP,有 d ( ti ,tj)= d(tj,ti)

旅行商问题的分类 从问题对应到图的类型,TSP 可以分为两类: 1、任意两个城市间的距离都是对称的,它对应的是图论中的无向图; 2、两个城市间的距离是非对称的,它对应的是图论中的有向图; 从问题本身的限制条件的强弱,主要有三类: 1、不做任何限制(但是一般都要求城市间的费用不为负数),只给出距离矩阵,求最短回路; 2、要求距离间要满足三角不等式; 3、定义在欧氏平面上的 TSP,即 Euclidean TSP,它给出每个城市在欧氏平面上的坐标,而城市间的距离就是以它们的欧氏距离来定义。

从问题的多项式可解性上分,TSP 可以分为两类: 1、目前己经知道有多项式时间算法可解的,比如其距离矩阵满足特定的条件 (Demidenko 条件、Kalmanson 条件、Supnick 条件)等; 2、目前尚没有发现多项式时间算法可解的,而研究热点是如何寻找更多的多项式时间可解的情形。 对旅行商问题的研究经过几十年的发展,已经产生了许多其它扩展形式,例如多旅行商问题(Multi-Salesman Problem),多目标旅行商问题(Multi-Objective TSP)等等。

旅行商问题的应用和价值 旅行商问题是一个具有广泛的实用背景与重要的理论价值的组合优化难题。 许多关于 TSP 的工作并不仅是由实际应用直接推动的,而是因为 TSP 为其它一般的各类算法提供了思想方法平台,而这些算法广泛地应用于各种离散优化问题。 其次,TSP 大量的直接应用给研究领域带来了生机,并引导了未来的工作

运输问题是 TSP 最自然的应用。由于其模型的简单性,TSP 在其它一些领域有着有趣的应用。一个经典的例子是如何安排机器在一块电路板或其他物体上钻孔,其中需要钻的孔可以看成是各个城市,而旅行的费用就是钻头从一个孔移到下一个孔所花的时间。虽然钻孔的技术不断发展,但无论何时,只要钻机设备的移动时间在所有制造业的过程中占据显著的地位,TSP 在减少费用上就扮演了一个非常重要的角色。 许多实际中出现的问题都可以转化成旅行商问题的模型而解决。例如还有结晶学中的结构分析问题,车辆调度问题,计算机布线问题,单个机器上的工序调度问题等等。

旅行商问题的计算复杂性 时间复杂性,即随着输入问题规模的增长,算法所需计算步数的增长速度。 计算机科学家们有一个共识:即当输入规模n表示的算法复杂性函数 f (n)是以多项式为界的,算法才被认为是有效的。 从本质上讲,所有的计算问题又可以归结为判定问题,如果说:一个算法解决了某一判定问题,则算法输出“是”,否则输出“非”。而从输入到输出,算法所需要运行的步骤即为算法的时间复杂性。

很多优化问题,诸如旅行商问题、最小覆盖问题、多处理器任务调度问题、背包问题等都被发现可以多项式约化为 NP 中最难的问题,即 NP 完全问题。

TSP的时间复杂度 TSP 搜索空间随着城市数 n 的增大而增大,所有的旅程路线组合数为( n -1)!/2。 5 个城市的情形对应 120/10=12 条路线; 10 个城市的情景对应3628800/20=181440 条路线; 100 个城市的情景对应有 4.666×10155 条路线。 所以对于输入规模为n个城市的 TSP 找到最优解的时间复杂性函数的数量级是 O( n!),当n 比较大时,耗费的时间已经是个天文数字。 表 2.1 是在假定所用计算机每秒可以执行 10 亿次运算的前提下,对不同的时间复杂性函数所耗费时间的比较。

求解旅行商问题的已有算法 多年来对 TSP 的研究,人们提出了许多求解方法,其中有精确算法如线性规划方法、动态规划方法、分支定界方法; 近似算法如插入法、最近邻算法、Clark&Wright 算法、生成树法、Christofides 算法、r-opt 算法、混合算法、概率算法等。 近年来,还有很多尝试解决该问题的较为有效的方法不断被提出,例如禁忌搜索方法、遗传算法、模拟退火算法、神经网络方法、蚁群算法等。

基于灾变思想的GA实现TSP实例 遗传算法的局部搜索能力较强,但是很容易陷入局部极值。 虽然增加变异概率可以搜索到远离当前极值的点,但是新点的值往往不能和当前保留下来的较优值相提并论,因为这些较优值都是经过千百代的进化而存留下来的,于是远离当前极值的点往往在两到三代以内就被淘汰掉了。 增加变异概率实际上是把遗传算法退化成了一种纯粹的随机搜索,所谓的自适应也无从谈起!

灾变思想 那么如何解决遗传算法容易陷入局部极值的问题呢? 让我们来看看大自然提供的方案。六千五百万年以前,恐龙和灵长类动物并存,恐龙在地球上占绝对统治地位,如果恐龙没有灭绝灵长类动物是绝没有可能统治地球的。正是恐龙的灭绝才使灵长类动物有了充分进化的余地。 事实上地球至少经历了5次物种大灭绝,每次物种灭绝都给更加高级的生物提供了充分进化的余地。 所以要跳出局部极值就必须杀死当前所有的优秀个体,从而让远离当前极值的点有充分的进化余地。这就是灾变思想。

灾变倒计数处理 下一个问题是什么时候进行灾变,换句话说什么时候局部搜索已经充分了呢? 可用了一个灾变倒计数的概念:从500开始递减,每一代递减一次,如果出现了新的最优值,就从新开始计数,如果出现新最优值的时候倒计数递减次数的2.5倍已经超过500则从新的初始值开始倒数。 例:初始倒数500,如果倒数到200时出现新最优值,则从(500 - 200) * 2.5 = 750开始从新倒数,下一次如果倒数到100时出现新最优值,则从(750 - 100) * 2.5 = 1625开始倒计数(这里的2.5是一个经验值,可以在全局参数设置里面调整)。也就是说倒计数的长度取决于进化的速度,进化速度越慢倒计数长度越长。如果倒计数完毕还没有新的最优值,就认为局部搜索已经充分,就发生灾变。

程序输入是一个文本文件,记录所有城市的坐标,以及最优个体的序列。以一张只有10个城市的地图为例,文本中可能记录了以下内容: 0 程序输入是一个文本文件,记录所有城市的坐标,以及最优个体的序列。以一张只有10个城市的地图为例,文本中可能记录了以下内容:   0.604600, 0.592500, 8   0.610500, 0.261400, 3   0.572800, 0.494300, 7   0.153200, 0.983900, 2   0.955700, 0.772000, 0   0.914400, 0.276500, 4   0.998500, 0.484800, 6   0.449800, 0.605300, 5   0.308500, 0.109000, 1   0.364700, 0.060100, 9 表示第一个城市的坐标为0.308500, 0.109000(程序客户区的宽和高为单位1,所有城市的坐标值均在[0.0,0.0]到[1.0,1.0]之内),第二个城市坐标为0.153200, 0.983900...依次类推。 后面所跟的整数为最优个体的序列,上述数据表示旅行商应该从第8号城市(0.604600, 0.592500)出发,经过3,7,2,0,4,6,5,1,9号城市,最后又回到第8号城市。   

程序的最终目标是求取一个序列,使得旅行商按照这个序列旅行时行程最短。 程序的变异方法是自繁殖变异,有两种:1、随机取两点,逆序这两点间的序列。2、随机把一个城市转移到另一个序列位置。 对于一个500个城市的地图,大概在5万代左右发生第一次灾变,用时约6-8分钟,灾变前夕的灾变倒计数初始值已经从800达到2000-20000。可以看到从一次灾变结束到下一次灾变开始,最优值的变化趋势近似呈一条拖拽线,越接近局部极值进化速度越慢,这也说明灾变倒计数的策略是正确的。

以下是一次试验的数据统计: 程序运行2个小时,进化到100万代,发生了16次灾变,最优个体产生于第606722代,属于第11个进化周期,总行程长度为17.164006,第一次灾变发生在第49773代,第一次灾变前最优个体产生于第45523代,总行程长度为18.029128。

最佳路线图

第一次灾变前的最佳路线

第一次灾变前的最优分趋势图

最后一次灾变前的最优分趋势图 在每个进化周期内最优分图形基本呈拖拽线形状,可以看到多数进化周期已经没有进化速度,说明局部搜索已经充分,少数进化周期在发生灾变时还有明显进化速度,这是因为这些周期恰好进入一个比较长的停滞期时被程序认为局部搜索充分了,停滞期的出现根随机数有关,个人认为应该可以通过调节灾变初始值和灾变倍增值解决。

第一次灾变前的平均分趋势图

最后一次灾变前的平均分趋势图

分析平均分趋势图 可以看到每次发生灾变后群体平均分会达到一个较大的值,然后迅速下降,再慢慢上升。这说明旅行商问题的局部极值非常多,极值附近解的分数要远远低于整个解空间的平均分,这主要是因为一个较优解进行一次变异后生成的子女绝大部分都是畸形的分数很低的个体,由于遗传算法并不放弃这些进化方向,从而影响了群体的平均分。 灾变时对整个解空间进行随机搜索,这时的群体平均分可以作为整个解空间平均分的体现,进化一定时间以后,群体迅速陷入到一个特定的局部极值附近,这个时候较优解还没有进化出来,群体中充斥着畸形个体,只有少量比较优秀的个体,所以平均分也随之迅速下降,随后由于优秀个体存活率比较高,群体渐渐被优秀个体统治,群体平均分也开始上升。 仔细分析每一个进化周期的平均分趋势图可以发现,在进化的后期群体平均分有一个稳固上升的阶段(这应该是最优个体慢慢排挤其他个体的结果),在此之前都会有一个标志性的少量下挫曲线(如图),还不知道产生这个曲线的原因。

程序下载地址:http://www.cnblogs.com/Files/simplesource/GATraveller.rar