旅行商问题 Traveling Salesman Problem(TSP)

这篇具有很好参考价值的文章主要介绍了旅行商问题 Traveling Salesman Problem(TSP)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题描述:是一个经典的组合优化问题

一个商人从一点出发,经过所有点后返回原点。

目标:经过所有点的最短路程。

约束:

1,除起点和终点外,所有点当且仅当经过一次;

2,起点与终点重合;所有点构成一个连通图


图论解释:该问题实质是在一个带权完全无向图中,找一个权值最小的哈密尔顿回路

哈密尔顿回路(Hamilton回路)

定义:G=(V,E)是一个图,遍历图中每个顶点一次且仅一次的路线称为哈密尔顿路径,遍历图中每个顶点一次且仅一次的回路(从哪里出发再回到哪里)称为哈密尔顿回路。具有哈密尔顿回路的图叫做哈密尔顿图

【离散数学】图论(四)哈密顿回路(Hamiltonian cycle) - 简书 (jianshu.com)


二、TSP问题建模

旅行商问题 Traveling Salesman Problem(TSP)

(29条消息) 旅行商(TSP)问题建模和子路径(subtour)消除约束详解_Dragon Fly的博客-CSDN博客_tsp约束条件

旅行商问题 Traveling Salesman Problem(TSP)

三、存在子回路(subtour)

旅行商问题 Traveling Salesman Problem(TSP)

导致解中含有多个相离的环,也就是subtour。需要的解是一个单个的经过所有点的大环


  子路径消除约束常见两种:

  1. 加入subtour-elimination 约束
  2. 加入Miller-Tucker-Zemlin(MTZ)约束

1: subtour-elimination 消除子环路

主要想法就是,根据子环路的特点,在模型中添加相应的约束,将其破开>>增加子环路不存在的条件就是(即破圈的方法)

旅行商问题 Traveling Salesman Problem(TSP)

粗犷理解:点的个数为N,S为点的集合,除了包含全部点的集合的情况,所有其他少了一个或几个点的集合所形成的点点线条必须小于等于(集合中点总数-1)(即少了一个或几个点后,连线边要求比现存的点少)

旅行商问题 Traveling Salesman Problem(TSP)

旅行商问题 Traveling Salesman Problem(TSP)

subtour-elimination的约束,思路就是相当于割平面法,是一个枚举的约束,复杂度
采用Gurobi或者CPLEX求解器中提供的callback(回调函数)的方法来动态的添加subtour-elimination约束。


2 : Miller-Tucker-Zemlin(MTZ)约束消除子环路

对每个结点,引入一个决策变量,

 旅行商问题 Traveling Salesman Problem(TSP)

 粗犷理解:M 取无穷大数,是运筹学中常见的基本操作​​​​​​​,取M = N (N为节点的个数)

旅行商问题 Traveling Salesman Problem(TSP)
由于TSP的起点和终点是一致的,如果不做处理,会出现infeasible的情况

 修正:点集为V ′ = { 1 , 2 , ⋯   , N , N + 1 } V'=\{1,2,..., N,N+1},一共N + 1 个点,其中点1和点N + 1 是同一个点,点1表示起点,点N + 1 表示终点
旅行商问题 Traveling Salesman Problem(TSP)

​​​​​​​(29条消息) 运筹学修炼日记:TSP中两种不同消除子环路的方法及callback实现(Python调用Gurobi求解,附以王者荣耀视角解读callback的工作逻辑)_刘兴禄的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-437160.html

