什么是旅行商问题

旅行商问题(TravelingSalesmanProblem,TSP)是一个经典的组合优化问题。经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。
从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的Hamilton回路。由于该问题的可行解是所有顶点的全排列,随着顶点数的增加,会产生组合爆炸,它是一个NP完全问题。由于其在交通运输、电路板线路设计以及物流配送等领域内有着广泛的应用,国内外学者对其进行了大量的研究。早期的研究者使用精确算法求解该问题,常用的方法包括:分枝定界法、线性规划法、动态规划法等。但是,随着问题规模的增大,精确算法将变得无能为力,因此,在后来的研究中,国内外学者重点使用近似算法或启发式算法,主要有遗传算法、模拟退火法、蚁群算法、禁忌搜索算法、贪婪算法和神经网络等。

旅行商问题分析

1.问题本质

旅行商问题有一点像“最短路径问题”,然后我们就会自然地想到用Dijkstra算法去求得“从某一个城市出发,到其他所有剩余城市的最短路径”,再或者如果是个真实地图,我们可以用启发式的“A星算法”快速搜索出“从某一个城市到另一个指定城市间的最短路径”。但仔细想,这个问题并非单纯这么简单,它还要求去寻找“从某个城市开始,分别经过其它城市一次且仅一次,最后再回到这个出发城市的最短巡回路径”。

2.深入分析

旅行商问题要从图G的所有周游路线中求取最小成本的周游路线,而从初始点出发的周游路线一共有(n-1)!条,即等于除初始结点外的n-1个结点的排列数,因此旅行商问题是一个排列问题。排列问题比子集合的选择问题通常要难于求解得多,这是因为n个物体有n!种排列,只有 个子集合(n!>O( ))。通过枚举(n-1)!条周游路线,从中找出一条具有最小成本的周游路线的算法,其计算时间显然为O(n!)。
所以该怎么求解呢,我们很容易想到一种类似于穷举的思路:现在假设我们要拜访11个城市,从城市1出发,最后回到城市1。显然,从城市1出来后,我们随即可以选择剩余的10个城市之一进行拜访(这里所有城市都是连通的,总是可达的,而不连通的情况属于个人特殊业务的装饰处理,不是本文考虑范畴),那么很显然这里就有10种选择,以此类推,下一次就有9种选择……总的可选路线数就是:10!。也就是说需要用for循环迭代10!次,才能找出所有的路线,进而筛选出最短的那条路线。如果只拜访10个城市的话(需要迭代3628800次)或许还好,那要拜访100个城市(需要迭代9.3326215443944 * 10^157)简直就是计算机的噩梦!更多个城市的话,计算的时间开销可想而知!
更一般地,如果要拜访n+1个城市,总的可选路线数就是n!,进而时间复杂度就是O(n!),从这里我们同理也可以看出,这个算法的时间复杂度是非多项式的,它的开销大是显而易见的。所以问题的关键不在于寻找两两城市间的最短路径,而在于去寻找一那条最短的巡回路径,换句话说,就是寻找一组拜访城市的先后次序序列。

旅行商问题求解方案

旅行商求解方案主要有:
(1)TSP_旅行商问题- 蛮力法( 深度遍历优先算法DFS )
(2)TSP_旅行商问题- 动态规划
(3)TSP_旅行商问题- 模拟退火算法
(4)TSP_旅行商问题- 遗传算法
(5)TSP_旅行商问题- 粒子群算法
(6)TSP_旅行商问题- 神经网络

旅行商问题是个NP完全问题,穷举算法的效率又不高,那我们该如何通过一个多项式时间复杂度的算法快速求出这个先后次序呢?目前比较主流的方法是采用一些随机的、启发式的搜索算法,比如遗传算法、蚁群算法、模拟退货算法、粒子群算法等。但这些算法都有一个缺点,就是不一定能求出最优解,只能收敛于(近似逼近)最优解,得到一个次优解,因为他们本质都是随机算法,大多都会以类似“一定概率接受或舍去”的思路去筛选解。各算法的实现思路都有不同,但也或多或少有互相借鉴的地方,有的与随机因子有关、有的与初始状态有关、有的与随机函数有关、有的与选择策略有关。
综合上述分析,TSP问题的求解大概是由以下两步构成:
1.计算两两城市间的最短路径:利用类似Dijkstra、Flord、A星的算法求出最短路线。
2.计算最短巡回路径:利用类似遗传算法、蚁群算法的搜索算法求巡回拜访的次序。
关于1中需要说明一点,就是现实生活中我们的地图往往不是一个完全图,而是一个非完全图,甚至有些节点仅仅是道路的分岔口,而不是城市节点。完全图和非完全图的区别如下所示。

完全图和非完全图

完全图:两两城市间都有直达的路线,这条路线不需要经过中间其他节点;

非完全图:偶尔有两个城市间的路线需要经过其他中间节点。

