配送算法9 A GRASP algorithm for the Meal Delivery Routing Problem

发布于:2025-08-10 ⋅ 阅读:(13) ⋅ 点赞:(0)

A GRASP algorithm for the Meal Delivery Routing Problem论文学习


    这篇论文聚焦哥伦比亚外卖平台的“最后一公里”配送,提出基于 GRASP 的 MDRP 求解框架:动态整合骑手可用性、订单需求与地理位置,实现订单分配与路线优化。真实数据实验表明,GRASP 在解质量与计算速度间取得有利折中,较现有仿真优化方法在订单完成率和路径效率上均具竞争。

背景

• 疫情推动外卖需求激增,哥伦比亚 Domicilios.com 2019–2020 订单量增长 50.6%,骑手数量增 62.5% 至约 19.5 万。
• 外卖 App 作为撮合平台:连接餐厅、骑手、顾客,抽佣 8–27%,负责派单、结算与路线指派。
痛点
• 末公里配送(MDRP)需实时考虑骑手容量、餐厅出餐时间、交通方式、天气等多变量;
• 骑手收入不稳、无社保,事故风险高;需求波动、路况差进一步加剧满意度难题。

    本文将 MDRP 视为动态车辆路径问题(DVRP),提出 GRASP 元启发式算法;用哥伦比亚外卖平台真实一天实例验证,算法在解质量与计算时间间取得良好平衡。

问题定位

Meal Delivery Routing Problem (MDRP) 被归到 Dynamic Vehicle Routing Problem with Pickups & Deliveries(DVRP-PD)门类,其核心是“同日达”(Same-Day Delivery, SDDRP):订单当天生成、客户未知、时间窗紧张,目标是最小化未履约单量并决定所需车辆及实时路径。

在这里插入图片描述

求解思路

• 动态规划:理论上精确,但随状态空间爆炸陷入维度灾难。
• Rolling Horizon:周期性滚动重优化,可处理时间依赖数据,实现实时更新。
• 强化学习/多智能体:
– 以 MDP 建模订单-骑手交互,利用 RL 为每位骑手生成个性化推荐策略;
– 深度 RL 结合启发式,用于车队+无人机混合配送,无人机 FIFO 优先,车辆按插入成本派单。

关键现实约束

• 出餐时间随机:文献普遍将其视为随机变量,并用图论+数学规划+仿真一体化处理。
• 骑手冲突:多骑手抢同一订单、位置实时变化,导致决策空间连续收缩。
• 骑手福利:现有分配算法常忽视骑手自主权,最新研究呼吁在优化目标中加入“骑手自由度”指标。

计算框架

一套 Python-Docker-SimPy-OSRM 的模块化平台被提出:
① 载入真实数据校准仿真;② 定义主体交互与 KPI;③ 调用优化/路由服务输出策略。
结论:SDDRP 从早期滚动时域+启发式,正快速转向“强化学习-推荐 + 多模态运力 + 骑手福祉”的综合研究方向。

数据

• 用户 U:每个用户 u∈U 有收货地点 lu,下单时间 αo,并期望在承诺时间窗内收到餐品。
• 餐厅 R:每个餐厅 r∈R 有取货地点 lr,餐品就绪时间 eo,取餐服务时间 sr。
• 订单 O:每单 o∈O 唯一对应 (餐厅 ro, 用户 uo),并携带上述时间参数及用户收货服务时间 su。
• 骑手 C:每位骑手 c∈C 有上线时间 ec、下线时间 lc(lc>ec)、初始位置 lc(上线地点)。骑手最大同时携带订单数 ≤3。
• 酬劳:骑手每单收入由固定基价+与接单用时相关的浮动金额组成。

决策任务

任务一:订单指派

– 为每单 o∈O 选择一名骑手 co∈C,或留空(未指派)。
– 指派需实时完成,订单信息仅在骑手点击“接单”时才对其可见。

任务二:路线构建

