世界冠军之路:菜鸟车辆路径规划求解引擎研发历程

阿里妹导读:车辆路径规划问题(Vehicle Routing Problem, VRP)是物流领域最经典的优化问题之一,具有极大的学术研究意义和实际应用价值。菜鸟网络高级算法专家胡浩源带领仓配智能化算法团队经过两年的研发,逐步沉淀出了一套完善、强大的车辆路径规划求解引擎,为菜鸟内外部多项业务提供了技术支持。通过不断地对算法进行探索打磨,我们终于在车辆路径规划问题最权威的评测平台上打破了多项世界纪录,标志着菜鸟网络在此领域的技术研究已经进入世界前列。

问题介绍

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

以i,j表示配送网络中的节点(i,j∈{0,1,2,…,N}), 其中0表示仓库点,其它表示客户点),以k表示车辆(k∈{1,2,…,K}),以image为决策变量,表示车辆k是否从i点行驶到j点。则标准的车辆路径规划问题可以使用以下数据规划的形式描述:

其中,表达式(1)表示优化目标为最小化使用车辆数;表达式(2)表示每个点有且仅有一辆车负责配送其所需要的货物;表达式(3)表示每辆车最多负责一条配送线路;表达式(4)表示网络中的流量平衡条件;表达式(5)表示每辆车负责配送的货物不超过其承载能力限制;表达式(6)为防止孤立子环出现的约束条件。

车辆路径规划问题在物流领域和生产领域的应用非常广泛。所以在实际应用中也出现了一些在标准问题的基础上增加了某些变化之后的变型问题。其中较为常见的包括:

  • CVRP:Capacitated VRP, 限制配送车辆的承载体积、重量等。
  • VRPTW:VRP with Time Windows, 客户对货物的送达时间有时间窗要求。
  • VRPPD:VRP with Pickup and Delivery, 车辆在配送过程中可以一边揽收一边配送,在外卖O2O场景中比较常见。
  • MDVRP: Multi-Depot VRP, 配送网络中有多个仓库,同样的货物可以在多个仓库取货。
  • OVRP:Open VRP, 车辆完成配送任务之后不需要返回仓库。
  • VRPB: VRP with backhauls, 车辆完成配送任务之后回程取货。

以上各类问题之间的关系可以通过图1表示:

图1 VRP各类变型问题

经典求解算法

车辆路径规划问题是典型的NP-hard问题,非常具有挑战性。同时因为其在实际应用的巨大价值,学术界和工业界对此类问题的优化算法的探索已经持续了几十年的时间。已有的经典求解算法可以分为精确解算法和启发式算法两大类。

在精确解算法方面,最基本的方法为分支定界算法,虽然其能够从理论上保证在有限时间内获得最优解,但是在实际计算中存在计算耗时巨大的情况。为了提高求解效率,研究者们先后提出了多种Branch-and-Cut以及Branch-Cut-and-Price方法,大幅降低了算法的求解时间。但是对于实际应用中较大规模的问题而言(例如超过200个点的问题),精确解算法依然无法能够在合理的时间内完成计算。所以还有一大部分研究集中于启发式算法领域。

启发式算法的思想为通过一系列启发式的规则来构造和改变解,从而逐步提升解的质量。对于VRP而言,较为经典的启发式算法为Clarke-Wright算法等。此外,经过不断的探索研究,元启发式算法被证明在求解VRP方面具有很好的效果和效率。一些经过精心设计的元启发式算法,例如模拟退火、禁忌搜索、遗传算法、蚁群算法、变邻域搜索、自适应大规模邻域搜索算法等在求解VRP上有着非常好的表现。

菜鸟车辆路径规划引擎研发历程

阶段一:核心基础算法研发

