辨析旅行商问题(TSP)与车辆路径问题(VRP)

目录

    • 前言
    • 旅行商问题 (TSP)
      • 问题介绍
      • 数学模型
        • 符号定义
        • 问题输入
        • 约束条件
        • 目标函数
        • 问题输出
      • 解的空间
        • 解空间大小计算
        • 解释
    • 车辆路径问题 (VRP)
      • 问题介绍
      • TSP到VRP的过渡
      • 数学模型
        • 符号定义
        • 问题输入
        • 约束条件
        • 优化目标
        • 问题输出
      • 解空间
        • 特殊情况
        • 一般情况
    • TSP 与 VRP 对比

前言

计划是通过本文的撰写,捋清楚TSP和VRP的本质不同。(什么是本质❔)

对比TSP(旅行商问题)VRP(车辆路径问题)
描述给定一个城市列表以及每对城市之间的距离,访问每个城市一次并返回出发城市的最短路线是什么车队需要向给定的一组客户家中取货,需要遍历的最佳路线集是什么?
输入城市数量,距离矩阵城市数量,距离矩阵,任务量,卡车容量
约束每个城市仅访问一次每个城市仅访问一次,满足容量要求
目标最小化总旅行距离最小化总旅行距离
输出一个旅行商访问城市的顺序多个车辆的行驶路线
空间城市序列: ( n − 1 ) ! (n-1)! (n1)!城市序列加上车辆任务分配: n ! < S < P ( n , m ) k n! < S < P(n,m)^k n!<S<P(n,m)k

n = 13 , m = 5 , k = 3 n=13,m=5,k=3 n=13m=5k=3为例,对比解空间:

  • TSP解空间: ( n − 1 ) ! = ( 13 − 1 ) ! = 12 ! = 4.79 × 1 0 8 (n-1)! = (13-1)! = 12!=4.79 × 10^8 (n1)!=(131)!=12!=4.79×108
  • VRP解空间:
    • 下限: n ! = 13 ! = 12 ! = 6.23 × 1 0 9 n! = 13! = 12!= 6.23 × 10^9 n!=13!=12!=6.23×109
    • 上限: P ( n , m ) k = P ( 15 , 5 ) 3 = 3.68 × 1 0 15 P(n,m)^k=P(15,5)^3= 3.68 × 10^{15} P(n,m)k=P(15,5)3=3.68×1015

旅行商问题 (TSP)

问题介绍

旅行商问题(英语:Travelling salesman problem, TSP)在1930年被首次提出,是优化领域研究最深入的问题之一。问题的表述是:“给定一个城市列表以及每对城市之间的距离,访问每个城市一次并返回出发城市的最短路线是什么?”

TSP示意图
图片来源:algorist.com

数学模型

符号定义
  • n n n: 城市的数量。
  • c i j c_{ij} cij: 从城市 i i i 到城市 j j j 的距离或成本。
  • x i j x_{ij} xij: 决策变量。如果旅行商从城市 i i i 直接前往城市 j j j,则为 1,否则为 0。
问题输入
  • 城市数量: n n n
  • 距离矩阵: c i j c_{ij} cij,表示从城市 i i i 到城市 j j j 的距离或成本(对所有 i , j = 1 , 2 , . . . , n i, j = 1, 2, ..., n i,j=1,2,...,n i ≠ j i \neq j i=j)。
约束条件

每个城市只访问一次:
∑ j = 1 , j ≠ i n x i j = 1 ∀ i = 1 , 2 , … , n \sum_{j=1, j \neq i}^{n} x_{ij} = 1 \quad \forall i = 1, 2, \ldots, n j=1,j=inxij=1i=1,2,,n
∑ i = 1 , i ≠ j n x i j = 1 ∀ j = 1 , 2 , … , n \sum_{i=1, i \neq j}^{n} x_{ij} = 1 \quad \forall j = 1, 2, \ldots, n i=1,i=jnxij=1j=1,2,,n

$$
\sum_{j=1, j \neq i}^{n} x_{ij} = 1 \quad \forall i = 1, 2, \ldots, n
$$
$$
\sum_{i=1, i \neq j}^{n} x_{ij} = 1 \quad \forall j = 1, 2, \ldots, n
$$
目标函数

最小化总旅行距离或成本:
min ⁡ ∑ i = 1 n ∑ j = 1 , j ≠ i n c i j x i j \min \sum_{i=1}^{n}\sum_{j=1, j \neq i}^{n} c_{ij} x_{ij} mini=1nj=1,j=incijxij

