外卖配送路径规划算法:两阶段快速启发式算法

0.写在前面

外卖配送是运筹优化算法重要应用领域,它的主要特色是并发高、延时低,为了解决这样的问题须要对业务进行深刻理解,设计定制化优化手段。原计划时机成熟的时候进行解读,因为属于以前团队的商业核心机密,计划暂时搁置。去年前同事发了一篇paper(A Two-Stage Fast Heuristic for Food Delivery Route Planning Problem),十分清晰明了。鉴于此本文再也不狗尾续貂,仅作翻译,一是方便后来者阅读,二也对以前的工做作一次回顾。算法

1.背景

在外卖场景,用户在外卖平台点单以后,订单信息会推送至商家确认接单,以后进入履约环节。调度系统对订单进行指派和路径规划,外卖配送员根据订单指派完成取餐和送餐任务。编程

image.png

而在配送问题中,路径规划是基本且重要的一个环节,它直接决定骑手服务路线的长度和时间,从而对订单的准时率、客户满意度都产生影响。下图是配送中骑手服务的路径规划示意图,该骑手身上有5个订单,其路径规划结果为:取(4个)送(2个)取(1个)送(3个)。windows

image.png

目前,路径规划主要存在以下困难:并发

  • 计算量爆炸:因为路径规划是NP难问题,没法采用多项式算法在有限时间内求解。当问题规模增大时,计算量也呈指数增加。例如,在(午晚)高峰时刻,每一个骑手身上均可能有10个以上的订单须要完成,在这种状况下,可能的路径规划结果有2.38×1015种,想要在有限时间内求解是极困难的。
  • 算法时效要求高:路径规划是指派算法的重要环节。指派算法是在线算法,线上会有大量的订单和骑手须要进行匹配,所以路径规划算法须要在极短期内获得结果(毫秒级)

学界与配送场景下的路径规划问题相关的研究主要集中于PDPTW问题(pickup and delivery problem with time-windows),它考虑多个骑手和多个客户,每一个客户的订单包含一个取点与一个送点,骑手按规定顺序访问各个节点完成订单的服务,从而达到某些目标函数(例如总行驶距离)的最优。求解PDPTW问题的算法包括:列生成算法(column generation)、分支切割(branch-and-cut)、分支切割订价(branch-and-cut-and-price)等精确计算算法,禁忌搜索(tabu search)、模拟退火(simulated annealing algorithm)、基于插入搜索的算法(insertion-based heuristic)、自适应大邻域搜索(adaptive large neighborhood search)、变深度搜索(variable-depth search algorithm)。因为在配送场景下,对算法时效性有极高的要求,上述算法均没法适用于配送场景的问题。在后文中,咱们将介绍路径规划的问题模型,以及提出的启发式算法(Two-Stage Fast Heuristic),同时给出了一些仿真结果。编程语言

2.问题模型

背景中提到的配送场景下的路径规划问题能够被简化建模成单车辆PDPTW问题(single vehicle pickup and delivery problem with time-windows),即原PDPTW问题的单车辆简化(仅有一个骑手)。下图表示单车辆PDPTW问题研究中的一条典型路径。其中t_i为每一个送点的预计送达时间(ETA,Estimated Time of Arrival),当订单产生时,t_i即被告知给商家和客户。T_i表示预估送达时间(ETR,Estimated Time of Route),由路径规划算法计算得出。d_i为点i−1到点i的距离。
image.png函数

本文中咱们考虑最小化订单超时时间与路径长度,即目标函数为image.png,该问题有两个约束:优化

  • 优先约束:订单的取点需在送点前访问
  • 容量约束:骑手在服务过程当中同时携带的订单数量具备上限

3.算法设计

TSFH(Two-Stage Fast Heuristic)主要包括两个阶段spa

  • stage I:初始化获得一个初始可行解采用贪婪插入策略与基于地理信息的加速策略
  • stage II:对初始解进行邻域搜索两种邻域分别对“最超时”和“最不超时”订单进行调整

3.1初始化

3.1.1贪婪插入初始化

image.png

贪婪插入初始化主要包括如下步骤:.net

  1. 订单按照ETA时间升序排序;
  2. 取出第一个订单,进行排序。注意收到优先约束的影响,只有一种排列方法(取点在送点前);
  3. 对剩余的订单,按顺序将其取送点插入全部可能位置,找到最优位置(目标函数最小),将其插入。

下图为初始化中贪婪插入的一个例子,在插入第二个订单时,咱们有6种插入方案,根据目标函数最小原则,(A)为最优插入方案。翻译

当全部点都完成插入后,便获得一个可行解。

3.1.2基于地理信息的加速策略

观察商家和客户的地理信息能够发现,商家之间可能距离很近(例如中心商业区域所含的商家可能服务半径5km之内的60%的客户),客户也是如此(多个客户可能位于同一个小区或楼宇)。所以咱们能够经过分层聚类的方法将取送点聚类为不一样的集群,经过对这些集群进行分析,咱们能够减小无效插入,提升贪婪插入初始化的速度。根据引理1,2能够获得加速策略以下:若节点j被分到组i,则最好的插入策略是将其插入组i,或是组i以后的组之间。

下面分别介绍聚类算法以及相关引理。

【聚类算法】 令D为聚类范围(例如D=100m),按照如下逻辑对各个节点进行聚类:

  • 若节点i未被分类,则节点i产生一个新组,并变成该组的中心点
  • 对于一个节点j,若是节点j没有被分类,且d_ij<D,则j被分到组i
  • 若节点j被分到组k,且j不是中心点,若是d_ij<d_kj,则将j从新分至组i