在研发之初,菜鸟仓配智能化算法团队充分调研了VRP领域的相关学术论文和软件产品等,最终确定了以自适应大规模邻域搜索(Adaptive Large Neighborhood Search, ALNS)为核心算法进行算法引擎的建设。相对于其它算法,ALNS算法的优势包括:

  • 算法框架易于拓展,除了求解标准的VRP之外,还能够求解VRPPD,MDVRP等变型问题;
  • 相对于普通的Local Search类型的算法,ALNS在每一步搜索过程中能够探索更大的解空间;
  • ALNS算法在搜索过程中能够自适应地选择合适的算子,从而对于不同类型的问题数据能够有比较稳定的良好求解结果;
  • 通过设计实现不同类型的算子,ALNS可以实现不同的搜索策略,从而便于算法的升级拓展。

经典的ALNS算法的主流程如图2所示:

图2 ALNS算法主流程

如图2所示的ALNS算法的主要步骤为:

  1. 使用一定的规则构造一个初始解(即Initial过程);
  2. 基于算子的权重,选择此次迭代过程中使用的Ruin算子和Insert算子;
  3. 对此次迭代的初始解执行Ruin操作,即将部分已经被车辆服务的客户点删除,使初始解成为一个不可行解;
  4. 对步骤(3)获得的解执行Insert操作,即对于还没有被车辆服务的客户点,将其插入到解中,尽量获得一个可行解;
  5. 基于优化目标函数评估步骤(4)获得的新的解,并根据一定的策略决定是否接受新解;
  6. 判断是否达到终止条件。如果是,则终止计算,返回当前找到的最好解;否则,基于此轮计算中算子的表现,更新算子的权重,并返回到步骤(2)。

以ALNS算法为核心,菜鸟仓配智能化算法团队完成了第一版VRP优化引擎的研发。对比测试结果表明其求解效果和效率显著优于jsprit等国际上流行的开源VRP Solver。在此基础上,菜鸟仓配智能化算法团队还对引擎进行了服务化,从而更方便地服务于公司内外部用户。

阶段二:算法体系丰富与升级

为了更好地服务于公司内外部用户,菜鸟仓配智能化算法团队不断对VRP优化引擎的核心算法组件进行了丰富与升级。主要体现在以下几个方面:

1.完善功能:在原算法核心框架的基础上,增加了对Pickup and Delivery(车辆一边揽收一边派送)、Multi Trip(车辆多趟派送)等类型问题的支持;而且通过对实际业务问题的抽象,总结出了不同类型的优化目标方程(例如最小化阶梯定价的总成本、最小化配送时间等)以及约束条件(例如车辆行驶距离限制、车辆配送订单数限制、车辆跨区数限制等)。从而使求解引擎能够求解的问题更加全面广泛。

2.丰富算子:为了提升引擎的求解效果和稳定性,菜鸟仓配智能化算法团队还在VRP求解引擎中增加了更加丰富的优化算子,例如不同类型的局部搜索算子(例如Two-Opt, Three-Opt, Cross-Exchange等)、不同类型的中间结果接受策略(例如Greedy, Simulated Annealing等)。

3.提升效果:菜鸟仓配智能化算法团队还尝试了多种算法来提升引擎的求解效果,主要包括:

  • Guided ejection search (GES):此算法通过不断尝试删减一辆车,并将此辆车服务的客户添加到其它车辆上,从而实现降低车辆的使用数。此算法在降低车辆数方面具有非常好的效果;
  • Fast local search (FLS): 在搜索过程中,只搜索那些有希望改善当前解的的邻域空间,从而大幅降低搜索计算量,提升算法求解速度;
  • Guided local serach (GLS): 在搜索过程中对局部最优解的某些特征施加惩罚项,从而改变搜索方向,避免陷入局部最优;
  • Edge assembly crossover (EAX): 一种基于两个解生成一个新的解的方法,新生成的解能够很好的继承父代个体的空间结构;
  • Branch-and-Price-Based Large Neighborhood Search:此算法将VRPTW问题分解为了Restricted Master Problem和Subproblem。其中在Restricted Master Problem中,基于一系列可行的路径,通过求解Set Partition问题来获得原问题的解;在Subproblem中,通过Tabu Search来搜索新的可行的路径;
  • Path-Relink:此算法的核心思想为通过从initial solution到guiding solution的逐步移动,探索两个解之间的广阔的邻域,从而有可能发现更好的解;
  • Hybrid Cluster and Heuristics:此算法是针对超大规模的问题而设计,首先通过合适的聚类算法对客户点进行聚类,从而将原问题分解为多个小规模的子问题,然后并行求解,最终将子问题的解组装成为原问题的解。