– 对每位被指派的骑手,生成一条或多条“取-送”路线。
– 路线必须满足:
· 容量:骑手在任何时刻携带订单数 ≤3;
· 同一餐厅的多单可一次取货,形成 bundle(路线 s∈S,|餐厅|=1,|用户|≥1);
· 时间窗:取货 ≥ 餐品就绪时间 eo,送达 ≤ 承诺时间窗;
· 顺序:先取后送,单内不可交叉。
在这里插入图片描述

动态元素

• 平台根据实时需求滚动调整服务半径,保证用户可下单。
• 骑手位置、订单池、餐品就绪时间每秒都可能变化,需实时重算。

性能指标

• 履约单数(已指派且按时完成)。
• 平均/总送达时长(用户下单至收货)。
• 骑手利用率与收入。

求解目标

在满足容量、时间窗及实时信息更新条件下,最大化履约单量并最小化平均/总送达时长。

GRASP(Greedy Randomized Adaptive Search Procedure)完整方法

• 两阶段循环:
① Construction:随机-贪心生成初始派单方案;
② Local Search:交换订单在两骑手间的归属,缩短总行驶时间。
• 关键超参数:α(随机度)、iterations(总迭代次数)。

构造阶段(Algorithm 1)

输入:骑手集合、订单集合、α
步骤:

  1. 维护待派单队列 orders_pending 与可用骑手队列 couriers_available。
  2. 对每个骑手-订单对计算行驶时间 time_travel = 距离 / 骑手速度。
  3. 按 time_travel 升序排序,生成候选列表 RCL = 前 α·|列表| 个最小值。
  4. 从 RCL 随机选一对(骑手,订单);若骑手首次被选中,记录对应餐厅;把订单加入该骑手路线,并从待派单队列删除。
  5. 循环直至所有订单被指派。
    输出:initial_assign(每位骑手携带的订单序列)。

局部改进阶段(Algorithm 2)

输入:initial_assign
步骤:

  1. 计算当前方案总行驶时间 total_time。
  2. 对所有不同骑手对 (c₁, c₂) 遍历:
    – 对 c₁ 除首单外的任一订单 o₁,与 c₂ 除首单外的任一订单 o₂,尝试交换。
    – 生成新方案 new_assign,重新计算 total_time_new。
    – 若 total_time_new < total_time,则接受并更新最优方案。
  3. 穷尽所有可行交换后返回 better_assign。

主循环(Algorithm 3)

重复 iterations 次:
• 运行构造阶段 → 局部改进阶段 → 计算当前成本。
• 若优于历史最佳,则更新 best_solution 与 best_cost。
最终输出全局最优派单-路线方案。

运行约束(Delivery Assumptions)

• 每单有固定准备+取送时间窗,超时即视为未履约。
• 骑手最多同时携带 3 单且必须来自同一餐厅。
• 车型速度:摩托 20 km/h > 汽车 15 km/h > 自行车 12 km/h > 步行 5 km/h。
• 骑手送完最后一单后返回原地等待新任务。

实验结果

数据与平台

• 22 组真实哥伦比亚外卖日数据(订单 295–56 420 单,骑手 396–16 710 名)。
• 平台现行策略:每 2 min 重新跑派单/路径算法,目标减少排队、提高履约。
在这里插入图片描述

GRASP 调参

• α 0–1 步长 0.1,迭代 500–2000。
• 最优 α ≥ 0.7,迭代 ≈ 2000 时目标值最佳,但耗时 > 5 min;
• 折中选择 α = 0.7、迭代 1000:目标值仅低 2%,但耗时 < 2 min,满足业务窗口。

在这里插入图片描述

与基准对比

• GRASP 在 22 例中 21 例完成单量 ≥ 仿真优化,平均提升 0.97%,最高 1.54%。
• 路由时间略增(≤1.28%),因 GRASP 利用更多骑手(平均多用 1–3 名),换取更高履约率。
• 关键发现:GRASP 在高单量、高骑手场景下依旧稳定,展示良好可扩展性。
在这里插入图片描述
在这里插入图片描述

局限与展望

• 当前目标侧重订单完成率与行驶时间,未来需:
– 引入多目标模型,显式最大化骑手福利(收入、自由度、安全);
– 实现“配送民主化”,确保“用户-商家-骑手”三方长期可持续共赢。


网站公告

今日签到

点亮在社区的每一天
去签到