访问【WRITE-BUG数字空间】_[内附完整源码和文档]

车辆路径规划问题(VRP)是运筹优化领域最经典的优化问题之一。在此问题中,有若干个客户对某种货物有一定量的需求,车辆可以从仓库取货之后配送到客户手中。客户点与仓库点组成了一个配送网络,车辆可以在此网络中移动从而完成配送任务。在求解此问题过程中,需要优化的决策变量为每个客户的配送任务应该分配到哪一辆车上,以及每辆车完成客户配送任务的先后顺序,优化目标为最小化车辆总行驶距离和使用的车辆数。

一、实验要求
复现以下论文的方法和结果:
Duan,L., Zhan,Y., Hu,H., Gong,Y., Wei,J., Zhang,X., Xu,Y.: Efficiently solving the practical vehicle routing problem: A novel joint learning approach. In: KDD. pp.3054–3063 (2020)
1.为了节省时间,训练用 10 个(或以上)的城市规模的算例。测试算例用 20 个(或者以上)规模。
2.显示出算法训练收敛过程,可视化最后的解。可能的情况下,对比 OR-Tools 的求解效果(后面详细描述)。
二、导言
车辆路径规划问题(VRP)是运筹优化领域最经典的优化问题之一。在此问题中,有若干个客户对某种货物有一定量的需求,车辆可以从仓库取货之后配送到客户手中。客户点与仓库点组成了一个配送网络,车辆可以在此网络中移动从而完成配送任务。在求解此问题过程中,需要优化的决策变量为每个客户的配送任务应该分配到哪一辆车上,以及每辆车完成客户配送任务的先后顺序,优化目标为最小化车辆总行驶距离和使用的车辆数。

故核心优化的目标为车辆总的固定成本 + 运输成本,VRP 问题最简单的形式就是使车辆具有容量的约束(装载量有限)。每辆车从给定的节点出发和返回,优化的目标就是车辆相关费用和配送距离的函数。目前的研究工作分为两个流派:一种是通过运筹学,另一种是深度学习。运筹学的方法是把 VRP 定义为数学优化问题,通过精确或启发式算法达到最优或者近似最优解,但是真实场景的数据量下需要花费的时间很多。而对于深度学习,之前的研究是在人工生成的数据集上,忽略了真实世界的运输网络。在真实 VRP 问题数据集上,没有一个方法能比得上 OR-tools,于是便想着提出一种新的方法。

三、算法流程
这里主要是将论文中的算法结合我自己的理解再描述一遍
Problem Setup: Graph Optimization Perspective
首先从图优化的视角来形式化的描述以下 VRP 问题。 一个 VRP 实例,可以看做一张图 G = ( V , E ) G=(V, E) G=(V,E) ,其中顶点集合: V = 0 , … , n V={0, \ldots, n} V=0,…,n, 其中 i = 0 i=0 i=0 表示 depot, i = 1 , … , n i=1, \ldots, n i=1,…,n 表示客户,边集合: KaTeX parse error: Expected '}', got '\right' at position 22: …E=\left{e_{i j}\̲r̲i̲g̲h̲t̲}, i, j \in V。

depot 节点只有坐标特征 x 0 c x_{0}^{c} x0c​ ,而其他客户节点有坐标特征和需求量特征,因此是一个二维特征向量 KaTeX parse error: Expected '}', got '\right' at position 33: …^{c}, x_{i}^{d}\̲r̲i̲g̲h̲t̲},其中$ x_{i}^{c}, x_{i}^{d}$ 分别是坐标特征和需求量特征。每条边关联两个节点之间的距离为 m i j m_{i j} mij​ 。

假设有: VRP 是生成一个 tour 集合,每个 tour 代表了一个车辆的路径,从节点 0 出发,在节点 0 结束,每个客户被服务一次且仅一次,每辆车的负载不超过它本身的容量,目标是最小化总体花费。

那么,模型的目标是生成一个客户的序列: π = ( π 1 , π 2 , π 3 , … , π T ) \pi=\left(\pi_{1}, \pi_{2}, \pi_{3}, \ldots, \pi_{T}\right) π=(π1​,π2​,π3​,…,πT​) 其中, π t ∈ 0 , 1 , … , n \pi_{t} \in{0,1, \ldots, n} πt​∈0,1,…,n, 并且 π 0 \pi_{0} π0​ 可以出现多次,其他节点只能出现一次。因此,每两个 π 0 \pi_{0} π0​ 之间的序列就是一辆车的路线。