阶段三:算法并行化升级

对于大部分启发式算法而言,可以天然地通过并行化计算来提升搜索效率和效果,例如并行地计算评估多个相邻解的质量、向多个邻域方向进行搜索或者使用多种策略进行搜索等,甚至并行地使用多种算法进行搜索等。所以为了进一步提升VRP引擎的求解质量,菜鸟仓配智能化算法团队对VRP引擎进行了并行化升级。在此过程中,先后研发实现了三套并行化算法架构。

Population Island

Population Island的算法架构如图3所示。在算法执行过程中,有若干个Island并行执行计算,每个Island独立地进行演化,其中各有一个Master和若干Worker,其中Worker负责具体的搜索任务的计算执行,Master负责任务的分配协调以及与其它Island之间的通信等。每隔一定的计算步数,各个Island的Master之间会相同通信,分享搜索过程中获得的知识,从而提升整体的搜索效率。

图3 Population Island并行化架构

Parallel Memetic

Parallel Memetic的算法架构如图4所示。整个算法可以分为两个阶段,第一个阶段的计算重点在于减少使用的车辆数(Delete Route),在此阶段中,若干个Worker并行计算,并每隔一定的步数相互通信分享信息。第一阶段结束之后,会获得若干中间结果,将这些结果作为第二阶段中每个Worker上的初始演化种群进行计算。第二阶段的计算重点在于降低车辆行驶距离(Reduce Distance),第二阶段的Worker之间同样有相互通信分享知识的机制,而且可以通过控制演化过程中父代个体的选择机制来进行动态地调节Exploration与Exploitation。

图4 Parallel Memetic并行化架构

Central Pool

Central Pool的算法架构如图5所示。在算法中有若干个Worker负责具体的搜索任务,并将搜索得到的解返回到Central Pool中,由Central Manager对解进行排序、筛选、聚类等处理,然后Central Manager会依据当前Central Pool中的解集情况生成新的计算任务并发送给Worker执行。Central Manager可以对解空间进行合理的刻画,并通过计算任务的管控分配在Exploration与Exploitation之间进行平衡,从而提升求解效率。

图5 Central Pool并行化架构

已获得成果

通过对优化算法的不断迭代升级,以及在工程架构上的更新完善,菜鸟网络的车辆路径规划引擎在服务内外部客户的同时也在技术沉淀上获得了重大成果。

在VRP算法领域,最权威的评测对比平台为欧洲独立研究机构SINTEF发起并管理的世界最好解榜单(Best Known Solution),其中包括了对Solomon数据集(1987年提出)和Gehring & Homberger数据集(1999年提出)共356份测试数据的世界纪录。全世界最顶尖的优化算法学者(例如Jakub Nalepa, D. Pisinger, Yuichi Nagata等)以及优化技术公司(例如Quintiq等)都不断地在此平台上刷新世界纪录,将车辆路径规划领域的技术逐渐地推向极致。

菜鸟网络仓配智能化算法团队在算法研发过程中也一直以此数据集为主要算法评估指标。随着算法的不断升级优化,在越来越多的数据上接近甚至持平世界纪录。

