调度系统的目标

调度系统的核心目标是解决自动驾驶出租车(Robotaxi)的运营问题,可以归纳为三大方向

  • 扩大运营规模:提升呼单量(更多渠道)、提升成单率(减少用户取消、优化分单)
  • 降低运营成本:自动换电、自动出收车、按需调度、闲时停靠
  • 核心指标:派单率、成单率、用户取消率、平均接驾距离、载客里程占比
    简单说:让合适的车,在合适的时间,接上合适的乘客,同时管理好车辆的充电、出收车等运营事务,而一个标准的调度派单流程实现思路是
  1. 车辆出车, 由地勤控制,地勤触发出车 → 写入 Redis 标记 → 读取并将 车辆状态更新 → 车辆进入可派单状态
  2. 需求挖掘,系统定时扫描:当前哪些车可用(DispatchFlag=2)、哪些乘客在等单,将它们组合成候选需求放入需求池。场景单(停靠、回程、充电等)也在这一步生成。
  3. 需求撮合,对需求池中的候选组合进行评分和筛选
    • 过滤掉不符合条件的车辆(接单检查)
    • 对剩余的车辆按算子打分,比如:
      • 接驾EDA(距离越近分越高)
      • 用户等待时长算子(等越久分越高)
      • VIP用户加分
      • 排队加分(队列越短加分越多)
      • 84天完单率等用户信用类算子

最终选出分数最高的车-单组合,生成调度指令下发给车辆。
4. 任务执行与状态跟踪:车辆接到指令后按路线行驶,整个过程通过 Session(车辆心跳数据)实时同步状态,包括位置、速度、当前任务、剩余电量等。

调度派单可以用于的业务需求是:

  1. 派单调度:乘客下单 → 系统找到最合适的车 → 派给这辆车去接乘客
  2. 供需调度:预测各区域的供需情况,提前把空闲的车调配到需求多的地方,避免”东边车多、西边打不到车”
  3. 自动化运维:包括自动出车、自动收车、自动换电、OTA升级等非载客任务的自动管理

车辆状态设计

Session 可以理解为车辆的全息档案,每辆车实时上报自己的状态,调度系统的所有决策都依赖它。主要包含

数据类别 内容举例
位置信息 经纬度、车头朝向、地图高度
状态信息 DispatchFlag、电量、是否降级、速度
任务信息 当前需求ID、任务类型、任务状态
能力信息 自动驾驶就绪、乘客服务就绪
业务扩展 子区域、订单类型、出收车状态

派单的决定因素

  1. 车辆状态是否正常
  2. 车辆是否有连环单
  3. 车辆是否运营中
  4. 车辆是否处于代驾状态

调度算法

在调度系统中算法主要在以下业务流程中

1
需求产生/挖掘 → 候选过滤 → 车辆-需求撮合 → 任务执行与反馈

其中需求挖掘阶段会进行供需预测和缺口识别,撮合阶段会使用匹配模型和评分算法完成订单撮合,也是调度算法的核心。而候选过滤则是通过代码逻辑进行筛选,任务执行和反馈主要依赖其他服务的反馈完成。

需求挖掘

输入主要包括:

1
2
3
4
5
6
乘客实时订单
供需预测和区域缺口
车辆当前状态
车辆运营计划
出车、收车、停靠、充换电、OTA 等场景规则
项目、区域、运营时段等业务配置

输出是一个或多个待调度需求,也可以理解为调度系统内部的需求对象:

1
2
3
4
5
6
7
乘客订单
供需缺口
停靠任务
回程任务
充电/换电任务
OTA任务
生成待调度需求

其中的供需预测和区域缺口较为有趣,可以通过下面的等式计算:

1
区域需求+历史订单分布+预测需求-已有运力-在途运力-即将释放运力=运力缺口

这里用到的是预测模型、热度算法、缺口计算和阈值规则。

撮合阶段

输入主要包括:

1
2
3
4
5
一个待调度需求
当前可参与调度的车辆集合
车辆与需求之间的距离、区域、状态、能力等特征
匹配约束
各类评分算子和策略配置

输出是:

1
一个需求 + 一辆目标车辆 + 一组决策结果

撮合阶段的主要流程是

1
硬约束过滤->软目标评分->排序和选择->派单前再次确认。

首先根据车辆session情况过滤,将可用车放入需求池,然后通过评分机制来匹配车辆

1
实际得分=接驾距离得分 + 等待时长得分 + VIP得分 + 排队得分 + 其他业务算子得分

通过算子的设计完成撮合算法,另外还要在最终下单前检查车辆状态是否有改变。


本站由 Edison.Chen 创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。