这是一个非常好的问题,也是很多人在点外卖时都会遇到的困惑。简单来说,外卖小哥在你附近转圈,绝大多数情况下并不是调度算法“傻”,而是在复杂现实约束下,试图达成一个全局最优解的动态过程。算法“算”的东西远比我们想象的要多。
核心算法目标:全局效率最大化
算法的核心目标不是让你这一单最快,而是在一个时间段内,让所有订单、所有骑手、所有商家组成的整个系统效率最高、成本最低。你的“等待”可能是系统为达成其他更重要目标而做出的权衡。
算法具体在“算”什么?(拆解来看)
当骑手在你附近转圈时,背后可能是以下一种或多种情况的叠加:
1. 合并顺路订单(路径优化)
这是最常见的原因。算法会努力把附近几个同一方向的订单打包给一位骑手。
- 场景:骑手APP里可能有2-3单,取餐和送餐地点呈三角形或Z字形。为了总路线最短,他可能需要先去A店取餐,然后路过你家附近去B店取餐,最后按一个优化的顺序(比如先送你楼上的C,再送你,最后送D)依次送达。所以他在你附近“经过”,可能是在完成另一个订单的取餐或送餐。
- 算法在算:如何规划一条总耗时最短、总距离最短的“取送路径”。这本质上是一个“旅行商问题”的变种,非常复杂。
2. 等待“拼单”或“调度”
- 等拼单:系统预测很快会在你所在的区域或商家处有新订单,让骑手稍作等待,凑成一单再一起送,可以大幅提升运力效率。对他来说可能是“堵车”或“在等餐”,对你来说就是“转圈”。
- 等调度:骑手可能是系统调来的“机动兵力”,他的主要任务不是立刻送你这一单,而是准备接应该区域可能出现的突发高峰或订单缺口。
3. 商家的出餐速度
这是算法极其重要的一个变量。
- 场景:你的餐可能早就做好了,但骑手手里另一单的餐(可能和你同一家店,也可能是附近的网红店)还没做好。系统会让骑手在附近等待或执行其他短任务,而不是让他空跑过来等你,然后再去等另一单。
- 算法在算:如何根据历史数据和实时信息,精准预测每家店的出餐时间,并据此安排骑手的到达时间,减少骑手在店内的无效等待。预测不准或商家出餐慢,就会导致骑手“空转”。
4. 复杂的骑手状态与规则
- 骑手疲劳度/工作时长:系统可能会优先派单给状态更好、在线时间更合适的骑手。
- 派单权重:平台可能会考虑骑手的等级、准时率、拒单率等,进行加权派单。
- 公平性:避免某些骑手一直接到长距离低价值的订单,需要动态平衡。
- 导航与交通现实:算法规划的“最优路径”可能包含小路、单行道、无法停车的地方,骑手需要在实际路况中调整,看起来就像在绕路。
5. 动态的供需匹配
- 区域运力平衡:如果某个区域突然骑手过多,而订单不足,系统可能会“按住”一些骑手,让他们缓慢移动或等待,以备随时响应新订单,同时避免他们全部涌向热点区域导致拥堵。
- 订单优先级:可能有比你更“紧急”的订单(比如预定单、高价值订单、用户投诉过的订单)被优先处理。
为什么看起来“反直觉”?
对人类来说,“直线距离最近=应该最快送到”是直觉。但对算法来说:
- 距离 ≠ 时间:200米外的订单,如果需要绕立交桥、等红灯、进小区找楼,可能比500米外路边即停即走的订单更耗时。
- 单点最优 ≠ 全局最优:立刻送你这一单,可能导致骑手后续路线更长、其他用户等待更久、系统整体效率下降。
总结
当你看到外卖小哥在附近转圈时,他很可能正在:
- 执行系统规划的、包含多个订单的复杂取送路线。
- 等待其他订单(凑单)或等待其他商家的餐食。
- 在动态的系统中,作为一枚“棋子”被调度以平衡区域运力。
调度算法就像一个高速运转的“大脑”,在同时处理成千上万的订单、骑手、商家、道路的实时数据,它做的每一个微小的延迟决策,背后可能都是为了让整个系统在接下来的30分钟到1小时内更流畅地运转。
当然,系统并非完美,预测不准、信息不同步(如商家卡餐未及时上报)、异常交通状况等都可能导致“无效转圈”。如果你实在着急,联系骑手询问具体情况(比如“是不是在等其他餐?”)通常是最直接的方式。