【析】一类动态车辆路径问题模型和两阶段算法
一类动态车辆路径问题模型和两阶段算法
摘要
针对一类动态车辆路径问题,分析4种主要类型动态信息对传统车辆路径问题的本质影响,将动态车辆路径问题(Dynamic Vehicle Routing Problem, DVRP)转化为多个静态的多车型开放式车辆路径问题(The Fleet Size and Mixed Open Vehicle Routing Problem, FSMOVRP),并进一步转化为多个带能力约束车辆路径问题(Capacitated Vehicle Routing Problem, CVRP),基于CVRP模型建立了DVRP模型;然后,在分析DVRP问题特点基础上,提出两阶段算法,1️⃣第一阶段基于利用K-d trees对配送区域进行分割的策略,提出了复杂度仅为O(nlogn)的快速构建型算法,2️⃣第二阶段通过分析算法搜索解空间结构原理,设计混合局部搜索算法;最后,基于现有12个大规模CVRP标准算例,设计并求解36个DVRP算例.求解结果表明了模型和两阶段算法的有效性。
1. 引言
车辆路径问题(Vehicle Routing Problem, VRP)自1959年Dantzig等[1]提出以来一直受到人们的广泛关注,其研究意义毋庸置疑.随着移动通讯(Global System of Mobile communication, GSM)、电子商务(Electronic Commerce, EC)、全球定位系统(Global Positioning System, GPS)和智能交通系统(Intelligence Transport System, ITS)等技术的发展,物流配送企业能够方便地获取顾客状态、交通路况和任务车辆状态等实时信息.因此,基于传统VRP问题考虑配送中实时信息的动态车辆路径问题(Dynamic Vehicle Routing Problem, DVRP)成为热点研究问题.
由 于 DVRP 问 题 的 理 论 和 实 践 意 义 ,自Psaraftis[2,3]在1988年提出DVRP问题以来,很多学者在该领域做了广泛研究[4],
- 如 Larsen 研究了DVRP 问题的动态程度特征指标的计算方法[5];
- Brotcorne 等研究了急救车的动态调度问题,其主要考虑新客户的在线出现[6];
- 随后研究考虑实时交通 信 息 的 DVRP 学 者 还 有 Taniguchi[7] 和Fleischmann [8].Melachrinoudis 考虑了医疗服务的特殊环境对 DVRP 问题的影响,并构建了相应模型[9].
- 在最近2年里,Khouadjia[10]和Ferrucci[11]分别研究了具有动态客户的 DVRP 问题,并提出了相应的求解策略;
- Albareda-Sambola通过研究验证了将DVRP 按时段分割处理的可行性[12];
Ghannadpour研究了多目标 DVRP 问题[13].
针对 DVRP 问题,部分国内学者也进行了较为广泛的研究,
- 如郭耀煌等在综述当前DVRP研究现状的基础上[14],分别研究了DVRP问题的求解策略[15]和模型[16];
- 刘霞[17]和Hong[18]研究了带时间窗的 DVRP 问题;
- 陈久梅等研究了装卸一体化的 DVRP 问题,并提出了分区求解策略[19].葛显龙研究了联合配送的开放式DVRP问题[20]
综上所述,当前已有部分学者对 DVRP 研究做了较为深入的研究,但当前针对 DVRP 的研究鲜见分析与VRP的本质区别,并且现有求解算法设计强调求解质量,而对算法合并动态事件生成新方案的速度方面考虑较少[4]
.本文通过分析发现,DVRP问题能够转化为多车型开放式车辆路径问题(The Fleet Size and Mixed Open Vehicle RoutingProblem, FSMOVRP),并进一步转化为经典的能力约束 VRP 问题(Capacitated VRP, CVRP).首先,1️⃣基于经典的CVRP模型,建立了DVRP模型.然后,2️⃣基于模型提出一个有效的两阶段算法,3️⃣并通过设计和求解标准DVRP算例验证了本文模型与算法的有效性.
2 问题建模
2.1 问题分析
DVRP 与传统的静态 CVRP 问题的主要区别是,在配送过程中会出现新的信息,本文称为动态事件.动态事件主要存在4种类型,包括:
(1) 新顾客出现;
(2) 老顾客改变需求;
(3) 交通堵塞或中断;
(4) 配送车辆抛锚.
本文研究的 DVRP 问题除了经典 CVRP 中的假设外还包括:
(1️⃣) 如果是执行配送任务,设配送的货物为同质物品,每辆车均满载后开始执行任务;如果是回收任务,每辆车均空车开始执行任务.
(2️⃣) 仅考虑局部交通中断情况(即局部发生严重的交通堵塞或道路管制问题),不考虑大面积的交通瘫痪导致无可行方案的情况.
(3️⃣) 车辆在出现抛锚后,在配送周期内不能够完全修理好.
当任何动态事件发生后,基于原有信息所得到的方案在当前情况下可能质量非常低劣甚至不可行,所以需要结合当前信息,对方案重新优化以及时修正方案.求解该问题关键在于,此时已有部分车辆完成部分配送服务,所在位置已不在配送中心.对于这样的车辆重新优化配送路线,等价于起点(终点)不在配送中心的开放式 VRP(OpenVRP, OVRP)问题,并且由于这些车辆已完成部分配送服务,此时服务能力为车辆所剩货物量,因此等 价 于 多 车 型 OVRP 问 题 (The Fleet Size andMixed OVRP, FSMOVRP).FSMOVRP 问题可以进一步转化为CVRP问题,将不在配送中心的车辆起点或终点虚拟为一个顾客,且需求量为当前最大车载量 Q 与当前车型载量之差,并将该虚拟顾客设定为必须第一个(最后一个)接受服务的顾客.如图1(a)、图1 (b)所示为出现新顾客后的一个DVRP问题,转化为一个CVRP问题示意图.
a图是动态的车辆路径问题,b图是静态的有能力约束的车辆路径问题
在a图中,车辆1行驶到黑点的位置,并且经过(红线)了两个节点,按照原来的计划回经过(蓝线)后面两个节点,此时出现了新的请求(黄圈)。把这个问题改建为CVRP,如b图所示,
- 车辆经过的路线的改进
- 将车辆位置抽象为一个虚拟客户,
- 其需求量=车的最大容载量-当前车型的载量
- 约定为第一个(或最后一个)
- 新客户的加入
- 可能在原来的计划路线(蓝线)中直接添加客户
- 可能对未服务的节点进行重新规划路线(车辆2计划中额外增加了3个节点,则新增车辆3,与车辆3一起)
同理,对于出现尚未服务的老顾客改变需求和车辆出现抛锚时,通过更新当前尚未服务的顾客可以做类似处理.而当出现交通中断时,相当于求解一个更新顾客间行驶成本后的CVRP问题,在此不再赘述.因此 DVRP 可以转化分解为多CVRP问题。
2.2 数学模型
由以上分析得到,DVRP 可以分解为 (s + 1) 个CVRP问题,可得 DVRP 在时刻点 EventTimei 下的数学规划模型为
- 式(1)为总行程最小目标;
- 式(2)和式(3)为车载量与行驶距离约束;
- 式(4)和式(5)为计划从配送中心派送车辆的载量与行驶距离约束;
- 式(6)和式(7)表示每个客户恰好仅被 1 辆车服务;
- 式(8)约束了所有车辆的起终点都在配送中心;
- 式(9)表示每辆车行驶的路径轨迹恰好为一个简单圈;
- 式(10)为变量含义和取值;
- 式(11)约束每辆正在执行任务的车辆必须首先服务当前所在位置对应的虚拟顾客,以使配送的路径为简单圈从而由FSMOVRP转化为CVRP问题.
- 式(12)表示动态事件发生的时刻点在配送周期之内,且呈时间序列状态.
3 两阶段算法
根据上述建模思想,求解该模型的最大挑战在于对算法速度有非常高的要求.因为,当动态事件发生的比较频繁时,就要求算法能够在短时间内求解问题.本文设计了一个两阶段算法:改进贪婪算法和混合大邻域算法.采用该两阶段算法求解 DVRP的流程图,如图2所示,
如图2图 2 所示,本文求解 DVRP 问题基于“先完
成后完善”的思想.
1️⃣首先采用改进贪婪算法结合新的信息,快速生成一个质量满意的方案;
2️⃣然后充分利用下一个动态事件出现之前的这段时间,采用混合大邻域算法继续改进当前车辆的计划行驶路线;
3️⃣最后,当出现下一个动态事件后再重复这一过程,直到配送过程结束.
3.1 改进贪婪算法
经典贪婪算法(Greedy, GR)求解过程中初期效果非常好,但构造后期会导致质量迅速下降.另外,GR 要求对任意2个顾客形成的距离从小到大排序,那么相当于对 n(n - 1)/2 条边排序,根据排序算法 GR 算法的复杂度至少为 O(n2 log n) ,该复杂度会随着n的增加而迅速增加.本文提出2个分别提高 GR 求解质量和求解速度的策略,得到改进 GR (Improved GR, IMGR).
IMGR 提高质量策略的思想是,让离配送中心较远的边更短,而离配送中心较近的边更长,从而GR将会优先连接离配送中心较远的点,使贪婪算法构造后期质量改进从而提高整体算法的质量;提高速度的策略是,据GR运算原理,其主要计算量为求最邻近点计算,并且实际物流配送中,两点间的路网距离和直线距离高度相关.在此,我们采用K-d trees(K-dimensional binary search trees)法近似求解区域中的最邻近点,本文将配送区域作为2维平面,因此 K = 2 ,其详细执行原理参照Bentley的文献[21].该算法的性能在求解大规模CVRP问题中已得到验证,结合K-d trees的IMGR的求解复杂度仅为 O(nlogn) ,并且求解世界上顾客数量达到20 000的规模最大标准算例的求解质量与理论最优解的偏差仅为5.18%[22]
3.2 混合大邻域算法
通 过 文 献 [23] 研 究 旅 行 商 问 题 (TravelingSalesman Problem, TSP)的求解算法发现,当算法搜索解空间结构(问题解空间中的可行解为节点,互为邻域的可行解之间存在边)类似于小世界网络时,其对应的算法求解质量更优,且只具有某一特定算法规则的算法,其解空间结构更类似于规则网络.
由于 TSP 是 CVRP 的子问题,因此其上述结论对 CVRP 具有一定借鉴意义.根据复杂网络理论可知,多个规则网络混合后得到的网络会更类似于小世界网络[24].因此,多个特定算法规则进行合理混合,就可能得到有效的算法.基于该思想,本文采用改进 CVRP 问题解的 4 种车辆路径间基本规则(Swap、Exchange、Cross-Exchange 和 Inter-relocate)和4种车辆路径中规则(2-opt、Lin-Kernighan、Intrarelocate 和 Or- opt),设计了一个混合大邻域算法(Hybrid Large Neighborhood Algorithm, HLNA),其求解规则伪代码如图3所示.
4 算例设计与求解
4.1 算例设计
为了测试本文提出模型和算法的有效性,本文以当前世界上最大的12个CVRP算例[25]为数据基础,按照动态程度δ分别为0.25、0.50和0.75构造36个大规模动态车辆路径问题标准算例,算例中相关参数设定如表1所示.
需要注意的是本文设计的标准算例中只考虑了新顾客出现,其主要原因是
(1) 后 三 种 动 态 事 件 与 当 前 执 行 方 案 密切 相 关 ;
(2)后三种动态事件发生后,根据本文模型也均可以转化为CVRP问题,故在此设计的算例不影响测试本文算法的性能.
表1中设新顾客在整个配送周期中按标号升序方式均匀地出现.
4.2 算例求解
为了对比分析单独使用IMGR(参数α=0.70)和IMGR+HLNA(参数p=0.05)联合使用的效果,本文分别用该两种方式求解在4.1节设计的36大规模
动态车辆路径问题的标准算例,求解环境:StudioVisual C++6.0;CPU 为 Inter® core ™ Q9400,内存为 4.0G,主频为 2.66GHz,其求解质量如表 2所示,求解总耗时如表3所示,需要注意的是,求解质量为求解路径长度与对应静态算例已知最优解的偏差.
由求解结果可知,对于规模相同的算例,动态程度越大IMGR与IMGR+HLNA的求解质量会越差.并且相比较而言,IMGR+HLNA的求解质量要优于IMGR,通过对比表2所示的不同算例相邻动态事件间隔可以发现,动态事件发生的越频繁,IMGR+HLNA 的求解质量优势越不明显,这是因为用于HLNA进一步改进的时间非常紧迫.由上述求解质量结果可以得到以下启示:
- HLNA是元启发式算法,需要更充足的运行时间才能保证改进IMGR的求解结果,当运行时间非常有限时(不足 60 s),IMGR+HLNA 与 IMGR几乎有类似的求解结果.
- IMGR+HLNA 在时间紧迫的情况下对于有些算例的求解质量甚至略低于IMGR(如DVRPLi14400动态程度δ=0.75时),这说明在动态车辆路径算例中,当前更优的求解结果并不一定会导致最终形成的解质量更高.
由表3所示的 IMGR 和 IMGR+HLNA 的求解总时间可知,IMGR 远远少于 IMGR+HLNA 的求解时间.这是因为 IMGR+HLNA 为了在动态事件未出现时,充分利用 HLNA 不断优化当前未执行的计划配送路线,使 HLNA 在整个配送周期T=10 h=36 000 s中一直处于运行状态.
总体来说,IMGR能够快速地应对动态事件,生成新的方案,且当动态事件出现非常频繁时IMGR 与 IMGR+HLNA 有类似求解质量,但当动态事件出现时间间隔超过1 min时,IMGR+HLNA求解质量明显优于IMGR.
5 研究结论
本文分析了 DVRP 问题中 4 种主要不同类型动态事件对优化问题本质的影响,通过分析得到DVRP问题可以转化为多个FSMOVRP问题,并进一步转化为 CVRP 问题,基于分析结论建立了DVRP 模型.基于先完成后完善的思想,提出了一个由复杂度仅为 O(nlogn) 的 IMGR 和 HLNA 构成的两阶段算法.为了验证本文提出的模型和算法的有效性,基于 12 个当前世界上最大的 CVRP 问题的标准算例,设计了36个DVRP算例,通过求解发现,本文提出的两阶段算法能够在合理时间内,求解动态程度较高的大规模的DVRP问题.
相关文章:

【析】一类动态车辆路径问题模型和两阶段算法
一类动态车辆路径问题模型和两阶段算法 摘要 针对一类动态车辆路径问题,分析4种主要类型动态信息对传统车辆路径问题的本质影响,将动态车辆路径问题(Dynamic Vehicle Routing Problem, DVRP)转化为多个静态的多车型开放式车辆路径问题(The Fleet Size a…...
从基础入门到学穿C++
前言知识 C简介 C是一门什么样的语言,它与C语言有着什么样的关系? C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解…...
代码随想录算法训练营第二十四天|leetcode78、90、93题
一、leetcode第93题 class Solution { public:vector<string> restoreIpAddresses(string s) {int n s.size();vector<string> res;function<void(string, int, int)> dfs [&](string ss, int idx, int t) -> void {// 终止条件,枚举完&…...
Java学习笔记NO.20
Java流程控制 1. 用户交互 Scanner Java中的Scanner类用于获取用户输入,可以从标准输入(键盘)读取各种类型的数据。 import java.util.Scanner; public class UserInputExample { public static void main(String[] args) { Scanner sc…...

关系型数据库mysql(1)基础认知和安装
目录 一.数据库的基本概念 1.1数据 1.2表 1.3数据库 1.4 DBMS 数据库管理系统 1.4.1基本功能 1.4.2优点 1.4.3DBMS的工作模式 二.数据库的发展历史 2.1发展的三个阶段 第一代数据库 第二代数据库 第三代数据库 2.2mysql发展历史 三.主流数据库 四.关系型数据库和…...

WanAndroid(鸿蒙版)开发的第三篇
前言 DevEco Studio版本:4.0.0.600 WanAndroid的API链接:玩Android 开放API-玩Android - wanandroid.com 其他篇文章参考: 1、WanAndroid(鸿蒙版)开发的第一篇 2、WanAndroid(鸿蒙版)开发的第二篇 3、WanAndroid(鸿蒙版)开发的第三篇 …...

全国农产品价格分析预测可视化系统设计与实现
全国农产品价格分析预测可视化系统设计与实现 【摘要】在当今信息化社会,数据的可视化已成为决策和分析的重要工具。尤其是在农业领域,了解和预测农产品价格趋势对于农民、政府和相关企业都至关重要。为了满足这一需求,设计并实现了全国农产…...

堆排序(数据结构)
本期讲解堆排序的实现 —————————————————————— 1. 堆排序 堆排序即利用堆的思想来进行排序,总共分为两个步骤: 1. 建堆 • 升序:建大堆 • 降序:建小堆 2. 利用堆删除思想来进行排序. 建堆和堆删…...

使用DMA方式控制串口
本身DMA没什么问题,但是最后用GPIOB点灯,就是点不亮。 回到原来GPIO点灯程序,使用GPIOB就是不亮,替换为GPIOA就可以,简单问题总是卡得很伤。...

ModbusTCP转Profinet网关高低字节交换切换
背景:在现场设备与设备通迅之间通常涉及到从一种字节序(大端或小端)转换到另一种字节序。大端字节序是指高位字节存储在高地址处,而小端字节序是指低位字节存储在低地址处。在不动原有程序而又不想或不能添加程序下可选用ModbusTC…...

OpenvSwitch VXLAN 隧道实验
OpenvSwitch VXLAN 隧道实验 最近在了解 openstack 网络,下面基于ubuntu虚拟机安装OpenvSwitch,测试vxlan的基本配置。 节点信息: 主机名IP地址OS网卡node1192.168.95.11Ubuntu 22.04ens33node2192.168.95.12Ubuntu 22.04ens33 网卡信息&…...
GPT能复制人类的决策和直觉吗?
GPT-3能否复制人类的决策和直觉? 近年来,像GPT-3这样的神经网络取得了显著进步,生成的文本几乎与人类写作内容难以区分。令人惊讶的是,GPT-3在解决数学问题和编程任务方面也表现出色。这一显著进步引发了一个问题:GPT…...

权限设计种类【RBAC、ABAC】
ACL 模型:访问控制列表 DAC 模型:自主访问控制 MAC 模型:强制访问控制 ABAC 模型:基于属性的访问控制 RBAC 模型:基于角色的权限访问控制 一、简介前三种模型: 1.1 ACL(Access Control L…...
C语言经典面试题目(十九)
1、什么是C语言?简要介绍一下其历史和特点。 C语言是一种通用的高级计算机编程语言,最初由贝尔实验室的Dennis Ritchie在1972年至1973年间设计和实现。C语言被广泛应用于系统编程、应用程序开发、嵌入式系统和操作系统等领域。它具有高效、灵活、可移植…...
VSCode 远程调试C++程序打开/dev/tty设备失败的问题记录
概述 因为需要协助同事调试rtklib中的rtkrcv程序,一直调试程序都是用了vscode,这次也不例外,但是在调试过程中,发现程序在打开当前终端(/dev/tty)的时候,总是打开失败,返回的错误原因是“No such device o…...

亮相AWE 2024,日立中央空调打造定制空气新体验
日立中央空调于3月14日携旗下空气定制全新成果,亮相2024中国家电及消费电子博览会(简称AWE 2024)现场,围绕“科创先行 智引未来”这一主题,通过技术与产品向行业与消费者,展现自身对于家居空气的理解。 展会…...
KY61 放苹果(用Java实现)
描述 把 M 个同样的苹果放在 N 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? 注意:5、1、1 和 1、5、1 是同一种分法,即顺序无关。 输入描述: 输入包含多组数据。 每组数据包含两个正整…...

原型模式(Clone)——创建型模式
原型模式(clone)——创建型模式 什么是原型模式? 原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需依赖它们所属的类。 总结:需要在继承体系下,实现一个clone接口,在这个方法中以本身作为拷…...

<.Net>VisaulStudio2022下用VB.net实现socket与汇川PLC进行通讯案例(Eazy521)
前言 此前,我写过一个VB.net环境下与西门子PLC通讯案例的博文: VisaulStudio2022下用VB.net实现socket与西门子PLC进行通讯案例(优化版) 最近项目上会用到汇川PLC比较多,正好有个项目有上位机通讯需求,于是…...

漫途桥梁结构安全监测方案,护航桥梁安全!
桥梁作为城市生命线的重要组成部分,承载着城市交通、物流输送、应急救援等重要职能。然而,随着我国社会经济的飞速发展,桥梁所承载的交通流量逐年增长,其安全性所面临的挑战亦日益严峻。例如恶劣的外部环境、沉重的荷载以及长期使…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...