最终,在2018年9月,仓配智能化算法团队的算法终于获得了比世界纪录更好的结果,并经过了平台的验证,向全世界的研究者进行了公开。截止到2019年4月初,菜鸟网络在此评测数据集上共持有48项世界纪录,持有数量在众多研究团队中位居前列,这标志着菜鸟在这项领域的技术进入了世界顶尖水平,为菜鸟和集团赢得了巨大的技术影响力。

总结及展望

在历时两年的研发过程中,菜鸟仓配智能化算法团队的同学们付出了巨大的努力和心血。同时在这个过程中,集团多个事业部的兄弟团队在算法研究、工程技术等方面也提供了很多很好的专业建议,在此表示衷心的感谢!

在之后的工作中,菜鸟仓配智能化算法团队将会把VRP引擎打造成为更强大、稳定、易用的优化产品,为菜鸟和集团的各项业务发展提供技术支持,并有计划地向外输出,为中国的物流行业赋能提效。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

原来,阿里工程师才是隐藏的“修图高手”!

阿里妹导读:在现实世界中,信息通常以不同的模态同时出现。这里提到的模态主要指信息的来源或者形式。例如在淘宝场景中,每个商品通常包含标题、商品短视频、主图、附图、各种商品属性(类目,价格,销量&#…

分布式数据集训营,从入门到精通,从理论到实践,你不可错过的精品课程!...

责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)随着微服务、云化架构的兴起,分布式数据库开始在越来越多的场景得到应用,从外围系统到中台业务,再到核心交易业务,分布式数据库成为企业基础架构转…

mybatis批量插入10万条数据的优化过程