【Lemma 1】将节点插入所在组以前的组: 若是节点j被分至组i,则将节点j插入到组i以前的任何组必定劣于将节点j插入组i

Proof: 节点j属于组i,则将节点j插入到组i以前的任何组k必定不如将节点j直接插入组i,由于路径长度变长了,但no delivery point benefits from shorter delays.

下图给出了一个例子,取点和送点被分红了三个组,假设蓝色组与橙色组的点已经完成插入,咱们考虑绿色组的节点的插入。从图中能够看到,将节点插入所在组以前的组(B)老是比插入本身所在的组(A)更差,由于骑手路径长度变长,客户处可能会出现更高的超时。
image.png

【Lemma 2】将节点插入所在组以后的组: 若是节点j被分至组i,则咱们总能够找到一个插入方案优于将节点j插入到组i以后的组k

Proof: 节点j属于组i,则将节点j插入到组i以后的组k必定不如将节点j插入组k和组k+1之间(若是k是最后一个组,则插入到最后位置),由于路径长度变长了,但no delivery point benefits from shorter delays.

下图给出了一个例子,取点和送点被分红了三个组,假设橙色组与绿色组的点已经完成插入,咱们考虑蓝色组的节点的插入。从图中能够看到,将节点插入所在组以后的组之间(B)必定比插入到最后位置(A)更差,由于骑手路径长度变长,客户处可能会出现更高的超时。
image.png

3.2局部搜索

在初始化结束后,局部搜索经过在初始解的邻域范围内进行搜索来提升解的质量。咱们的算法考虑两种类型的邻域:

  • 找到超时最严重的节点,将其前移,插入最优位置。流程以下图A所示。
  • 找到超时最不严重的节点,将其后移,插入最优位置。流程以下图B所示。

注:每次局部搜索找到一个更好的解时,当前最优解即被替换。
image.png

4.仿真结果

本节给出一些仿真结果。首先咱们比较了带有加速策略初始化与不带加速策略初始化的结果,以验证初始化中加速策略的有效性。以后,咱们将TSFH产生的解与暴力算法获得的最优解进行比较,从而验证TSFH产生近似最优解的能力。最后,咱们将TSFH与目前最好的一些算法进行比较,验证TSFH求解该问题的有效性。

算例从实际路径规划问题中均匀采样获得,根据取送点的数量分为三类:“<10”, "10-20", ">20"。

算法的评价指标采用总分(Total Score)和平均时间(Average Time)。总分为超时时间与路径长度的和,平均时间为一个算例的平均运行时间。

运行环境为MacBook Pro with 2.2 GHz processors / 16 GB RAM in Mac-OS,编程语言为Java,IDE为Eclipse。

4.1加速策略效果

表一为带有加速策略初始化与不带加速策略初始化的比较结果。能够看出,加速策略有着明显的效果。例如"10-20"算例的平均运行时间从0.37降至0.21,减小了43.2%。同时,从总分能够看出,加速策略初始化的效果几乎没有受到影响,这证实加速策略不会以牺牲解的质量为代价,能够在短期内产生优良解。
image.png

4.2与暴力算法比较

问题规模较小时,该问题的最优解能够经过暴力搜索算法来获得。考虑n个取点和n个送点,不考虑容量约束的条件下,暴力搜索算法的复杂度为image.png。这里咱们只提供“<10”算例的比较结果如表二。

能够看出,对于“<10”的算例,TSFH仅需暴力算法运行时间的0.21%,便可达到几乎同样的效果。另外,“10-20”与“>20”算例的运行时间也均在毫秒级。在现实中,大部分状况均可被“<10”和“10-20”的算例覆盖,所以这代表TSFH足以在毫秒数量级内解决配送中的路径规划问题。
image.png

4.3与其余最优算法比较

TSFH与variable-depth search (VDS)、simulated annealing (SA)的比较结果如表三。能够看出TSFH在总分和平均时间两方面都优于VDS和SA。在“<10”算例中,TSFH达到了近似最优解,仅比最优解高0.7%,而VDS和SA分别高了29.4%和35.7%。另外,TSFH求解“<10”算例的平均时间为0.41ms,而VDS和SA分别为3.51ms和25.64ms。配送环境中的路径规划对于算法的运行速度有着极高的要求,TSFH能够在1ms内完成“<10”算例的求解,而VDS和SA的运行时间均没法接受。所以,TSFH是比VDS和SA更好更有效的算法,也更适用于配送环境下的路径规划问题求解。
image.png

5.总结

本篇文章将外卖配送环境下的路径规划问题建模为单车辆PDPTW问题。与传统求解单车辆PDPTW问题的算法不一样,本篇提出了一种两阶段快速启发式算法(TSFH)。在第一阶段,经过贪婪初始化获得一个可行的优良解。根据顾客和商户的地理位置信息,设计了一种加速策略,在节点调整时避免了无效插入。在第二阶段,经过在当前解的两种邻域内进行搜索,解的质量获得了进一步提高。

仿真结果代表,TSFH与暴力搜索算法、VDS、SA相比,在解的质量和运行时间方面均有着极大的优点。同时,TSFH具有在毫秒数量级内产生近似最优解的能力,适用于配送场景下路径规划问题的求解。

相关文章
相关标签/搜索