到了这里,关于旅行商问题 Traveling Salesman Problem(TSP)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分支限界TSP(旅行商问题)

    【问题】 TSP 问题(traveling salesman problem) 是指旅行家要旅行 n 个城市, 要求各个城市经历且仅经历一次然后回到出发城市, 并要求所走的路程最短。 【想法】 首先确定目标函数的界[down, up], 可以采用贪心法确定 TSP 问题的一个上界。 如何求得 TSP 问题的一个合理的下界呢

    2024年02月08日
    浏览(45)
  • C++动态规划解决TSP(旅行商)问题

    题目描述: 某旅行商希望从某城市出发经过一系列的城市最后再回到出发的城市。这些城市之间均可直航,他希望只经过这些城市一次且旅行的总线路最短。设有n个城市,城市的编号从1到n。 输入第一行为整数n,表示城市的数量。其后n行,每行有n个整数,用空格隔开,表

    2024年02月03日
    浏览(38)
  • 旅行商问题(TSP)及Python图论求解

    旅行商问题(Traveling Salesman Problem, TSP)是指给定一个城市的集合以及每两个城市之间的距离,找到一条经过每个城市恰好一次且路径最短的回路。 可以想象成一个旅行商要拜访多个城市,问他如何安排路线,使得行程最短。这个问题可能看起来简单,但是随着城市数量的增

    2024年02月12日
    浏览(36)
  • Hopfield神经网络求解旅行商(TSP)问题matlab代码

            1.网络结构         连续Hopfield神经网络(Continuous Hopfield Neural Network,CHNN)的拓扑结构和离散Hopfield神经网络的结构类似,如图11-1所示。连续Hopfield网络和离散Hopfield 网络的不同点在于其传递函数不是阶跃函数,而是连续函数。         与离散型Hopfield神经网络不

    2024年02月14日
    浏览(41)
  • 基于TSP(旅行商)问题的混合粒子群算法 附直接运行代码

    如果对粒子群一点都不知道的可以看看上文标准粒子群算法, 想看代码的直接去下面1.4标题 即可 链接:(105条消息) 自己对粒子群算法的理解(附matlab直接运行代码)(二维)_吕浩轩的博客-CSDN博客_二维粒子群算法​​​​​​h 好现在开始正文: 标准粒子群通过追随个体极值和

    2023年04月16日
    浏览(74)
  • python实现大规模邻域搜索(LNS)求解旅行商问题(TSP)

    参考《Handbook of Metaheuristics (Third Edition)》中的Large neighborhood search章节, 建议直接阅读英文原版 大规模邻域搜索(LNS) 属于超大邻域搜索(Very Large-Scale Neighborhood Search, VLNS)的一类 ,随着算例规模的增大,邻域搜索算法的邻域规模呈指数增长或者当邻域太大而不能在实际中明确搜索

    2024年02月08日
    浏览(40)
  • 贪心算法问题实验:贪心算法解决TSP问题

    TSP问题是指旅行商问题,即给定一组城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。它是组合优化中的一个NP困难问题,在运筹学和理论计算机科学中有着广泛的应用。 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最

    2024年02月03日
    浏览(42)
  • TSP问题的遗传算法实现

    一.实验目的 本实验课程是计算机、智能、物联网等专业学生的一门专业课程,通过实验,帮助学生更好地掌握人工智能相关概念、技术、原理、应用等;通过实验提高学生编写实验报告、总结实验结果的能力;使学生对智能程序、智能算法等有比较深入的认识。要掌握的知

    2024年02月03日
    浏览(42)
  • 遗传算法解决tsp问题(基于python)

    目录 1.遗传算法简要介绍 2.tsp问题简要介绍 3.遗传算法解决tsp问题的几个特殊点 4.源码         简单来说,遗传算法是用于解决最优化问题的一种搜索算法。其核心基于自然界种群进化的规律,即初始种群进行交配,在基因层面上,其中会发生交叉互换、基因突变等变异

    2023年04月12日
    浏览(76)
  • 运筹系列82:使用动态规划求解TSP问题

    定义 c ( s , k ) c(s,k) c ( s , k ) 为当前在 k k k ,待访问点的集合 s s s ,最后返回城市0的最短路径,那么Bellman方程为: c ( s , k ) = min ⁡ i ∈ s { c ( s − { i } , i ) + d i , k } c(s,k)=min_{i in s}{c(s-{i},i)+d_{i,k}} c ( s , k ) = min i ∈ s ​ { c ( s − { i } , i ) + d i , k ​ } 为了使用方便,这里

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包