调度系统的目标
调度系统的核心目标是解决自动驾驶出租车(Robotaxi)的运营问题,可以归纳为三大方向
- 扩大运营规模:提升呼单量(更多渠道)、提升成单率(减少用户取消、优化分单)
- 降低运营成本:自动换电、自动出收车、按需调度、闲时停靠
- 核心指标:派单率、成单率、用户取消率、平均接驾距离、载客里程占比
简单说:让合适的车,在合适的时间,接上合适的乘客,同时管理好车辆的充电、出收车等运营事务,而一个标准的调度派单流程实现思路是
- 车辆出车, 由地勤控制,地勤触发出车 → 写入 Redis 标记 → 读取并将 车辆状态更新 → 车辆进入可派单状态
- 需求挖掘,系统定时扫描:当前哪些车可用(DispatchFlag=2)、哪些乘客在等单,将它们组合成候选需求放入需求池。场景单(停靠、回程、充电等)也在这一步生成。
- 需求撮合,对需求池中的候选组合进行评分和筛选:
- 过滤掉不符合条件的车辆(接单检查)
- 对剩余的车辆按算子打分,比如:
- 接驾EDA(距离越近分越高)
- 用户等待时长算子(等越久分越高)
- VIP用户加分
- 排队加分(队列越短加分越多)
- 84天完单率等用户信用类算子
最终选出分数最高的车-单组合,生成调度指令下发给车辆。
4. 任务执行与状态跟踪:车辆接到指令后按路线行驶,整个过程通过 Session(车辆心跳数据)实时同步状态,包括位置、速度、当前任务、剩余电量等。
调度派单可以用于的业务需求是:
- 派单调度:乘客下单 → 系统找到最合适的车 → 派给这辆车去接乘客
- 供需调度:预测各区域的供需情况,提前把空闲的车调配到需求多的地方,避免”东边车多、西边打不到车”
- 自动化运维:包括自动出车、自动收车、自动换电、OTA升级等非载客任务的自动管理
车辆状态设计
Session 可以理解为车辆的全息档案,每辆车实时上报自己的状态,调度系统的所有决策都依赖它。主要包含
| 数据类别 | 内容举例 |
|---|---|
| 位置信息 | 经纬度、车头朝向、地图高度 |
| 状态信息 | DispatchFlag、电量、是否降级、速度 |
| 任务信息 | 当前需求ID、任务类型、任务状态 |
| 能力信息 | 自动驾驶就绪、乘客服务就绪 |
| 业务扩展 | 子区域、订单类型、出收车状态 |
派单的决定因素
- 车辆状态是否正常
- 车辆是否有连环单
- 车辆是否运营中
- 车辆是否处于代驾状态
调度算法
在调度系统中算法主要在以下业务流程中
1 | 需求产生/挖掘 → 候选过滤 → 车辆-需求撮合 → 任务执行与反馈 |
其中需求挖掘阶段会进行供需预测和缺口识别,撮合阶段会使用匹配模型和评分算法完成订单撮合,也是调度算法的核心。而候选过滤则是通过代码逻辑进行筛选,任务执行和反馈主要依赖其他服务的反馈完成。
需求挖掘
输入主要包括:
1 | 乘客实时订单 |
输出是一个或多个待调度需求,也可以理解为调度系统内部的需求对象:
1 | 乘客订单 |
其中的供需预测和区域缺口较为有趣,可以通过下面的等式计算:
1 | 区域需求+历史订单分布+预测需求-已有运力-在途运力-即将释放运力=运力缺口 |
这里用到的是预测模型、热度算法、缺口计算和阈值规则。
撮合阶段
输入主要包括:
1 | 一个待调度需求 |
输出是:
1 | 一个需求 + 一辆目标车辆 + 一组决策结果 |
撮合阶段的主要流程是
1 | 硬约束过滤->软目标评分->排序和选择->派单前再次确认。 |
首先根据车辆session情况过滤,将可用车放入需求池,然后通过评分机制来匹配车辆
1 | 实际得分=接驾距离得分 + 等待时长得分 + VIP得分 + 排队得分 + 其他业务算子得分 |
通过算子的设计完成撮合算法,另外还要在最终下单前检查车辆状态是否有改变。