当前位置: 首页 > news >正文

配送算法19 Two Fast Heuristics for Online Order Dispatching

Two Fast Heuristics for Online Order Dispatching论文学习

本文贡献

• 研究带现实约束的在线订单调度问题
• 提出两种快速启发式:
– MGI(Modified Greedy Insertion)
– MRI(Modified Regret Insertion)
• 实验结果
– 与原始 GI/RI 相比,MGI/MRI 解质持续提升,且均逼近 RI 水平
– 运行时间:MGI 快于 GI,MRI 快于 RI,验证了启发式的高效性
在这里插入图片描述

问题定义

决策节拍:每 1 min 批处理一次,输入为 n 个新订单 W 与 m 名司机 R。
网络:
• 新订单节点 V = V⁺ ∪ V⁻,其中 V⁺ = {i⁺|i∈W},V⁻ = {i⁻|i∈W}。
• 司机已接但尚未完成的订单节点集 U = U⁺ ∪ U⁻,其顺序不可重排。
约束:
(C1) 时间窗:TPᵢ 最早取餐;ETAᵢ 承诺送达;OTᵢ = max(0, Dᵢ⁻ − ETAᵢ)。
(C2) 同方向:新单递送向量与司机当前路线 Φ 中各递送向量夹角 < θ (近单豁免)。
(C3) 先送后接:新单取餐节点插入位置之前,司机必须已送完已取餐节点。
(C4) 容量:单司机实时载货 ≤ Q。
目标:最大化专属司机接单占比 ODR = DN / TN。

在这里插入图片描述

在这里插入图片描述

算法框架

在这里插入图片描述
在这里插入图片描述

关键创新点

批次并行插入:传统 GI/RI 每轮仅插一单,本文每轮插 “一批” 多单 → 减少迭代次数与 O(nmr) 重算成本。
两级排序信号:
• 可行度稀缺性(可行司机数)保证“易死单”优先;
• 在可行度相同层内,MGI 用最短增量成本,MRI 用指数衰减后悔值 → 平衡近视与前瞻。
γ-衰减后悔:通过 γ∈(0,1) 控制 2nd–k-th 司机差值权重,避免高阶差值噪音。

实验设置

• 硬件:MacBook Pro 2.2 GHz / 16 GB RAM / Java SE 8。
• 实例:20 个真实业务样本,按新单量划分为
– 中小规模(21–30 单)10 例;
– 大规模(31–40 单)10 例。
• 对比算法:MGI、MRI、经典 GI、经典 RI;MRI 衰减系数 γ = 0.5。
• 评价指标:
(1) 订单专属司机占比 ODR;
(2) 平均 CPU 时间(ms)。

实验数据

全量均值

在这里插入图片描述
→ 说明“批次并行 + 稀缺度排序”策略在保持解质量的同时削减迭代次数。

分规模观察

• 中小规模
在这里插入图片描述

• 大规模
MRI 的 ODR 略低于 RI(差距 < 1 %),但时间优势进一步放大;
MGI 仍维持 ODR 与时间双领先。
在这里插入图片描述
→ 证实 MGI 的“可行司机数”排序对高密度场景更稳健;MRI 的 γ-衰减后悔在大规模时开始权衡精度与速度。

实例级分布

• ODR(图 5):MGI 在 19/20 例 ≥ GI;提升幅度 1–6 pp。
• 时间(图 6):MGI 在 18/20 例 < GI;最大提速 25 %。
• ODR(图 7):MRI vs RI 互有胜负,差异窗口 ±2 pp,呈随机波动。
• 时间(图 8):MRI 全域领先,且随着实例规模增大,领先幅度由 10 % 提升到 30 %。

在这里插入图片描述
在这里插入图片描述

讨论

1、为什么不用进化算法
• 毫秒级实时要求 vs 进化算法耗时高
• 研究问题高度动态、约束极严——可行域极小,进化算子很难直接产生可行解

2、未来可补充思路
• 先用本文提出的启发式快速获得初始解
• 在离线或延迟不敏感场景下,用进化算法对初始解进行二次优化,可进一步提升质量

展望

• 更深度地刻画在线调度的“动态性”
• 借助机器学习对未来短期需求做预测,并将预测信息融入决策,以期从“时段整体”视角获得更优表现

http://www.dtcms.com/a/360854.html

相关文章:

  • windows10专业版系统安装本地化mysql服务端
  • 【Docker】Docker的容器Container、镜像Image和卷Volume对比
  • Centos安装unoconv文档转换工具并在PHP中使用phpword替换word模板中的变量后,使用unoconv将word转换成pdf
  • openharmony之sandbox沙箱机制详解
  • Docker一键快速部署压测工具,高效测试 API 接口性能
  • datax将数据从starrocks迁移至starrocks
  • Java比较器
  • golang 14并发编程
  • 20250828的学习笔记
  • Socket-TCP 上位机下位机数据交互框架
  • 深入理解 HTTP 与 HTTPS:区别以及 HTTPS 加密原理
  • UART-TCP双向桥接服务
  • Flutter WebAssembly (Wasm) 支持 - 实用指南Flutter WebAssembly (Wasm) 支持 - 实用指南
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 聚焦智慧教育新趋势:AI+虚拟仿真技术加速未来学习转型
  • 算法面试题(上)
  • 【Java后端】Spring Boot 全局域名替换
  • Azure AI Search构建RAG的优化点
  • 接口自动化测试之设置断言思路
  • 大模型应用开发面试实录:LLM原理、RAG工程与多Agent场景化落地解析
  • mysql实例是什么?
  • 产品月报|睿本云8月产品功能迭代
  • Topaz Video AI:AI驱动的视频增强与修复工具
  • 嵌入式实时操作系统(二十五)-实时性
  • 从 “能用” 到 “好用”:生成式 AI 落地三大核心痛点与破局路径
  • nt5inf.hash排序后前后两个共五个和nti5nf.cat文件用asn.1editor打开后导出后部分内容的对比--重要
  • Unity中多线程与高并发下的单例模式
  • 结构体成员大小及内存对齐练习
  • Electron使用WebAssembly实现CRC-16 CCITT校验
  • 9.1C++——类中特殊的成员函数