$$
\min \sum_{i=1}^{n}\sum_{j=1, j \neq i}^{n} c_{ij} x_{ij}
$$
问题输出
  • 访问城市的顺序。

解的空间

旅行商问题的解空间是指所有可能的路径组合数量。

解空间大小计算
  • 对于 n n n 个城市的 TSP,旅行商从一个城市出发,并有 ( n − 1 ) (n - 1) (n1) 个城市可以选择作为第一站。
  • 在访问了第一个城市后,剩下 ( n − 2 ) (n - 2) (n2) 个城市可以选择作为下一站,以此类推。
  • 最后,旅行商将从最后一个未访问的城市返回起始城市。

因此,TSP 的解空间大小为所有可能路径的数量,计算公式为:

( n − 1 ) ! (n - 1)! (n1)!

其中, ( n − 1 ) ! (n - 1)! (n1)! 表示 ( n − 1 ) (n - 1) (n1) 的阶乘,即 1 × 2 × 3 × … × ( n − 2 ) × ( n − 1 ) 1 \times 2 \times 3 \times \ldots \times (n - 2) \times (n - 1) 1×2×3××(n2)×(n1)

解释

旅行商可以从任何城市开始,但是不同的起点并不会影响各城市在解中的相对顺序。每个路径都可以通过循环移位变换为从特定城市(比如第一个城市)开始的路径,所以实际上只需考虑从一个固定城市出发的路径。

车辆路径问题 (VRP)

问题介绍

车辆路径问题(英语:Vehicle Routing Problem,VRP)在1959年被首次提出,是TSP的泛化形式,包含TSP问题。问题描述:车队需要向给定的一组客户家中取货或是送货,需要遍历的最佳路线集是什么?
值得一提的是,在1959年被提出时,论文名称是’The truck dispatching problem’,并没有使用Vehicle Routing Problem的表述。在随后十多年的相关研究中,也一直没有直接使用VRP这一名词的论文。直到Christofides, N.的论文’The vehicle routing problem’于1976年发表后,后续研究普遍采用了VRP的表述。

TSP到VRP的过渡

我们把TSP问题或一个场景表述为一辆空载的卡车从车库或是车场(出发城市)出发需要到多位客户的家中(其它城市)取货物,待取完所有货物后需要返回车库。这里有一个潜在的假定,不管所有客户家中的货物累加和究竟有多大,这一辆卡车总能全部纳入到自己的车厢中并继续正常行驶。也就是,车辆的运输能力 C C C 大于等于所有的货物量:
C ≥ ∑ i q i C \ge \sum\limits_i {{q_i}} Ciqi
其中 q i q_i qi 表述第 i i i 个客户家中的货物量。
但是,当面临一辆卡车完不成所有的任务量时,也就是:
C < ∑ i q i C < \sum\limits_i {{q_i}} C<iqi
就需要多辆车去完成,或者是一辆车多次往返。
按照论文The truck dispatching problem. Management science 6, 80–91 (1959)里面的介绍,把该条件描述为:
C ≪ ∑ i q i C \ll \sum\limits_i {{q_i}} Ciqi
并且,文章提出假定一辆车最多只能访问 m m m 个点,只有当 m m m 比较大时,有研究意义,否则的话,求解比较容易,如下:

If m m m is small, optimal sets of m m m points may often be determined by inspection of a map which contains the points and the arcs connecting them. One would look for “clusters of points” and determine by trial and error the order in which they should be traversed, taking care that no loop crosses itself. However, when clusters are not present in sufficient numbers or when m m m is large, this procedure becomes inapplicable. In this case near-best solutions may be obtained by the algorithm in this paper.
如果 m m m 很小,最优的 m m m 个点的集合通常可以通过检查包含这些点和连接它们的弧的地图来确定。人们会寻找"点的簇集",并通过试验和错误来确定它们应该按照什么顺序遍历,确保没有回路交叉。然而,当簇集数量不足或者 m m m 很大时,这种方法就不适用了。在这种情况下,可以通过本文中的算法获得近似最优解。

数学模型

