一、背景
出行场景下的司乘匹配非常复杂。一方面,高峰期出行平台每分钟会接到大量出行需求;另一方面车辆会在路上不停地移动,可能几秒后这个司机就通过了一个路口,或是行驶上了高速路;不仅如此,每一次派单的决定也都在影响未来的司机分布。
这些挑战对算法提出了更高的要求:
- 足够高效:能快速地对司机和乘客进行动态、实时的匹配,秒级做出决策。
- 能基于未来情况的预测,考虑匹配算法的长期收益。
- 要考虑司机收入的同时保障用户的体验,优化整体的交通运输效率。
总而言之:
- 平台需要秒级进行派单决策,每次决策的优化目标均为提升长期收益。这种决策场景正好满足序列决策 (Sequential Decision Making) 的定义,可以使用马尔可夫决策过程 (MDP) 进行建模,并用强化学习求解。
- 针对司乘间多对多的匹配,建模成一个组合优化问题,以获得全局最优解。
二、MDP模型
2.1、MDP介绍
强化学习任务通常使用马尔可夫决策过程(Markov Decision Process,简称MDP)来描述,具体而言:机器处在一个环境中,每个状态为机器对当前环境的感知;机器只能通过动作来影响环境,当机器执行一个动作后,会使得环境按某种概率转移到另一个状态;同时,环境会根据潜在的奖赏函数反馈给机器一个奖赏。综合而言,强化学习主要包含四个要素:状态、动作、转移概率以及奖赏函数。
根据上图,agent(智能体)在进行某个任务时,首先与environment进行交互,产生新的状态state,同时环境给出奖励reward,如此循环下去,agent和environment不断交互产生更多新的数据。
2.2、分单MDP模型
- 智能体 (agent) :定义每个司机为一个智能体。虽然此定义会使问题变为一个多智能体学习 (multi-agent) 求解问题,但单司机作为智能体的方式可大大减少状态和动作空间,使得求解变得可能。
- 状态 (state) :状态定义了司机所处的周边信息。为简化起见,定义司机所处的时间和空间为其状态,并将时空进行量化为 10 分钟的时间段和固定大小的区域。这样,一个完整的 episode(记为一天)由 144 个时间片组成,每个城市包含着数千至数万的区域单位。
- 动作 (action) :动作定义了司机的完成订单或空闲操作。对完成订单而言,司机会经过前往接乘客、等待乘客和送乘客到目的地等过程。
- 状态转移 (state transition) 与奖励函数 (rewards) :完成订单的动作会自动使司机发生时空状态的转移,其同时会带来奖励,我们定义奖励 r 为订单的金额。
司机的一次状态转移,可以从“服务乘客”或者“空跑”中产生。
如果是空跑,司机并不会立刻获得当前的奖励,表达式为:
:表示下一个时刻司机空跑的状态。
:表示对未来收益的折扣因子。
如果是服务乘客,则司机会立刻获得奖励,表达式为:
: 表示服务这个乘客结束时的司机的状态。
:表示司机去接乘客、等待和送乘客的总时间。
司机的状态转移示例图如下:
三、匹配方式
利用学到的价值函数作为输入,并且决定哪些司机和哪些订单进行匹配,在每轮匹配中,我们的目标是为每个司机寻找最好的动作来优化未来全局的收益。
采用KM算法来求解上述问题。因为一个司机要么选择接单要么选择空跑,所以这个二分图是完全图,每个边都是可以存在的。为了降低计算的复杂度,我们消除了所有默认行为的边。因为在实践中,每两轮之间的间隔远远小于价值函数中考虑的时间长度,一个司机不做任何行为可以认为是保持在原状态,因此行为价值函数Q(i,0)实际上等于状态函数,这使得我们可以取消掉所有司机的不作为动作,这使得边的数量大大减少。
通过上述技巧,模型变成:
其中称为advantage function,这个函数可以通过计算服务乘客的期望收益得出。
我们继续分析advantage function,它包含了我们需要考虑的四个因素:
- 订单价格,高价格订单会更具有优势,;
- 司机位置,司机当前的位置有一个负的影响,,因此,在相同的条件下,司机在价值更小的位置时更容易被选择服务订单;
- 订单目的地,选择高价值目的地地区的订单更有优势,因为它会有一个更大的;
- 接乘客的距离,接乘客的距离也会影响advantage function,更长的距离需要更多的时间来接乘客,使得订单的未来价值降低,总体的值降低。
除此之外,实际中还会通过一系列超参数,来平衡用户体验和平台效率,达到用户和平台的双赢。