【修改ing】基于pyscipopt库求解带时间窗车辆路径问题VRPTW

2024-04-11 10:28

本文主要是介绍【修改ing】基于pyscipopt库求解带时间窗车辆路径问题VRPTW,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. 问题定义
  • 2. VRPTW 数学模型
    • 2.1 决策变量
    • 2.2 约束条件
    • 2.3 目标函数


本文章启发于 南军Opt 的相关文章,模型引自 Guy Desaulniers 等人的《Column Generation》,具体将会对已有模型和程序进行详细介绍和扩展。

1. 问题定义

前面我们介绍了带容量限制的车辆路径问题(Capacitated vehicle routing problem, CVRP),在CVRP的基础上,限制车辆到达各个客户点的时间范围,即客户点的时间窗,它限制了车辆到达该客户点的最早和最晚时间,称为带时间窗的车辆路径问题(Vehicle routing with time windows, VRPTW),该时间维度上的约束条件使得车辆的运输方案要考虑在途时间和到达时间之间的关系,极大地增加了模型的复杂性,该约束是VRP问题的典型约束。

处理时间窗的方式很简单,但都需要定义车辆到达客户点的时间变量,通过约束该时间变量的范围,实现时间窗约束,而车辆到达每个客户点的时间具有相互依赖关系,在同一车辆路线上的前后节点的到达时间相距时间不小于节点间的转运时间。时间窗约束的常见分类有两种:

  • 硬时间窗:即车辆到达客户点的时间必须在指定的时间窗内,提前到达则在客户点处等待,而晚于时间窗到达则不被允许(方案不可行);
  • 软时间窗:即车辆到达客户点的时间应尽量在指定时间窗范围内,如果不在指定时间窗范围内则会进行一定的惩罚,一般而言,晚于时间窗到达会有一个较大的惩罚系数,而早于时间窗到达是否惩罚则需要进行一定的声明。

2. VRPTW 数学模型

VRPTW 模型常常建立为多商品网络流模型(multi-commodity network flow model)的形式 ,在一定目标下考虑商品流量在网络结构中的流动。具体到 VRPTW 问题的数学模型,则引用参考教材《Column Generation》的第三章节,其中的时间窗约束为硬约束。

2.1 决策变量

根据 VRPTW 问题的描述可知,我们需要直接决策的变量是派那一辆车去配送哪一段的路线,而简介的变量则是车辆到达某个客户点的到达时间,需要限制在一定范围内。变量以及参数如下:

  • 模型决策变量:
    1. x i j k x_{ijk} xijk 布尔变量,车辆 k k k 是否负责节点 i i i 和节点 j j j 之间的直接配送,若是则取值为 1 1 1,否则取值为 0 0 0
    2. s i k s_{ik} sik 连续型变量,表示车辆 k k k 到达节点 i i i 的时间。由于这里出现了相当于车辆分配的问题,即节点 i i i 是否是由车辆 k k k 配送,在优化结果出来之前并不知道,因此有个关键问题是,既然我们要对所有的节点和车辆对建立变量,那如果节点 i ′ i' i 不是由车辆 k ′ k' k 配送的, s i ′ k ′ s_{i'k'} sik 的值应该取什么?不同的约束写法是否会对目标有影响? 这个问题后文会进行解答。

这个问题具体得结合目标函数考虑(一般情况下,不同的约束形式只要不影响最终目标值,则认为模型是等价的)。

The inequalities (3.7) establish the relationship between the vehicle departure time from a customer and its immediate successor.
不等式(3.7)建立了车辆从顾客出发时间与其直接后继车辆出发时间之间的关系。
Finally constraints (3.8) affirm that the time windows are observed, and (3.9) are the integrality constraints.
最后,约束(3.8)确认时间窗被观察到,(3.9)是完整性约束。
Note that an unused vehicle is modeled by driving the “empty” route (0, n +1).
请注意,未使用的车辆通过行驶“空”路线(0,n +1)来建模。

2.2 约束条件

The constraints (3.2) ensure that each customer is visited exactly once, and (3.3) state that a vehicle can only be loaded up to it’s capacity.
约束条件(3.2)确保每个客户只访问一次,并且(3.3)规定车辆只能装载到其容量。
Next, equations (3.4), (3.5) and (3.6) indicate that each vehicle must leave the depot O;
由式(3.4)、(3.5)和式(3.6)可知,每辆车必须离开O站;
after a vehicle arrives at a customer it has to leave for another destination;
车辆到达客户处后,必须离开前往另一个目的地;
and finally, all vehicles must arrive at the depot n +1.
最后,所有车辆必须到达仓库n +1。

2.3 目标函数

The objective function (3.1) minimizes the total travel cost.
目标函数(3.1)使总旅行成本最小化。

这篇关于【修改ing】基于pyscipopt库求解带时间窗车辆路径问题VRPTW的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/893814

相关文章

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例