Final Deck
校园外卖配送系统最小配送人员问题
01 / 43
目录
校园外卖配送系统最小配送人员问题
汇报目录
02 / 43
01 · 问题与数据
校园外卖配送系统最小配送人员问题
从业务问题到可计算输入
先说明题目真正困难在哪里,再交代数据和预处理链路。
03 / 43
01 · 问题与数据
校园外卖配送系统最小配送人员问题
原问题不是送餐路径,而是带时间窗的资源调度
A
业务背景
校外骑手不能进校,外卖集中到校门,由校内配送员送到宿舍楼。
B
硬性时限
每单从到达校门开始,必须在 10 分钟内送达。
C
资源限制
配送员单次最多携带 5kg,送完后必须回校门才能继续。
D
优化目标
在所有订单准时送达的前提下,求全天最少配送员人数。
核心矛盾:等待可能带来拼单收益,但也会压缩时间窗并推迟回场。
04 / 43
01 · 问题与数据
校园外卖配送系统最小配送人员问题
固定参数统一成算法约束
250 m/min配送速度由 15 km/h 转换,用于距离到时间的换算。
10 min送达时限deadline = arrival + 10。
5 kg载重上限限制单批订单数量,使小规模枚举可行。
所有订单时间被转换为分钟数,所有路径距离统一为米,后续批次评估直接计算送达时刻和回场时刻。
05 / 43
01 · 问题与数据
校园外卖配送系统最小配送人员问题
前期准备:从原始订单到展示数据
1读取订单文件解析订单编号、到达时间、重量、目标宿舍楼。
2统一数据结构转换为 Order 对象,并生成 deadline_minute。
3建立校园图校门、宿舍、路口作为节点,道路距离作为边权。
4运行离线/在线求解输出 assignment、decision、utilization 等结构化 JSON。
5生成前端展示离线、在线、对比三类可视化页面均可点击查看。
06 / 43
01 · 问题与数据
校园外卖配送系统最小配送人员问题
实验数据规模与高峰特征
订单规模
| 数据集 | 订单数 | 峰值压力 | 最少人数 |
| NPU Mon | 801 | 51 单 / 10 分钟 | 21 |
| NPU Tue | 785 | 36 单 / 10 分钟 | 19 |
| NPU Wed | 786 | 42 单 / 10 分钟 | 19 |
| CDUT Mon | 850 | 33 单 / 10 分钟 | 24 |
| CDUT Tue | 839 | 34 单 / 10 分钟 | 24 |
| CDUT Wed | 861 | 44 单 / 10 分钟 | 30 |
07 / 43
02 · 建图与建模
校园外卖配送系统最小配送人员问题
让路径、订单和批次都可计算
把校园地图和订单时限转化为图论模型与时间窗模型。
08 / 43
02 · 建图与建模
校园外卖配送系统最小配送人员问题
校园地图抽象为带权无向图
道路网络建模
- 节点表示校门、宿舍楼、道路转折点和必要连接点。
- 边表示校园内可通行道路。
- 边权表示两点之间的道路长度,单位为米。
- 右侧只是局部示意,不按完整地图节点数量绘制。
- 完整路径计算以后端建图数据为准。
09 / 43
02 · 建图与建模
校园外卖配送系统最小配送人员问题
Dijkstra 预处理最短路
Dijkstra(source): O((V + E) log V)
距离表
校门到宿舍、宿舍到宿舍的最短距离被预处理保存。
路径表
最短路径的节点序列会用于前端绘制实际路线。
时间换算
travel_time = shortest_distance / 250。
复用优势
批次评估阶段只需查表,不再重复考虑路径怎么走。
为什么重要
路径层做准确之后,调度层才能专心处理“哪些订单一起送、什么时候发车、人员何时回场”。
10 / 43
02 · 建图与建模
校园外卖配送系统最小配送人员问题
订单对象与时间窗
oᵢ = (idᵢ, rᵢ, wᵢ, vᵢ)
dᵢ = rᵢ + 10
11 / 43
02 · 建图与建模
校园外卖配送系统最小配送人员问题
批次可行性:从经验判断到安全出发区间
max(rᵢ) ≤ t ≤ min(dᵢ - cᵢ)
r₁订单陆续到达
max(rᵢ)最早可出发
min(dᵢ-cᵢ)最晚安全出发
dᵢ送达截止
- 给定一个订单组合和访问顺序,计算第 i 单从出发到送达的累计耗时 cᵢ。
- 所有订单出发前必须已经到达,因此 t ≥ max(rᵢ)。
- 每单都必须在截止时间前送达,因此 t + cᵢ ≤ dᵢ。
- 若这个区间非空,则该顺序可执行;否则该顺序不可执行。
12 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
已知全天订单时,求最少可行人数
主模型:先精确判断单趟配送,再在全天时间轴上验证给定人数是否足够。
13 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
离线方案的四步结构
1地图预处理把校园道路转成可查表的最短路距离和路径。
2单趟判断判断一组订单是否满足载重、送达顺序、准时送达和回场约束。
3全天模拟给定配送员人数,在订单到达、人员回场等关键事件点重新决策。
4人数搜索不断试更少或更多的人,找到能完成全天订单的最少人数。
小问题精确,大问题用事件驱动启发式搜索高质量可行解。
14 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
先把“一趟配送”算准
选一小组订单一趟最多考虑 4 单,因为 5kg 载重和 10 分钟时限会自然限制批次大小。
先查重量总重量超过 5kg 的组合直接排除,不进入路径计算。
试送达顺序对剩余组合尝试不同宿舍访问顺序,找出能准时送达的路线。
算安全出发段得到“最早能出发”和“最晚必须出发”的时间段。
保留好路线既保留更早回场的路线,也保留时间余量更大的路线,供调度层选择。
这一层只回答一个问题:这几单能不能由同一个配送员一次送完;至于什么时候派、派谁去,由后面的全天模拟负责。
15 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
人数验证:给定人数,模拟一整天
| 系统里维护什么 | 直观含义 | 为什么需要 |
| 当前时间 | 模拟已经推进到几点 | 判断订单是否到达、是否还能继续等。 |
| 还没到的订单 | 后面才会出现在校门的订单 | 离线算法可以用它做短前瞻。 |
| 已到但未送订单 | 此刻堆在校门、等待安排的订单 | 候选批次只从这里和短前瞻可见订单中生成。 |
| 空闲配送员 | 已经在校门、能立刻出发的人 | 决定当前能不能发车。 |
| 在路上的配送员 | 每个人预计几点回到校门 | 若最早回场也赶不上急单,说明当前人数不够。 |
| 已派出批次 | 每次出发、回场、送哪些单 | 最终用于结果表和前端可视化。 |
16 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
人数验证只在关键事件点做决策
为什么不逐分钟模拟
- 两个订单到达之间,如果没有配送员回场,系统状态其实没有变化。
- 固定每分钟扫一遍会产生大量无意义判断。
- 真正需要重新计算的时刻,是订单池或可用配送员发生变化的时候。
三个关键事件
- 新订单到达:校门等待池变大,可能出现更好的拼单。
- 配送员回场:可用人手增加,可以重新派车。
- 订单快到最晚出发时刻:不能再为了拼单继续拖延。
全天模拟的节奏是“有变化才重算”,这样既贴近调度逻辑,也让运行更快。
17 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
核心机制:seed 池 + 标准池如何组批
给定候选订单池每次决策先确定当前可用于组批的一批订单,后续只在这个小池子里搜索。
先选 seed 池按单独配送的最晚安全出发时间排序,默认取 4 个最高风险订单。
再选标准池从 seed 之外取 8 个次紧急订单,作为本轮所有 seed 共用的基础伙伴。
围绕 seed 组批每次固定一个 seed,从标准池和扩展伙伴里选 0-3 单,枚举可行送达顺序。
这是整套方案的核心组批器:离线前瞻、发车判断、人数验证,都是反复调用它来产生候选批次。
18 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
哪些订单会成为 seed
seed 的判定逻辑
- 先计算每个订单“如果单独送,最晚几点必须从校门出发”。
- 最晚出发时间越早,说明这个订单越不能继续拖。
- 若最晚出发时间相同,再看订单截止时间、到达时间和订单编号,保证排序稳定。
- 默认每轮取前 4 个高风险订单作为 seed;兜底重试时才扩到更多。
为什么不是只看一个最急单
- 高峰期可能同时有多单接近最晚出发时刻。
- 只围绕一个最急单,会让第二、第三急的订单被普通拼单带偏。
- 多个 seed 并行扩展,可以同时保护多个风险点。
- 每个批次都包含 seed,保证局部搜索始终围绕准时风险展开。
19 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
标准池订单如何匹配当前 seed
伙伴池从哪里来
- 标准池里的 8 个次紧急订单是第一来源。
- 在离线前瞻里,未来真实到达的新单会先进入待送池,再参与 seed 和标准池重选。
- 如果局面困难,再补一部分同样紧急的订单,用来保护多个风险点。
- 再补离 seed 目的地更近的订单,提高顺路拼单机会。
- 最后按匹配得分补充最契合 seed 的订单。
匹配得分看什么
45%空间顺路两单一起送能比各自单独送少走多少路。
20%自身紧急普通订单本身是不是也快到最晚出发点。
10%重量合适和 seed 合起来是否接近但不超过 5kg。
匹配权重里空间顺路占比最高,其次是时间窗;载重只做辅助,因为超过 5kg 会在枚举前直接淘汰。
20 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
什么时候扩池:本轮组批与失败重试
第一层:每个 seed 的伙伴池
- 先取 8 个次紧急订单,作为所有 seed 共用的标准池。
- 如果待送订单超过标准池,就围绕当前 seed 补充三类伙伴:同样紧急、目的地近、匹配分高。
- 补充后会重新排序,只留下最契合当前 seed 的订单。
- 常规组批最多从 8 个看到 12 个,避免漏掉标准池外更顺路的订单。
第二层:验证失败后的扩大搜索
- 如果默认参数验证失败,不能立刻认为这个人数不可行。
- 系统会再放宽一次:标准池从 8 扩到 12,seed 数量从 4 扩到 6。
- 无论哪一层扩池,每个 seed 最多只保留 14 个伙伴,防止变成全量暴力枚举。
- 因此扩池分两种:本轮组批为了找更合适的伙伴,失败重试为了降低误判不可行的风险。
一句话:订单多时会先给当前 seed 扩伙伴池;整个人数验证失败时,才扩大 seed 数量和标准池规模。
21 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
如何枚举候选批次
固定一个 seed本轮先选择一个高风险订单,后续组合都必须包含它。
从伙伴池补单从 seed 的伙伴池里再选 0、1、2、3 个普通订单。
先查重量总重量超过 5kg 的组合立即丢弃,不再试路线。
枚举送达顺序对剩下组合尝试不同宿舍访问顺序,检查每单能否准时。
合并候选多个 seed 生成的可行批次去重后,交给发车评分统一选择。
枚举不是“所有订单随便拼”,而是“每个 seed 带着自己的伙伴池做小范围精确搜索”。
22 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
离线前瞻如何调用核心机制
不是全量搜索
- 先用当前已到订单跑一次核心组批器,得到“现在发车”的具体批次。
- 离线只看未来 3 分钟内真实会到达的新单时刻。
- 每个未来时刻只重跑一次受限的 seed + 标准池,不展开全天等待决策树。
- 因此复杂度增加的是少量试算次数,不是指数级全局搜索。
前瞻在哪里生效
- 未来新单不是给当前批次额外加分,而是先进入新的候选订单池。
- 候选池变了,seed 池、标准池、伙伴池都会重新选择。
- 未来新单可能成为 seed,也可能成为某个 seed 的标准池伙伴。
- 最后比较的是“现在发车批次”和“未来重组批次”两个具体方案。
一句话:离线前瞻不是主算法,它只是利用已知订单表,在少量真实未来时刻再次调用核心组批器。
23 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
当前批次和未来批次如何比较
先过资格线
- 比较对象都是具体批次,不是单个订单,也不是抽象的分数奖励。
- 未来批次必须仍然满足不超过 5kg、10 分钟送达和回场可行性。
- 未来批次覆盖的当前已到订单不能更少,不能为了新单牺牲老单。
- 通过资格线后,才比较当前批次分和未来批次分;提升至少 0.18 才允许等。
发车倾向来自哪里
42%急单压力最急订单离最晚出发点越近,越倾向发车。
22%校门积压等待订单相对空闲人手越多,越倾向发车。
12%试算无改进未来重组批次没有明显更好时,越倾向发车。
安全余量 ≤ 1.5 分钟:直接发车
压力评分 ≥ 0.62:直接发车
未来改进 ≥ 0.18:才考虑等待
24 / 43
03 · 离线算法
校园外卖配送系统最小配送人员问题
人数搜索:用全天模拟做二分验证
当前人数能完成 → 试更少的人
当前人数不能完成 → 增加人数
为什么可以二分
如果 k 个配送员能完成任务,那么多一个配送员也一定不会更差。因此最少人数可以通过“不断试中间值”的方式搜索。
主策略seed 池 + 标准池 + 3 分钟前瞻。
扩大搜索如果失败,就扩大候选池和 seed 数量再试。
紧急保护对快触线订单启用救援批次,避免局部选择失误。
结果兜底用备用调度策略验证,降低误判“不可行”的风险。
25 / 43
04 · 在线策略
校园外卖配送系统最小配送人员问题
未来订单未知时的实时调度
在线策略不偷看未来订单,只能在当前可见信息下做滚动决策。
26 / 43
04 · 在线策略
校园外卖配送系统最小配送人员问题
在线调度的核心差异:看不见未来
当前能看到什么
已经到达校门、正在等待配送的订单,以及哪些配送员在校门空闲。
不可见信息
未来几分钟是否会来新单、来几单、去哪里,都未知。
主要矛盾
立即出发更安全;等待可能拼单,但会推迟回场。
策略定位
不是替代离线结果,而是模拟真实系统执行成本。
在线意义
离线结果回答“已知历史数据时能做到多好”;在线结果回答“真实执行中未知未来会多用多少人”。
27 / 43
04 · 在线策略
校园外卖配送系统最小配送人员问题
在线策略:先保证不超时,再考虑等一等
急单优先有订单已经接近最晚出发时间时,不再等待,直接派出当前可行批次。
积压优先校门等待订单明显多于空闲配送员时,先发一批,避免后面越来越堵。
满批优先当前批次已经凑到 4 单时,继续等的收益很低,直接出发。
适当等待如果订单还安全、批次还不满,就短暂等待新单,提高拼单率。
复核再判等待不是无限等;到达复核时刻、新订单到达或配送员回场,都重新判断。
在线版没有未来订单信息,所以等待更保守:安全余量的一半,且单次最多等 3 分钟。
28 / 43
04 · 在线策略
校园外卖配送系统最小配送人员问题
在线:哪些情况直接走
到点复核如果之前选择等待,到了复核时刻就按当前最优批次发车。
一句话:在线调度宁可少拼一点,也不能把订单拖到时间窗边缘。
29 / 43
04 · 在线策略
校园外卖配送系统最小配送人员问题
在线:哪些情况可以等
可以等的情况
- 当前没有急单逼近最晚出发时间。
- 当前批次还没凑满,等待有机会提升拼单率。
- 校门订单没有明显积压。
- 即使等一小段时间,所有可见订单仍然保有安全余量。
等多久
- 最多只等安全余量的一半,避免把时间窗用满。
- 单次等待不超过 3 分钟。
- 新订单到达、配送员回场、或到达复核时间,就立即重新判断。
- 如果复核后仍然不适合等,就直接派出当前最好批次。
30 / 43
04 · 在线策略
校园外卖配送系统最小配送人员问题
离线与在线策略对照
| 维度 | 离线策略 | 在线策略 |
| 能看到的信息 | 知道全天订单,可以判断未来几分钟是否值得等。 | 只知道当前已经到达校门的订单。 |
| 等待方式 | 已知未来订单表,所以只在短前瞻试算明确改进时等待。 | 不知道未来订单,只做很短的保守等待,并且随时复核。 |
| 发车原则 | 急单、满批、压力大、离线试算无改进时直接发。 | 急单、积压、满批、安全余量过小时直接发。 |
| 结果用途 | 作为本题最终最少人数结果。 | 衡量真实执行时因为看不见未来会多用多少人。 |
31 / 43
05 · 复杂度分析
校园外卖配送系统最小配送人员问题
为什么这个算法能跑得动
关键不是全量搜索,而是用候选池限制组合爆炸。
32 / 43
05 · 复杂度分析
校园外卖配送系统最小配送人员问题
复杂度里每个符号是什么意思
| 符号 | 含义 | 在复杂度里起什么作用 |
| V、E | 校园图的节点数和道路边数。 | 决定一次最短路计算的开销。 |
| R | 需要预处理最短路的关键地点数量,如校门和宿舍楼。 | 需要跑多少次最短路。 |
| N | 全天订单数。 | 决定外层人数搜索上界。 |
| M | 一天中需要重新决策的事件数量。 | 决定全天模拟要循环多少轮。 |
| p | 标准池大小,默认看 8 个次紧急订单。 | 控制每个 seed 周围先从多大的订单池里找伙伴。 |
| s | seed 池大小,默认 4 个高风险订单。 | 决定每轮围绕多少个急单分别扩展。 |
| p′ | 读作 p-prime,表示每个 seed 的伙伴池大小;默认最多 12,兜底最多 14。 | 决定单个 seed 周围要枚举多少候选组合。 |
| b | 一趟最多带几单,默认 4。 | 组合和排列的阶数,影响最大。 |
33 / 43
05 · 复杂度分析
校园外卖配送系统最小配送人员问题
34 / 43
05 · 复杂度分析
校园外卖配送系统最小配送人员问题
一次决策的局部枚举复杂度
直观理解:先围绕每个 seed 选伙伴,再试配送顺序;真正容易爆炸的是单趟订单数 b,所以 b=4 是最关键的规模控制。
35 / 43
05 · 复杂度分析
校园外卖配送系统最小配送人员问题
从一次人数验证到总复杂度
M 从哪里来订单到达、配送员回场、订单接近最晚出发点,都会触发一次重新决策。
log N 从哪里来最外层用二分搜索人数;最多从 1 到 N 人里不断折半试。
常数重试扩大候选池、seed 数和兜底策略只是少数几次重试,只放大常数倍。
36 / 43
05 · 复杂度分析
校园外卖配送系统最小配送人员问题
为什么实际运行可控
图规模可控
校园道路图远小于订单调度规模;最短路预处理一次完成,后续主要查表。
批次规模小
5kg 载重和 10 分钟时限让一趟很难带很多单,默认最多 4 单。
候选池有限
标准池默认 8 单,seed 伙伴池默认最多 12 单,兜底最多 14 单。
事件数有限
只在订单到达、配送员回场和安全边界附近重算,不做逐分钟全量扫描。
37 / 43
06 · 结果与展示
校园外卖配送系统最小配送人员问题
从数字结果跳到交互前端
结果不只是表格,还能点击查看每批装载、路径和在线对比。
38 / 43
06 · 结果与展示
校园外卖配送系统最小配送人员问题
离线最少人数结果
| 数据集 | 订单 | 批次 | 均批量 | 最少人数 | 峰值订单 | 前端 |
| NPU Mon |
801 |
443 |
1.81 |
21 |
51 |
打开 |
| NPU Tue |
785 |
451 |
1.74 |
19 |
36 |
打开 |
| NPU Wed |
786 |
442 |
1.78 |
19 |
42 |
打开 |
| CDUT Mon |
850 |
558 |
1.52 |
24 |
33 |
打开 |
| CDUT Tue |
839 |
531 |
1.58 |
24 |
34 |
打开 |
| CDUT Wed |
861 |
544 |
1.58 |
30 |
44 |
打开 |
39 / 43
06 · 结果与展示
校园外卖配送系统最小配送人员问题
在线与离线对比结果
| 数据集 | 离线 | 在线 | 差值 | 前端 |
| NPU Mon |
21 |
25 |
+4 |
对比页 |
| NPU Tue |
19 |
19 |
+0 |
对比页 |
| NPU Wed |
19 |
20 |
+1 |
对比页 |
| CDUT Mon |
24 |
25 |
+1 |
对比页 |
| CDUT Tue |
24 |
25 |
+1 |
对比页 |
| CDUT Wed |
30 |
31 |
+1 |
对比页 |
最大差距
+4
NPU Mon:在线需要 25 人,离线需要 21 人。六组平均额外需求约 1.3 人。
40 / 43
06 · 结果与展示
校园外卖配送系统最小配送人员问题
前端展示入口
现场演示建议:先点离线总览,再打开 NPU 周一或 CDUT 周三;最后用对比页解释在线策略的额外成本。
41 / 43
06 · 结果与展示
校园外卖配送系统最小配送人员问题
高峰批次案例:NPU 周一
典型三单批次
3订单数
5.0kg总重量
13.1min出发到回场
0.0min安全余量
校门 → 订单 335 → 订单 334 → 订单 336 → 校门
42 / 43
结束
校园外卖配送系统最小配送人员问题
43 / 43