符号定义
  • n n n: 任务点的数量。
  • P i P_i Pi: 第 i i i 个任务点的位置,( i = 1 , 2 , … , n i=1,2,\ldots,n i=1,2,,n)。
  • [ D ] = [ d i j ] [D]=[d_{ij}] [D]=[dij]: 任务点间的距离邻接矩阵,( i , j = 0 , 1 , … , n i,j=0,1,\ldots,n i,j=0,1,,n)。
  • ( Q ) = ( q i ) (Q) = (q_i) (Q)=(qi): 各任务点的任务量,( i = 1 , 2 , … , n i=1,2,\ldots,n i=1,2,,n)。
  • C C C: 卡车的容量,满足 C > max ⁡ ( q i ) C > \max(q_i) C>max(qi)
  • x i j x_{ij} xij: 决策变量。如果任务点 P i P_i Pi P j P_j Pj 被同一辆车辆访问,则 x i j = x j i = 1 x_{ij} = x_{ji} = 1 xij=xji=1;如果不被同一辆车辆访问,则 x i j = x j i = 0 x_{ij} = x_{ji} = 0 xij=xji=0;对于所有 i i i, x i i = 0 x_{ii} = 0 xii=0
问题输入
  • 给定 n n n 个任务点的位置 P i P_i Pi
  • 给定任务点间的距离邻接矩阵 [ D ] [D] [D]
  • 给定任务点的任务量 ( Q ) (Q) (Q)
  • 给定卡车的容量 $C。
约束条件
  1. 车辆的起点和终点均是车库 P 0 P_0 P0
  2. 每个任务点 P i P_i Pi 除了与车库 P 0 P_0 P0 外,最多与另一个任务点 P j P_j Pj 被同一个车辆访问一次。对于所有 i = 1 , 2 , … , n i = 1, 2, \ldots, n i=1,2,,n,有 ∑ j = 0 n x i j = 1 \sum_{j = 0}^{n} x_{ij} = 1 j=0nxij=1
  3. 每辆车辆在任何时候的载荷不得超过其容量 C C C。对于车辆在访问任务点 P i P_i Pi 时的载荷量,满足以下条件:
    ∑ i = 1 n q i x i j ≤ C ∀ j = 1 , 2 , … , n \sum_{i=1}^{n} q_i x_{ij} \le C \quad \forall j = 1, 2, \ldots, n i=1nqixijCj=1,2,,n
    其中, q i q_i qi 表示任务点 P i P_i Pi 的任务量, x i j x_{ij} xij 表示车辆是否访问了任务点 P i P_i Pi
$$\sum_{i=1}^{n} q_i x_{ij} \le C \quad \forall j = 1, 2, \ldots, n$$
优化目标

最小化总行驶距离 D D D
min ⁡ D = ∑ i , j = 0 n d i j x i j \min D = \sum_{i,j=0}^n d_{ij} x_{ij} minD=i,j=0ndijxij

$$\min D = \sum_{i,j=0}^n d_{ij} x_{ij}$$
问题输出
  • 各车辆的行驶路线。

解空间

在车辆路径问题(VRP)中,我们考虑除起点和终点外的所有车辆行驶路线。这些路线可以排列成一个由 n n n 个点组成的一维序列 S S S,拥有 n ! n! n! 种可能性。

特殊情况

假设 n n n m m m 的整数倍,且每辆车必须经过 m m m 个点才能返回车库。此时,序列 S S S 只需平均分配给各车辆,解空间仍为 n ! n! n! 种。

一般情况

如果每辆车经过的点数在 1 到 m m m 之间,解空间的计算变得复杂。

目前尚没有发现计算精确解空间大小的文献, AI 也无法给出确切数字,下面是一个粗略的估算方法。

  • 单辆车的最大访问点数为 m m m,可能的访问序列数量为排列数 P ( n , m ) P(n,m) P(n,m)
  • 对于 k k k 辆车,考虑所有可能的序列组合。
  • 考虑到车辆间访问点的重叠,实际解空间小于 P ( n , m ) k P(n,m)^k P(n,m)k

因此,解空间的上限估算为 P ( n , m ) k P(n,m)^k P(n,m)k

TSP 与 VRP 对比

对比条目TSP(旅行商问题)VRP(车辆路径问题)
问题描述给定一个城市列表以及每对城市之间的距离,访问每个城市一次并返回出发城市的最短路线是什么车队需要向给定的一组客户家中取货,需要遍历的最佳路线集是什么?
问题输入城市数量,距离矩阵城市数量,距离矩阵,任务量,卡车容量
约束条件每个城市仅访问一次每个城市仅访问一次,满足容量要求
优化目标最小化总旅行距离最小化总旅行距离
问题输出一个旅行商访问城市的顺序多个车辆的行驶路线
求解空间城市序列: ( n − 1 ) ! (n-1)! (n1)!城市序列加上车辆任务分配: n ! < S < P ( n , m ) k n! < S < P(n,m)^k n!<S<P(n,m)k

