Routing路径系列数学建模(TSP+CVRP)

2023-09-16 16:40:43

1.Traveling Salesperson Problem(TSP)

参考:维基百科TSP

 给定一些城市和城市之间的距离,找到最短路径,经过每个城市最后返回起点,组合优化问题中属于NP-hard难度。对于TSP问题有两类混合整数规划模型:Miller–Tucker–Zemlin (MTZ)形式和Dantzig–Fulkerson–Johnson (DFJ)形式,DFJ模型更好,但是在某些特定条件下,MTZ模型仍然有用。两类模型有一些通用的符号。

     上述模型不能保证解中不出现子回路,我们只需要得到一个经过所有点的回路,有以下两种方式消除子回路。

  • Miller–Tucker–Zemlin formulation(MTZ)

  • Dantzig–Fulkerson–Johnson formulation(DFJ) 

 两种形式的完整数学模型如下:

2.Vehicle Routing Problem(VRP)

参考:维基百科VRP

为了向一组给定的客户交付货物,车队要经过的最佳路线集是什么?这是TSP问题的扩展

目标函数:

  • 最小化全局运输成本和固定成本
  • 最小化使用的车辆
  • 最小化行驶时间和车辆负载的方差
  • 最小化低服务质量的惩罚
  • 最大化利润

VRP变种:

  • Vehicle Routing Problem with Profits (VRPP):带有利润的车辆路径规划问题。与标准VRP不同,它允许车辆不必访问所有的顾客点,而是要在限定的时间内访问尽可能多的顾客以最大化利润。车辆需要从仓库出发,访问顾客,然后返回仓库,同时需要在每辆车的行驶时间内完成任务。具体问题包括Team Orienteering Problem (TOP),Capacitated Team Orienteering Problem (CTOP),TOP with Time Windows (TOPTW)等
  • Vehicle Routing Problem with Pickup and Delivery (VRPPD):具有提货和交付的车辆路径规划问题。有一组车辆需要从仓库或起始点出发,分别访问一系列提货地点以收集货物,然后将货物交付到相应的交付地点,最终返回仓库或结束点。问题的目标通常是最小化总行驶距离、时间或成本,或者在满足一定的约束条件下,找到一组最佳的路线方案。
  • Capacitated Vehicle Routing Problem (CVRP):容量限制车辆路径规划问题。在CVRP中,每辆车辆都有一个限定的最大携带容量
  • Vehicle Routing Problem with Time Windows (VRPTW):带有时间窗口的车辆路径规划问题。在VRPTW中必须在每个配送地点的时间窗口内完成配送。时间窗口表示了在一定的时间范围内必须到达每个客户或配送地点,以满足客户的需求。
  • Vehicle Routing Problem with LIFO:带有LIFO(Last-In-First-Out)规则的车辆路径规划问题。在每个交付地点,要交付的货物必须是最近提取的货物。换句话说,车辆遵循LIFO规则,最后提取的货物必须首先被交付。这个规则的主要目的是减少在交付地点的装卸时间,因为不需要临时卸载除了应该被交付的货物之外的其他货物。
  • Vehicle Routing Problem with Multiple Trips (VRPMT):具有多次行程的车辆路径规划问题。车辆具有更大的灵活性,可以执行多个行程,即在一次任务执行后返回仓库,然后重新出发执行另一个任务。
  • Open Vehicle Routing Problem (OVRP):开放车辆路径规划问题。车辆不要求返回到起始点或仓库。
  • Multi-Depot Vehicle Routing Problem (MDVRP):多仓库车辆路径规划问题。存在多个仓库,每个仓库都可以作为车辆的起始点和结束点。这意味着不同的车辆可以从不同的仓库出发,执行任务后返回到同一仓库或不同的仓库。

2.1 CVRP

参考:Comparison between LP bound of the Two-Index and the Three-Index Vehicle Flow Formulation for the Capacitated Vehicle Routing Problem

​​​​​​​CVPR有两种建模方式:two-Index Vehicle Flow Formulation 和  three-Index Vehicle Flow Formulation,区别在于决策变量的索引数

2.1.1 two-Index Vehicle Flow Formulation

