Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >六种TSP算法的对比试验

六种TSP算法的对比试验

作者头像
用户1621951
发布于 2021-08-06 05:18:31
发布于 2021-08-06 05:18:31
8.9K7
举报
文章被收录于专栏:数据魔术师数据魔术师

TSP问题相信大家已经不陌生了,它是指假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。

解决TSP问题的算法有很多,在本期推文中,小编将会比较贪心算法动态规划模拟退火禁忌搜索LKH算法以及Concorde求解器的求解效率。

前四种算法都是求解TSP问题中较常见的算法,在往期推文中都已做过介绍,小编就不再赘述啦,想要了解这些算法的小伙伴们可以参考以下推文:

什么是算法?从枚举到贪心再到启发式(上)

干货|十分钟教你用动态规划算法解Travelling Salesman Problem(TSP)问题,附代码……

干货 | 用模拟退火(SA, Simulated Annealing)算法解决旅行商问题

干货|十分钟快速复习禁忌搜索(c++版)

而LKH算法和Concorde求解器对于一些小伙伴来说可能就比较陌生了,小编简单介绍一下:

LKH算法是目前求解 TSP 问题的最有效的启发式算法。其创造者K. Helsgaun 在网站上发布了其算法的完整代码和他自己的研究论文。链接如下:

http://webhotel4.ruc.dk/~keld/research/LKH-3/

Concorde求解器使用的是concorde精确算法,可以求出TSP问题的最优解。它还可以用于求解生物信息中的基因映射,蛋白质功能预测,调度船只等多种问题。世界上能够求解出最优解的最大规模的TSP算例就是由它求解完成的。链接如下:

http://www.math.uwaterloo.ca/tsp/concorde/downloads/downloads.htm

01

LKH与concorde的调用

虽然LKH算法与Concorde求解器是免费开放的,想轻松调用它们也不一件容易的事哦。

Concorde求解器只能读取后缀为.tsp的文件。不过这可难不倒我们。只要新建一个文本文档,将tsp文件所需的相关数据输入,再改变文件后缀就可以生成tsp文件了。格式如下图:

用求解器打开新生成的tsp文件后,点击左上方的“Solve”,这就是concorde求解器求精确解的地方。

除此之外点击“Solve”旁边的“Heuristics”可以调用其他启发式算法求解问题,如LK算法、贪心算法等。

需要注意的是,concorde求解器只接受11个节点及以上的TSP问题的求解,在遇到小于等于10个节点的问题时则无法求解的。

结果如下:

LKH算法的调用可能更复杂一些:除了下载LKH算法以外,小编还找到了一位大神写的LKH的MATLAB接口才成功地调用该算法,接口下载地址(ntnu-arl/LKH_TSP: A set of tools to solve TSP problems using the LKH solver (github.com))

根据指导,下载LKH.exe地址如下:LKH (Keld Helsgaun) (ruc.dk),记住它的存储位置。

新建一个txt文档,填入相关内容后用改变文件后缀的方式转化为par文件(划线处填入读取的文件地址),格式如下:

MATLAB调用该接口的代码如下(将LKH.exe位置在MATLAB代码中赋值给变量LKHdir):

需要注意的是,此接口读取地tsp文件与上文concorde求解器读取地文件格式有所不同,其读取的是节点之间地距离矩阵,详细格式如下图:

运行成功时结果如下图:

02

算法比较

好啦,准备工作基本完成,让我们进入正题。

由于concorde求解器对算例的节点数有一定要求,小编分别取含11、13、15、17、19、21、23、50、100个节点的算例进行试验。

随机生成各个节点的坐标,输出各节点坐标及贪心算法、动态规划、模拟退火和禁忌搜索对同一算例求解所用的时间,将各节点坐标整合并生成相应tsp文件,调用LKH算法和concorde求解器,输出它们解决相应问题所用的时间。(欲下载相关代码,请移步留言区)

对各个数据规模,各算法的求解消耗时间对比如下(纵轴单位:ms ):