以n=13,m=5,k=3为例

  • TSP解空间: ( n − 1 ) ! = ( 13 − 1 ) ! = 12 ! = 4.79 × 1 0 8 (n-1)! = (13-1)! = 12!=4.79 × 10^8 (n1)!=(131)!=12!=4.79×108
  • VRP解空间:
    • 下限: n ! = 13 ! = 12 ! = 6.23 × 1 0 9 n! = 13! = 12!= 6.23 × 10^9 n!=13!=12!=6.23×109
    • 上限: P ( n , m ) k = P ( 15 , 5 ) 3 = 3.68 × 1 0 15 P(n,m)^k=P(15,5)^3= 3.68 × 10^{15} P(n,m)k=P(15,5)3=3.68×1015

  • 理解本质区别了吗?
    • 啥是本质,还是迷迷糊糊的😶‍🌫️,似乎是还差点,又似乎是还差许多💫。下雪了,开心👻
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/212687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JavaWeb+SSM+Vue助农扶贫微信小程序系统的设计和实现

基于JavaWebSSMVue助农扶贫微信小程序系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图 源码获取入口 Lun文目录 目 录 第一章 绪论 1 1.1 研究背景 1 1.2 研究意义 1 1.3 研究内容 2 第二章 开发环境与技术 3 2.1 JSP技术 3 2.2 MySQL数据库 3 2.3 Java…

基于Solr的全文检索系统的实现与应用

文章目录 一、概念1、什么是Solr2、与Lucene的比较区别1&#xff09;Lucene2&#xff09;Solr 二、Solr的安装与配置1、Solr的下载2、Solr的文件夹结构3、运行环境4、Solr整合tomcat1&#xff09;Solr Home与SolrCore2&#xff09;整合步骤 5、Solr管理后台1&#xff09;Dashbo…

微服务学习:Nacos配置中心

先打开Nacos&#xff08;详见微服务学习&#xff1a;Nacos微服务架构中的服务注册、服务发现和动态配置&Nacos下载&#xff09; 1.环境隔离&#xff1a; 新建命名空间&#xff1a; 记住命名空间ID&#xff1a; c82496fb-237f-47f7-91ed-288a53a63324 再配置 就可达成环…

docker-centos中基于keepalived+niginx模拟主从热备完整过程

文章目录 一、环境准备二、主机1、环境搭建1.1 镜像拉取1.2 创建网桥1.3 启动容器1.4 配置镜像源1.5 下载工具包1.6 下载keepalived1.7 下载nginx 2、配置2.1 配置keepalived2.2 配置nginx2.2.1 查看nginx.conf2.2.2 修改index.html 3、启动3.1 启动nginx3.2 启动keepalived 4、…

【HarmonyOS开发】控件开发过程中,知识点记录

1、问题记录及解决方案 1.1 资源&#xff08;Icon&i18n&#xff09;问题 控件&#xff1a;只有一个JS文件&#xff0c;不会将任何资源型文件&#xff08;图片、字体、默认文字等&#xff09;打包到SO中。因此&#xff0c;当我们开发控件时&#xff0c;需要将需要使用到的资…

【机器学习】042_迁移学习

一、概述、定义 目的&#xff1a; 迁移学习的目的是将某个领域或任务上学习到的模式、知识应用到不同但相关的领域里&#xff0c;获取更多数据&#xff0c;而不必投入许多时间人力来进行数据的标注。 举例&#xff1a; 已经会下中国象棋&#xff0c;就可以类比着来学习国际…

Navicat连接Oracle数据库

Navicat连接Oracle数据库 打开服务里面找到Oracle服务 OracleServerXE或者OracleServerTTL 创建数据库连接 连接名默认自己起 主机选择本地 端口默认 服务名在服务中可以找到输入后缀 用户名默认都是system 密码是创建oracle时候填写的口令 点击测试连接即可

Spring Boot中的事务是如何实现的?懂吗?

SpringBoot中的事务管理&#xff0c;用得好&#xff0c;能确保数据的一致性和完整性&#xff1b;用得不好&#xff0c;可能会给性能带来不小的影响哦。 基本使用 在SpringBoot中&#xff0c;事务的使用非常简洁。首先&#xff0c;得感谢Spring框架提供的Transactional注解&am…