旅行商问题(TSP)简介相关推荐

  1. 遗传算法解决旅行商问题(TSP)

    遗传算法解决旅行商问题(TSP) 参考文章: (1)遗传算法解决旅行商问题(TSP) (2)https://www.cnblogs.com/studylyn/p/5097238.html 备忘一下.

  2. python实现大规模邻域搜索(LNS)求解旅行商问题(TSP)

    文章目录 1. 大规模邻域搜索算法 1.1. LNS定义 1.2. LNS邻域 1.3. LNS框架 2. 旅行商问题TSP 3. python代码示例及结果 1. 大规模邻域搜索算法 参考<H ...

  3. (Python)模拟退火算法解决旅行商问题(TSP)

    两种写法思路,最全备注,第二种个人感觉上理解起来稍容易一点: 第一种: import numpy as np import matplotlib.pyplot as plt import pdb# 解 ...

  4. 《MATLAB智能算法30个案例》:第22章 蚁群算法的优化计算——旅行商问题(TSP)优化

    @[TOC](<MATLAB智能算法30个案例>:第22章 蚁群算法的优化计算--旅行商问题(TSP)优化) 1. 前言 <MATLAB智能算法30个案例分析>是2011年7月 ...

  5. 粒子群算法求解旅行商问题TSP (JAVA实现)

    粒子群算法求解旅行商问题TSP 写在开头: 最近师妹的结课作业问我,关于使用粒子群求解TSP问题的思路.我想了想,自己去年的作业用的是遗传算法,貌似有些关联,索性给看了看代码.重新学习了一遍粒子群算法 ...

  6. 双调欧几里得旅行商问题_教学 | 旅行商问题(TSP)的整数规划模型

    介绍旅行商问题(TSP)的整数规划模型. 最近有朋友在后台咨询TSP的整数规划建模问题,经过学习相关资料,现简单介绍TSP两种经典的整数规划模型. 1 TSP问题概述 旅行商问题 (Traveling ...

  7. java 蚁群算法_Java蚁群算法(Ant Colony)求解旅行商问题(TSP)(二)

    算法准备 旅行商问题(TSP)是一个经典的图论问题.在给定一系列城市和他们之间的距离以后,一个旅行商人希望能够找到一条能够走遍所有城市,并返回起点城市的最短路径.既然路径能串起来所有的城市,那么问题中 ...

  8. java 双调旅行商 hamiltonian,双调欧几里得旅行商问题(TSP)

    最小环+欧拉回路=最短哈密顿图 介绍 TSP(Traveling Salesman Problem)即旅行商问题,是数学领域中著名问题之一.这个问题是这样的:假设有一个旅行商人要拜访n个城市,他必须选 ...

  9. 【数学建模】基于随机机会约束规划方法对旅行商问题TSP求解

    前言 旅行商问题(Traveling Salesman Problem, abbr. TSP)是一个典型的组合优化难题,属于 NP 难题,在交通运输.管道铺设.路线选择等很多领域具有广泛应用,对这个问 ...

最新文章

  1. 硬盘突然提示没有初始化_分享一下固态硬盘不认盘的修复方法
  2. 数据库在EF中创建模型
  3. MySQL AS:设置别名
  4. jquery关于多个显示隐藏
  5. 64测试cpu稳定性_SuperPI-圆周率计算与CPU性能与稳定性测试
  6. 比特币程序_比特币如何运作? 我建立了一个应用程序向您展示。
  7. @SessionAttributes
  8. 机器学习 --- 1. 线性回归与分类, 解决与区别
  9. 学习 TList 类的实现[1]
  10. Excel 2010高级应用-饼图(四)
  11. C语言分数加减乘除化简操作集(含测试源码)
  12. VNC远程桌面使用方法
  13. 茶几上 清明上河图 诗句
  14. ASCII码与英文的显示原理
  15. csgo举报机器人怎么安排_求一个CSGO的举报和点赞用的机器人
  16. 傅里叶变换的一些总结
  17. 十年磨一剑,你要的低代码平台在这里
  18. Dell xps13 win10 安装于PCI-E SSD
  19. 职业学校的老师教计算机,职业院校计算机教学方式方法分析
  20. C语言常用语句之-循环语句

热门文章

  1. 解决linux对D盘(非系统盘)只有只读权限,无法创建文件夹 (linux 重新挂载盘符)
  2. Unity 获取手机触摸方法
  3. 神经网络与深度学习笔记(二)正向传播与反向传播
  4. LaTeX Error: File `numcompress.sty‘ not found. 解决方案
  5. 李炎恢 js教程 拖拽上 思路解析
  6. 超好用的Redis管理及监控工具
  7. UDS之浅谈31服务
  8. 【产品人卫朋】自媒体运营的5个阶段,以及增长策略
  9. 循环神经网络、注意力机制、Seq2Seq、Transformer与卷积神经网络(打卡2)
  10. AQS(AbstractQueuedSynchronizer)是什么?