该模型中变量数为\frac{n(n+1)}{2}n+1个等式,2^{n}-1个不等式,共2^{n}+n个约束

2.1.2 three-Index Vehicle Flow For- mulation

 

更多推荐

Vue记录(上篇)

Helloworld案例<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><title>初识Vue</title><!--引入Vue--><scripttype="text/javascript"src="./vue.js"></script><scr

linux-checklist命令行

常用的linux命令行:首先打开终端,可用Ctrl+Alt+T快捷键打开.1.一些简单的命令下面是一些常用的简单命令:日期date//显示当前时间cal//显示日历(一般是一整个月)磁盘df//查看磁盘剩余空间free//显示空闲内存数量结束终端exit幕后控制台幕后控制台是和终端仿真器环境相同,不过外表不太美观,在不

图像处理之频域滤波DFT

摘要:傅里叶变换可以将任何满足相应数学条件的信号转换为不同系数的简单正弦和余弦函数的和。图像信号也是一种信号,只不过是二维离散信号,通过傅里叶变换对图像进行变换可以图像存空域转换为频域进行更多的处理。本文主要简要描述傅里叶变换以及其在图像处理中的简单应用,并进行一些简单的实验来描述其相关性质。关键字:傅里叶变换,二维傅

JavaScript学习笔记03

JavaScript笔记03流程控制if判断和Java中if语句的使用方法相同。例:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><script>"usestrict";letscore=90;if(score==

11、Kubernetes核心技术 - Service

目录一、概述二、Endpoint三、Service资源清单四、Service类型4.1、ClusterIP4.2、NodePort4.3、LoadBalancer4.4、ExternalName五、Service使用5.1、ClusterIP5.1.1、定义Pod资源清单5.1.2、创建Pod5.1.3、定义Servi

【从零学习python 】74. UDP网络程序:端口问题与绑定信息详解

文章目录udp网络程序-端口问题UDP绑定信息总结进阶案例udp网络程序-端口问题在运行UDP网络程序时,会遇到端口号会变化的情况。每次重新运行网络程序后,可以观察到运行中的“网络调试助手”显示的数字是不同的。这是因为该数字标识了网络程序的唯一性,系统在重新运行时会随机分配端口号。需要注意的是,在网络程序运行过程中,该

如何从市场上几千只股票中快速选出满意的股票

个人账户实现股票量化程序化自动交易,券商有接口,门槛已降低_股票程序交易接口的博客-CSDN博客像上面的例子,如果按照市面上常见的可转债万3或万2不免5,人工操作+费率限制,这种情况就不要想,根本没机会,有了自动交易这把利器,再加python强大的支持库,能发挥的想像空间实在太大了,目前来看,机会是有,但后期用程序交易

【计算机网络 - 自顶向下方法】计算机网络和因特网

目录1.WhatistheInternet?1.1因特网的具体构成1.2因特网的功能2.Networkcore2.1基本介绍2.2分组交换2.2.1序列化时延2.2.2排队延迟和丢包2.2.3分组交换的优缺点2.3电路交换2.3.1基本概念2.3.2电路交换网络中的复用2.3.3电路交换文件传输时间2.3.4分组交换与

SpringBoot整合Redis,基于Jedis实现redis各种操作

前言(三步教你学会redis,主打一个实用)springboot整合redis步骤,并基于jedis对redis数据库进行相关操作,最后分享非常好用、功能非常全的redis工具类。第一步:导入maven依赖<!--springboot整合redis--><dependency><groupId>org.springfr

C++11的半同步半异步线程池

C++11的半同步半异步线程池简介同步队列Take函数Add函数Stop函数SyncQueue完整代码线程池主函数测试简介半同步半异步线程池用的比较多,实现也比较简单。其中同步层包括同步服务层和排队层,指的是将接收的任务排队,将所有的任务排队到一个队列中,等待处理;异步层指多个线程处理任务,异步处理层从同步层取出任务,

shell编程之循环

循环是当循环控制条件为真时,一系列命令迭代执行的代码块。1、for循环语法:forargin[list]这是shell中最基本的循环结构,它与C语言形式的循环有着明显的不同。forargin[list]docommand(s)...done在循环的过程中,arg会从list中连续获得每一个变量的值。forargin"$

热文推荐