动态规划由于数据过大,所以小编单独列了一张图(纵轴单位:ms):

可以发现,当数据规模较小时,六种算法的求解速度几乎没有差别,当数据规模增大时,算法之间的求解速度差别就显而易见了。

其中较为特殊的是贪心算法,它不从整体最优上加以考虑,其所做出的仅是在某种意义上的局部最优解,因此其速度虽然快,但求解正确率却实在不高。

撇开贪心算法不谈,其他算法中速度较优的也许就要数LKH算法了,真不愧是求解tsp问题最牛叉的算法。

Concorde求解器虽然看似花费时间较长,但它求出的是精确解,也就是说,它的正确率可以达到100%。

说到正确率,这里还有一张关于各算法求出最好解的表格:

其中较为特殊的是动态规划算法,由于Java平台限制了数组的最大长度,所以较大的数据动态规划算法就无法计算了。

细心的小伙伴可能已经发现了,此处禁忌搜索表现不佳,其实禁忌搜索是一种思想,算法的效率取决于代码编写者,此处禁忌搜索表现不佳并不意味着,禁忌搜索不如模拟退火等算法。

可以看到,在数据较小的时候动态规划和模拟退火的正确率还算可以接受,而当数据足够大时,LKH算法与concorde精确求解器的威力就显现出来了。

给小伙伴们展示一下500节点时,concorde求解器的求解情况,真的让小编有一种震撼的感觉:

需要说明的是,算法的运行效果与很多因素有关,如设计思路、实现过程、编写语言、计算机的性能等,小编这次只是大致比较了其中一种情况,并不是很严谨。感兴趣的小伙伴也可以自己尝试一下。

REFERENCE

动态规划代码来源:动态规划求解旅行商问题(java实现)_天阑Sir的博客-CSDN博客_java旅行商问题动态规划

禁忌搜索代码来源:禁忌搜索算法的实现_Python_ttphoon的博客-CSDN博客

MATLAB代码来源:用matlab调用迄今为止最强悍的求解旅行商(TSP)的算法-LKH算法 - 知乎 (zhihu.com)

matlab接口下载地址::ntnu-arl/LKH_TSP: A set of tools to solve TSP problems using the LKH solver (github.com)

LKH.exe下载地址:LKH (Keld Helsgaun) (ruc.dk)