在使用mybatis插入大量数据的时候,为了提高效率,放弃循环插入,改为批量插入,mapper如下: package com.lcy.service.mapper;import com.lcy.service.pojo.TestVO; import org.apache.ibatis.annotations.Insert;import java.util.List;/*** 功能描述:** author liuc…

java spring注解维护,从一次工程启动失败谈谈 spring 注解

原标题:从一次工程启动失败谈谈 spring 注解檀宝权Java 后端开发工程师,负责度假 App 后端和广告后端开发维护工作,熟悉 Tomcat,Spring,Mybatis,会点 Python,Lua。一、背景线上环境升级成 JDK8后…

探索Java日志的奥秘:底层日志系统-log4j2

前言 log4j2是apache在log4j的基础上,参考logback架构实现的一套新的日志系统(我感觉是apache害怕logback了)。 log4j2的官方文档上写着一些它的优点: 在拥有全部logback特性的情况下,还修复了一些隐藏问题API 分离&…

大地震!某大厂“硬核”抢人,放话:只要AI人才,高中毕业都行!

特斯拉创始人马斯克,在2019年曾许下很多承诺,其中一个就是:2019年底实现完全的自动驾驶。虽然这个承诺又成了flag,但是不妨碍他今年继续为这个承诺努力。这不,就在上周一,马斯克之间在twitter上放话了&…

Dart编译技术在服务端的探索和应用

前言 最近闲鱼技术团队在FlutterDart的多端一体化的基础上,实现了FaaS研发模式。Dart吸取了其它高级语言设计的精华,例如Smalltalk的Image技术、JVM的HotSpot和Dart编译技术又师出同门。由Dart实现的语言容器,它可以在启动速度、运行性能有不…

Python + ElasticSearch:有了这个超级武器,你也可以报名参加诗词大会了! | 博文精选...

来源 | CSDN 博客作者 | 天元浪子责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)意犹未尽的诗词大会正月十六,中国诗词大会第五季落下帷幕。从2016年2月12日第一季于开播,迄今恰好四周年。在这个舞台上,时年…

Node.js 应用故障排查手册 —— 大纲与常规问题指标简介

楔子 你是否想要尝试进行 Node.js 应用开发但是又总听人说它不安全、稳定性差,想在公司推广扩张大前端的能力范畴和影响又说服不了技术领导。 JavaScript 发展到今天,早已脱离原本浏览器的战场,借助于 Node.js 的诞生将其触角伸到了服务端、P…

蚂蚁金服CTO程立:做工程要有“拧螺丝”的精神

“一台机器可能有无数颗螺丝,需要一个一个地拧,而且需要一圈一圈地拧,才能让系统间严丝合缝,顺利工作。代码的世界里,一个项目到底成功与否,也是取决于几个模型的关键特殊设置,就像拧螺丝一样。…

linux 环境安装DBI和DBD_03

文章目录一、软件下载二、安装DBI2.1. DBI下载2.2. 解压2.3. 安装依赖2.4. 编译2.5. 执行测试2.6. 安装2.6. 修改权限三、安装DBD-ORACLE组件3.1. DBI下载3.2. 修改权限3.3. 切换用户3.4. 解压3.5. 进入目录3.6. 初始化环境变量3.6. 查看配置的环境变量是否配置3.7. 刷新配置文…

像数据科学家一样思考:12步指南(上)

介绍 目前,数据科学家正在受到很多关注,因此,有关数据科学的书籍正在激增。我看过很多关于数据科学的书籍,在我看来他们中的大多数更关注工具和技术,而不是数据科学中细微问题的解决。直到我遇到Brian Godsey的“像数…

Mybatis-plus 大数据量数据流式查询通用接口

文章目录一、案例需求二、使用案例:2.1. 自定义查询接口2.2. 逻辑处理类2.3. 调用案例2.4. 具体逻辑处理案例三、企业案例3.1. key名称获取3.2. 逻辑类测试3.3.最后一个批次处理方案四、 通用SQL预编译处理4.1. 业务场景4.2. xml形式4.3. 注解形式五、企业案例5.1. …

基于MaxCompute的数仓数据质量管理

声明 本文中介绍的非功能性规范均为建议性规范,产品功能无强制,仅供指导。 参考文献 《大数据之路——阿里巴巴大数据实践》——阿里巴巴数据技术及产品部 著。 背景及目的 数据对一个企业来说已经是一项重要的资产,既然是资产&#xff…

IP应用加速 – DCDN迈入全栈新篇章

4月11日,第七届"亚太内容分发大会"暨CDN峰会国际论坛中,阿里云资深技术专家姚伟斌发布了DCDN子产品IP应用加速(IPA)。IPA是基于阿里云CDN本身的资源优化,对传输层(TCP&UDP)协议进…

十年磨一剑,王坚自研的MaxCompute如何解决世界级算力难题

大数据时代,随着企业数据规模的急剧增长,传统软件已无法承载,这也推动了大数据技术的发展,Google、AWS、微软等硅谷巨头纷纷投入大数据技术的研发;而在国内,王坚也在十年前带领阿里云团队研发MaxCompute&am…

matlab和robotstudio,MATLAB与Robotstudio建立socket通信(初探)

前记:听一首《不想病》,歌词唱开头:做什么都不对,说什么都浪费,想什么我都可悲....;感觉就是不一样,好歌!哎,,,回到正题。好多事要去做,还得挤时间…

贾扬清:我对人工智能方向的一点浅见

阿里妹导读:作为 AI 大神,贾扬清让人印象深刻的可能是他写的AI框架Caffe ,那已经是六年前的事了。经过多年的沉淀,成为“阿里新人”的他,对人工智能又有何看法?最近,贾扬清在阿里内部分享了他的…

Node.js 应用故障排查手册 —— 类死循环导致进程阻塞

类死循环导致进程阻塞 楔子 在实践篇一中我们看到了两个表象都是和 CPU 相关的生产问题,它们基本也是我们在线上可能遇到的这一类问题的典型案例,而实际上这两个案例也存在一个共同点:我们可以通过 Node.js 性能平台 导出进程对应的 CPU Pro…

如何使用5个Python库管理大数据?

来源 | medium编译 | 武明利责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)如今,Python真是无处不在。尽管许多看门人争辩说,如果他们不使用比Python更难的语言编写代码,那么一个人是否真是软件开发人员&…