图神经网络+强化学习相关推荐

  1. 基于图神经网络强化学习解决车辆路径规划问题

    一.实验要求 复现以下论文的方法和结果: Duan,L., Zhan,Y., Hu,H., Gong,Y., Wei,J., Zhang,X., Xu,Y.: Efficiently solving ...

  2. 【图神经网络】图神经网络(GNN)学习笔记:图分类

    图神经网络GNN学习笔记:图分类 1. 基于全局池化的图分类 2. 基于层次化池化的图分类 2.1 基于图坍缩的池化机制 1 图坍缩 2 DIFFPOOL 3. EigenPooling 2.2 基于 ...

  3. 【图神经网络】图神经网络(GNN)学习笔记:基于GNN的图表示学习

    图神经网络GNN学习笔记:基于GNN的图表示学习 1. 图表示学习 2. 基于GNN的图表示学习 2.1 基于重构损失的GNN 2.2 基于对比损失的GNN 参考资料 本文主要就基于GNN的无监督图表 ...

  4. 【图神经网络】图神经网络(GNN)学习笔记:图的基础理论

    图神经网络GNN学习笔记:图的基础理论 1. 图的概述 2.图的基本类型 2.1 有向图和无向图 2.2 非加权图与加权图 2.3 连通图与非连通图 2.4 二部图 2.5 邻居和度 2.6 子图和路 ...

  5. 【图神经网络】图神经网络(GNN)学习笔记:GNN的通用框架

    图神经网络GNN学习笔记:GNN的通用框架 1. MPNN 2. NLNN 3. GN 参考资料 所谓通用框架,是对多种变体GNN网络结构的一般化总结,也是GNN编程的通用范式,这里介绍3类通用框架: ...

  6. PyG图神经网络框架学习--示例介绍

    实例介绍 通过自带的示例介绍并学习PyG.主要从以下4各方面: 图数据处理 通用基准数据集 Mini-batches 数据转换 图学习方法 图数据处理 图用于对对象(节点)之前的关系(边)进行建模.P ...

  7. 【图神经网络】图神经网络(GNN)学习笔记:GNN的应用简介

    @TOC GNN的应用简述 GNN的适用范围非常广泛: 显式关联结构的数据:药物分子.电路网络等 隐式关联结构的数据:图像.文本等 生物化学领域中:分子指纹识别.药物分子设计.疾病分类等 交通领域中: ...

  8. 多智能体强化学习入门(八)——图卷积强化学习DGN

    GRAPH CONVOLUTIONAL REINFORCEMENT LEARNING 文章在https://zhuanlan.zhihu.com/p/143816617

  9. 详解机器学习的凸优化、图神经网络、强化学习、贝叶斯方法等四大主题

    AI是一门入门简单,但想深入却很难的学科,这也是为什么AI高端人才一直非常紧缺的重要原因.在AI领域技术领域,我们可以说机器学习功底决定了一个人的上限也不为过.为什么?机器学习就像物理学中的数学,如果 ...

最新文章

  1. BufferedReader和PrintWriter读写中文的问题
  2. linux更换网卡不识别_详解Linux双网卡绑定脚本的方法示例
  3. layui日期与vue_详解Vue.js和layui日期控件冲突问题解决办法
  4. javascript高程3 学习笔记(三)
  5. 浅谈ASP.NET的内部机制(二)
  6. 自己的HTML5 播放器
  7. cmd 生成wsdl文件_Spring Boot SOAP系列之WSDL是什么“Lese”
  8. JEB动态调试debug模式
  9. python3--输入厘米转为英寸英寸
  10. otl mysql 下载_OTL mySQL
  11. C语言驾校管理系统,驾校网站查询系统
  12. 读后感:《走出软件作坊》51:幽幽一缕香
  13. 中小软件企业管理存在的问题
  14. RxJS笔记(一)概览
  15. 二维码的接口开发(从入门到使用)
  16. 2022-2027年中国文化纸行业市场深度分析及投资战略规划报告
  17. Thymeleaf 内置对象和内置方法
  18. Vivado 常见Warning问题解决方法说明
  19. 融e学 一个专注于重构知识,培养复合型人才的平台【获取考试答案_破解】
  20. 亚马逊国际获得AMAZON商品详情 关键字搜索API 调用案例分享

热门文章

  1. word 2010页眉页码从第三页开始设置
  2. 常见排序算法总结—Java实现
  3. java ftpclient quit_ftp中ftpClient类的API
  4. YOLOv5_obb-master No module named nms_rotated_ext问题解决
  5. 微信公众号配置JAVA
  6. python(pickle):序列化 、反序列化 --- pickle.dump() / pickle.dumps() / pickle.load() / pickle.loads()的使用
  7. 8583报文解析1.0
  8. java8583报文解析及生成,粗略理解
  9. 线性表顺序存储结构的优缺点
  10. java构造方法的定义与作用