欲下载相关代码,请移步留言区

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据魔术师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
7 条评论
热度
最新
想要代码,球球了
想要代码,球球了
回复回复点赞举报
求代码,谢谢
求代码,谢谢
回复回复点赞举报
想要代码 举手!!
想要代码 举手!!
回复回复点赞举报
懂了, 是四舍五入
懂了, 是四舍五入
回复回复点赞举报
请问点与点之间的距离是怎么算的, concorde怎么算出的都是整数?
请问点与点之间的距离是怎么算的, concorde怎么算出的都是整数?
回复回复点赞举报
依然在学习
依然在学习
回复回复点赞举报
很好
很好
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
数学建模--智能算法之模拟退火算法
模拟退火算法(Simulated Annealing,SA)是一种基于物理退火原理的元启发式优化算法,广泛应用于数学建模中的各种优化问题。其基本思想是通过模拟固体在高温下逐渐冷却的过程,来寻找全局最优解或近似最优解。
用户11315985
2024/10/16
4160
数学建模--智能算法之模拟退火算法
数据魔术师推荐适合2021级(大一)本科生学习推文列表
         此部分学习内容适合工业工程,管理科学与工程,信息管理,物流管理,系统工程等相关专业的2021级(大一)本科生。只需要有C++,Java编程基础即可,不需要任何数学基础,也不需要运筹学基础,推文由简到难递进,适合自学!大一可以把这些文章掌握,你就真正入门决策优化算法这个领域了。 在朋友圈转发此推文,并且集齐20个赞,可被邀请加入数据魔术师2021级本科学习交流群,会有高年级本科生,硕士生、博士生和老师在群里提供指导和讨论。入群方式见文末! 干货 | 用模拟退火(SA, Simulated
用户1621951
2022/04/13
8010
数据魔术师推荐适合2021级(大一)本科生学习推文列表
数学建模--旅行商
旅行商问题(TSP,Traveling Salesman Problem)是数学建模中的一个经典组合优化问题。其基本描述如下:给定一组城市和每对城市之间的距离,要求找到一条路径,使得旅行商从某一城市出发,访问所有其他城市一次并返回原点,且总行程最短。
用户11315985
2024/10/16
2380
数学建模--旅行商
【算法】迭代局部搜索(Iterated local search)探幽
局部搜索是解决最优化问题的一种启发式算法。因为对于很多复杂的问题,求解最优解的时间可能是极其长的。因此诞生了各种启发式算法来退而求其次寻找次优解,局部搜索就是其中一种。它是一种近似算法(Approximate algorithms)。
短短的路走走停停
2019/05/13
1.5K0
【算法】迭代局部搜索(Iterated local search)探幽
【算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题
有若干个城市,任何两个城市之间的距离都是确定的,现要求一旅行商从某城市出发必须经过每一个城市且只在一个城市逗留一次,最后回到出发的城市,问如何事先确定一条最短的线路已保证其旅行的费用最少?
短短的路走走停停
2019/05/13
4.5K0
【算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题
基于求解器的路径规划算法实现及性能分析
社会智能化的发展趋势和日益多元化的实际需求,奠定了物流运输行业对于实现智能规划的需求,车辆路径规划问题是其中的重点研究对象。
用户1621951
2023/01/05
8K0
基于求解器的路径规划算法实现及性能分析
运筹学教学|三种TSP问题算法的对比试验及分配问题和TSP问题求解速度对比
关于这三种算法的详细步骤,小编在这里就不再赘述啦,让我们直接进入正题~想要了解这些算法的同学可参考以下推文:
用户1621951
2021/03/16
3.5K0
五类常见算法小记 (递归与分治,动态规划,贪心,回溯,分支界限法)
直接或间接地调用自身的算法称为递归算法。 递归是算法设计与分析中经常使用的一种技术,描写叙述简单且易于理解。
全栈程序员站长
2022/07/20
5600
图论求解平面TSP问题算法复现
旅行商问题(Traveling Salesman Problem,TSP)作为组合优化领域的经典难题,在物流配送、电路布线、旅游规划等众多实际场景中具有广泛应用。其核心在于寻找旅行商遍历所有城市且不重复、最终返回起点的最短路径,然而随着城市数量的增加,问题复杂度呈指数级增长,传统算法在求解大规模 TSP 问题时面临巨大挑战。
Srlua
2025/01/02
1481
图论求解平面TSP问题算法复现
MIT和亚马逊举办的路径优化比赛—— US$175000的解决方案分享
最后一公里配送问题,指的就是区域配送中心到末端设施这一段的配送问题。司机需要在配送中心装载好货物,按顺序访问多个末端设施进行收货或送货操作,最后回到配送中心。
用户1621951
2022/01/21
1.1K0
MIT和亚马逊举办的路径优化比赛—— US$175000的解决方案分享
《算法设计与分析》期末不挂科的原因_算法设计与分析重点
感兴趣的话可以参考 算法竞赛、小白学DP(动态规划) 学习相关代码的具体实现(Java版)
全栈程序员站长
2022/11/08
1.2K0
《算法设计与分析》期末不挂科的原因_算法设计与分析重点
基于蚁群算法的机械臂打孔路径规划
问题描述   该问题来源于参加某知名外企的校招面试。根据面试官描述,一块木板有数百个小孔(坐标已知),现在需要通过机械臂在木板上钻孔,要求对打孔路径进行规划,力求使打孔总路径最短,这对于提高机械臂打孔的生产效能、降低生产成本具有重要的意义。 数学模型建立 问题分析   机械臂打孔生产效能主要取决于以下三个方面: 单个孔的钻孔作业时间,这是由生产工艺所决定的,不在优化范围内,本文假定对于同一孔型钻孔的作业时间是相同的。 打孔机在加工作业时,钻头的行进时间。 针对不同孔型加工作业时间,刀具的转换时间。   在机
waylon
2018/03/08
1.7K0
基于蚁群算法的机械臂打孔路径规划
文心一言 VS chatgpt (1)-- 算法导论1.1
在一个商店里,顾客需要购买一些商品。他们需要按照价格从低到高排序,以便更容易地找到他们想要的商品。
福大大架构师每日一题
2023/06/08
3750
文心一言 VS chatgpt (1)-- 算法导论1.1
【优化算法】变邻域搜索算法(VNS)求解TSP(附C++详细代码及注释)
上次变邻域搜索的推文发出来以后,看过的小伙伴纷纷叫好。小编大受鼓舞,连夜赶工,总算是完成了手头上的一份关于变邻域搜索算法解TSP问题的代码。今天,就在此给大家双手奉上啦,希望大家能ENJOY哦!
短短的路走走停停
2019/05/13
1.3K0
数学建模----TSP&&模拟退火&&蚁群算法
旅行商问题是一个运筹学范围的问题,就是一个旅行商从1城市出发,依次经过2,3,4...............城市去推销货物,最后返回1城市,城市之间的路程一直,如何规划最优的路线?
阑梦清川
2025/02/24
1290
数学建模----TSP&&模拟退火&&蚁群算法
数学建模--智能算法之蚁群优化算法
蚁群优化算法(Ant Colony Optimization, ACO)是一种模拟蚂蚁觅食行为的群体智能优化算法,由Marco Dorigo于1992年在他的博士论文中首次提出。该算法灵感来源于蚂蚁在寻找食物过程中发现路径的行为,通过模拟这种行为来解决组合优化问题。
用户11315985
2024/10/16
5680
数学建模--智能算法之蚁群优化算法
模拟退火优化算法
一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达
智能算法
2018/04/02
1.2K0
模拟退火优化算法
基于模拟退火算法(SA)的TSP(Python实现)
基于模拟退火算法(Simulated Annealing, SA)的TSP(Traveling Salesman Problem,旅行商问题),我们涉及一种用于解决TSP的启发式优化方法。TSP是一个经典的组合优化问题,旨在寻找一条最短路径,使得旅行商可以访问每个城市恰好一次并返回起点城市。
不去幼儿园
2024/12/03
1510
基于模拟退火算法(SA)的TSP(Python实现)
震惊!史上已获得最优解的旅行商问题(TSP)的算例有八万五千九百个节点
很愉快的,我们又见到了我们的老朋友,旅行商问题(Travelling salesman problem, TSP),在之前的一期推送中,我们利用团队的高配置服务器计算了利用动态规划求解旅行商问题的时间和空间消耗。看过的朋友应该还对之前的那两个增长曲线记忆犹新吧,如果还没有看过,那赶紧去看一下哦,下面给出上一篇文章的链接:
用户1621951
2019/10/18
6.2K0
震惊!史上已获得最优解的旅行商问题(TSP)的算例有八万五千九百个节点
干货|十分钟教你用动态规划算法解Travelling Salesman Problem(TSP)问题,附代码……
乍一看标题,大家是不是觉得“动态规划”这四个字组合在一起有点眼熟?似乎哪会儿学过来着……但是吧,细细一琢磨,又忘了它具体是什么、怎么用、用来解决哪些问题了。 莫方,小编出现就是为了解决大家一切在学(zhuang)习(bi)上的需求的。动态规划忘了是吧,那今天小编就陪你好好回忆一下。 什么是TSP和动态规划 简单来说,Travelling Salesman Problem (TSP) 是最基本的路线问题。它寻求的是旅行者由起点出发,通过所有给定的需求点后,再次返回起点所花费的最小路径
用户1621951
2018/04/19
29K2
干货|十分钟教你用动态规划算法解Travelling Salesman Problem(TSP)问题,附代码……
推荐阅读
相关推荐
数学建模--智能算法之模拟退火算法
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档