外卖配送路线规划的底层逻辑——迪克斯特拉算法

几何图形学里,圆的面积要大于方形。方形常见于建筑、家具设计等领域,因其稳定性和规则性受到广泛使用;圆常见于钟表、轮胎、饼干等圆柱形物体,因其均匀性和流畅性也被广泛使用。

某个未知面积数的地区,需派遣若干人入驻管辖,并要求以最少的人数能够彻底覆盖掉区域内的所有范围,不准出现遗漏某个角落。方形因其稳定性和规则性,无疑更优于圆形。

现实生活中,城中村、各大小区居民楼,实行的是网格化集中管理;依照两点距离,直线最短的原理,铺设、修筑的道路、桥梁、铁路大多也是以方形为主。简单点讲,国内城市的主干线、支线路段大都是以方形包围了城市里的各种建筑物,只有路况较为复杂特殊的山路才以圆形包围。

外卖配送路线规划的底层逻辑是以迪克斯特拉算法为主,该算法的主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。

骑手在接单大厅看到的外卖订单、或是系统自动派发给的订单,都是先以骑手所在的位置为起始点,根据Dijkstra算法遍历后,再把订单推送展现在附近距离最近的骑手接单大厅里、或是自动完成接单。

骑手每变动一次位置,或是外卖订单的送餐地址发生改变,Dijkstra算法都会重新遍历一次,再重复上述工作。

当运力充足时,骑手与外卖的关系为一对N;运力供给紧张时,关系则变成N对N,其原因:每一笔外卖都有配送时效要求,当配送运力出现不足且外卖在不断爆单时,就需要更多的骑手去完成配送,而每位骑手背单上限却有着具体数量要求。要想快速提高配送时效,明显N对N关系更为适用。

下面先以圆形为例,设圆的上下左右4个边界点分别为A、B、C、D,骑手所在的中心点为O。

图表1 方形与圆形范围比较

绝大多数人认为,几何学里圆的面积大于方形。所以外卖和网约车行业以司机和骑手所处位置半径O点,来推送圆圈2.5公里内的所有订单给司机与骑手,一来可以保证接单距离在圆心O点出发都是同等距离,二来可以提高骑手的接单成功率。

针对第1点,这其实是一种完全错误的观点。外卖大厅里的订单,是在Dijkstra算法遍历后,以订单上商家所处的位置与骑手当时所在位置之间相差的距离,在算法设定误差最短路径范围内,自动推送到骑手所在的接单大厅里,让他可以看见该笔订单。并不是说,当某位骑手所处实时位置,距离推送该笔订单上取餐商家位置最近时,才会在接单大厅里看到该笔待接手的外卖单。

这种最短路径的误差值存在,既可以提高算法的运行速度,也能提高接单大厅推送的外卖订单接单的成功率。简单来讲,接单大厅里推送给骑手的外卖订单,不会只有一名骑手看到相同的订单,而是符合Dijkstra最短路径误差范围内的N名骑手。就好比A骑手率先看到某笔订单,因对配送佣金单价多少产生了几秒犹豫,在这几秒钟的犹豫时间内,被B成功接手。也有这种情况,B和C也同时看到了该笔订单,但C的抢单速度比B快了0.0001秒,被C成功抢夺。这些都是因允许范围误差的存在,所以才出现的现象。

所以,不管使用什么图形来规划接单范围,都不能保证骑手从半径出发,接到的外卖订单都是同等距离。为了让读者更直观地理解,我们可以用图表1来论证。把方形与圆形未重叠的4个边界点的面积看做是最短路径允许的误差范围,只要骑手进入这个未重叠的面积区域,就可以看到从ABCD四个边界点地址分别推送的外卖订单。依照Dijkstra算法最短路径原理,进入方与圆未重叠区域的任意坐标,都能拥有抢单资格,但骑手之间相互所处的坐标位置不同,距离4个边界点地址的距离也就各不相同,所以圆并不能保证,接单距离在圆心O点出发都是同等距离。

之所以讲以上东西,是因为地形与接单范围图形也有着直接的利害关系,至于到底有何种联系,以后有机会再讲讲。

全部评论

相关推荐

搜推+大模型算法一面面试题SFT & RL 方向先 answer 后 cot vs 先 cot 后 answer:两种 SFT 范式在训练效果上有什么差异?你是否做过对比实验?标注质量管控:如何保证人工标注数据的准确率达到预期标准?有哪些校验或质控手段?Checkpoint 选择:如何挑选合适的 SFT checkpoint,用于后续的 RLHF 阶段?多模态输入:图片是如何输入到 VLM 模型中的?一张图片通常会被编码为多少个 token?RL vs SFT:你认为强化学习(RL)和监督微调(SFT)的核心区别是什么?训练范式选择:为什么不直接从零开始做 RL,而是要采用「SFT → RL」的两阶段流程?RL 关键机制:什么是重要性采样?为什么在 RL 训练中要引入 CLIP 机制?策略类型差异:On-policy 和 Off-policy 算法的核心区别是什么?各自的适用场景有哪些?八股文(Transformer 基础)因果掩码作用:Transformer Decoder 中为什么必须使用自回归因果掩码?缩放点积注意力:为什么注意力分数要除以d​k​?(补充:Layernorm 前置后,除以d​可将方差归一到 1,避免 softmax 梯度饱和)推荐系统方向生成式推荐 vs 传统推荐:两者的核心区别是什么?生成式推荐的目标是什么?你如何看待它的未来发展前景?指标计算:AUC、HR、NDCG 的计算公式分别是什么?GAUC 和 AUC 的区别在哪里?编码方式:如何在模型中加入时间编码和位置编码?常用的位置编码方法有哪些?Coding:手撕 Multi-Head Attention(MHA) 实现二面面试题SFT & CoT 细节概率分布特性:在「先 cot 后 answer」的 SFT 范式下,为什么越靠后的 token 概率(prob)会越高?蒸馏噪声处理:用大模型蒸馏得到的 CoT 数据存在大量噪声,该如何缓解?VLM 幻觉问题:对 VLM 做 SFT 时,发现模型更信任文本信息,看图时反而容易产生幻觉,有哪些解决思路?RL 进阶PPO 核心:写出 PPO 中 GAE 的公式,并说明如何递归计算每个 token 的优势函数(advantage)?DPO 损失:写出 DPO 算法的损失函数公式?算法对比:GRPO 和 PPO 的核心区别是什么?GSPO 和 GRPO 又有哪些不同?训练稳定性:你遇到过 RL 中的熵塌缩(entropy collapse)和 reward hacking 问题吗?分别有哪些改进方法?最近有哪些新论文提出了新方案?采样困境:在采样类 RL 算法中,on-policy rollout 无法得到正确答案时该怎么办?自蒸馏:了解 Self-Distillation 吗?为什么要做自蒸馏?最近这方向有哪些代表性论文?震荡优化:RL 训练中 reward 或 loss 震荡严重,该如何调整?(提示:可从学习率 lr、KL 散度约束等方向入手)推荐系统进阶结构对比:HSTU 和 Transformer 结构的差异是什么?它和 OneRec 的整体流程有什么不同?SID 优化:如何降低 SID 碰撞率,同时提高特征利用率?量化算法:RQ-VAE 和 RQ-Kmeans 的算法原理分别是什么?OneRec 工程:OneRec 中是如何将 SID 加入模型词表和 tokenizer 的?多模态融合:如何更好地结合文本特征和多模态特征?模型演进:Rankmixer 是如何发展到 Tokenmixer 的?Coding:给定一个行内严格递增的 m×n 矩阵,找到矩阵中第 k 大的数
面试官最爱问的 AI 问...
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务