【金融数据分析】计算沪深300指数行业权重分布并用饼图展示

前言 前面的文章我们已经介绍了如何获取沪深300成分股所述行业以及权重的数据&#xff0c;想要了解这部分内容的小伙伴可以阅读上一篇文章 springbootjdbcTemplatesqlite编程示例——以沪深300成分股数据处理为例-CSDN博客 那么有了上文获取的数据&#xff0c;我们实际上可以…

【rabbitMQ】rabbitMQ控制台模拟收发消息

目录 1.新建队列 2.交换机绑定队列 3.查看消息是否到达队列 总结&#xff1a; 1.新建队列 2.交换机绑定队列 点击amq.fonout 3.查看消息是否到达队列 总结&#xff1a; 生产者&#xff08;publisher&#xff09;发送消息&#xff0c;先到达交换机&#xff0c;再到队列&…

期末速成数据库极简版【存储过程】(5)

目录 【7】系统存储过程 【8】用户存储过程——带输出参数的存储过程 创建存储过程 存储过程调用 【9】用户存储过程——不带输出参数的存储过程 【7】系统存储过程 系统存储我们就不做过程讲解用户存储过程会考察一道大题&#xff0c;所以我们把重点放在用户存储过程。…

U4_1 语法分析之自顶向下分析

文章目录 一、定义1、任务2、对比3、方法4、自顶向下面临问题 二、自顶向下分析1、概念2、特点3、二义性问题4、左递归问题1&#xff09;概念2&#xff09;消除3&#xff09;间接左递归 5、回溯问题1&#xff09;概念2&#xff09;消除3&#xff09;解决方法 6、总结 三、递归子…

【Proteus仿真】【51单片机】光照强度检测系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使共阴数码管&#xff0c;PCF8591 ADC模块、光敏传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管显示光传感器采集光照强度值&#xff…

Gitzip插件【Github免翻下载】

今天给大家推荐一个github下载的插件&#xff0c;平常大家下载应该无外乎就是以下两种&#xff1a; Download zip利用git clone 但是这两种各有各的弊端&#xff0c;前者一般需要科学上网才可以&#xff0c;后者下载不稳定经常中途断掉。 今天给推荐一个款浏览器插件-Gitzip.大…

基于SSM的java衣服商城

基于SSM的java衣服商城 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型&#xff1a;Java EE项目 项目名称&#xff1a;基于SSM的美衣商城 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 前端技术&#xff1a;Layui等 后端技术…

Flask和Vue框架实现WebSocket消息通信

1 安装环境 1.1 安装Flask环境 主要的安装包 Flask、Flask-SocketIO&#xff0c;注意Python版本要求3.6 # Flask-SocketIO参考地址 https://flask-socketio.readthedocs.io/en/latest/ https://github.com/miguelgrinberg/flask-socketio更新基础环境 # 更新pip python -m …

以太坊虚拟机EVM介绍,智能合约详解

以太坊为例&#xff1a;什么是智能合约&#xff1f;智能合约怎么部署、调用、执行&#xff1f;智能合约的原理&#xff1f;智能合约存在哪儿&#xff1f;如何区分调用的是智能合约&#xff1f;世界状态数据库、EVM、智能合约它们之间的关系&#xff1f; 什么是智能合约 指的是…

【Hive】启动beeline连接hive报错解决

1、解决报错2、在datagrip上连接hive 1、解决报错 刚开始一直报错&#xff1a;启动不起来 hive-site.xml需要配置hiveserver2相关的 在hive-site.xml文件中添加如下配置信息 <!-- 指定hiveserver2连接的host --> <property><name>hive.server2.thrift.bin…

机器人与3D视觉 Robotics Toolbox Python 二 空间位姿描述

空间位姿描述 二维空间位姿描述 二维空间位姿表示方法 from spatialmath.base import * from spatialmath import * T1 SE2(x3,y3,theta30,unit"deg") trplot2(T1.A,frame"T1",dims[0, 5, 0, 5]) T2transl2(3, 4) trplot2(T2,frame"T2",dims…

如何理解 RPC 远程服务调用?

本文主要讲解 RPC 远程服务调用相关的知识。 RPC 远程服务调用是分布式服务架构的基础&#xff0c;无论微服务设计上层如何发展&#xff0c;讨论服务治理都绕不开远程服务调用&#xff0c;那么如何理解 RPC、有哪些常见的 RPC 框架、实现一款 RPC 框架需要哪些技术呢&#xff…