论文阅读:滴滴出行通过强化学习进行订单调度

Ride-hailing Order Dispatching at DiDi via
Reinforcement Learning 2020

摘要 (Abstract)

订单派发是大规模网约车平台(如滴滴平台)核心市场引擎的关键组成部分,该平台每天要在数千万的量级上持续将乘客的出行需求与司机进行匹配。在此背景下,由于供需关系具有动态性和随机性,网约车订单派发问题极难求得最优解。系统响应时间、可靠性以及多目标优化等考量,进一步增加了该问题的复杂度。在本文中,我们阐述了我们解决该优化问题的方法是如何演进的------从最初的组合优化方法,发展到包含半马尔可夫决策过程(semi-MDP)模型和深度强化学习的方法。我们探讨了方案开发过程中的各种实际考量,以及该方案对真实业务带来的实际影响。

关键词:网约车市场、订单派发、强化学习、数据驱动决策

引言 (Introduction)

随着智能手机在日常生活中的日益普及,在线网约车平台------即 Alonso-Mora 等人(2017年)所讨论的即时出行(mobility-on-demand)系统------已成为提供更及时、更个性化交通服务的可行解决方案,并由滴滴、Uber 和 Lyft 等公司引领发展。城市人口更有可能寻求替代购买私家车的出行方式,目前城市人口分别占中国总人口的 59%(中国国家统计局 2019年数据)和美国总人口的 82%(密歇根大学可持续发展研究中心 2019年数据)。这些平台通过将潜在的出行需求连接 my 匹配的司机,使得闲置的空网约车资源能够被更有效地利用,从而满足日益增长的即时交通需求。促成并完成出行交易的环境即为"交易市场"(marketplace)。如图 1 从乘客视角所示,该市场允许乘客提交出行请求,平台提供报价,并将空闲司机与该行程进行匹配。即时出行市场的效率决定了出行请求被分配的速度以及乘客到达目的地的快慢。这在很大程度上取决于供需分布的协同效应。如果局部需求超过供应,乘客就必须等待其请求得到响应。反之,部分司机就会处于闲置状态,其车辆利用率也会随之降低。通常有三个主要杠杆可用于优化市场运营:订单派发(匹配)、司机重新调度(路线规划)和定价。订单派发和司机重新调度关系到供应分布,而定价则控制着需求分布。在本文中,我们专注于单人出行行程的订单派发优化。

订单派发在大规模网约车平台(如滴滴)的市场引擎中起着核心作用,该平台每天都需要将海量的出行请求持续匹配给司机。正如 Özkan 和 Ward(2020年,第31页)所言:"匹配决策对于共享出行公司具有首要的重要性。" 我们可以将订单匹配视为通过出行订单对司机进行重新调度的另一种方式,并且这种调度移动是相当确定性的(从行程起点到终点)。司机的时空分布直接影响到被匹配的出行请求数量、乘客被接单前的等待时间,并最终影响到能够完成的订单数量。市场的效率在很大程度上取决于这些重要因素。在此背景下,由于供需的动态性和随机性,网约车订单派发问题很难求得最优解。系统响应时间、可靠性以及多个业务目标的考量,进一步增加了其复杂性。

在本文中,我们首先详细描述了网约车订单派发问题,并将其转化为数学优化术语。然后,我们阐述了我们解决该优化方法的发展历程------从近视的(myopic)组合优化方法,演进到包含用于长期优化的深度强化学习方法。在整个阐述过程中,我们还讨论了自部署开始,在实施和生产实践过程中遇到的实际问题。所有核心技术章节在附录中都有对应的子章节,其中包含额外的数学细节。

网约车订单派发(匹配) (Ride-hailing Order Dispatching (Matching))

在网约车市场中,乘客提交包含起点和终点的打车请求,系统将其转换为 GPS 坐标。平台会返回该行程的报价。乘客可以继续提交订单,也可以取消。如图 1 左侧的截图所示。订单一经提交便会进入派发系统,系统会尝试按照特定的派发策略将其分配给一位空闲司机。分配时间通常由派发策略设定,且不能早于订单提交时间。如果当时没有符合条件的司机,订单将在系统中等待,直到平台能够将其与司机匹配。在此期间,乘客可以取消订单。如果乘客没有取消订单,系统就会将司机分配给该订单,司机可以接受或拒绝该分配。(由于司机受到滴滴提供的各种奖励机制的激励,他们很少拒绝分配。)接受分配后,司机从当前位置前往接乘客。系统会向乘客提供预计的接驾时间和送达时间。(参见图 1 右侧的截图。)此时,乘客仍可决定取消订单,例如因为预计的接驾等待时间过长。司机接到乘客并完成行程后,乘客支付费用,司机重新变为空闲状态,可被分配给另一个订单。司机的收入是实际价格中预先确定的百分比。关于订单的信息只有在它进入系统时才是可知的。我们的问题专注于在考虑司机收入和乘客接驾等待时间的情况下,为所有订单寻找一种最优的在线派发策略。

优化问题 (Optimization Problem)

我们的优化时间跨度为 24 小时。一个行程订单包含以下信息:GPS 坐标形式的起点位置(纬度、经度)、相同形式的终点位置、订单提交时间、行程分配(给司机)时间、接驾时间、送达时间以及价格。请注意,在派发时,接驾时间和送达时间必须结合候选司机,通过一个预测预估到达时间(ETA)的独立模块以及一个预估费用的模块来进行计算。司机由其最近变为空闲的时间以及司机当前的时空状态来表示。如果司机正在服务中,则其最近变为空闲的时间将被设为无穷大。如果行程分配时间晚于司机的最近空闲时间,则该订单有资格分配给该司机。订单派发策略是一个将订单映射到空闲司机的函数。理所当然地,如果多个订单具有相同的派发分配时间,那么派发策略要确保两个订单不会匹配给同一个空闲司机。如果没有可用司机,则该订单不进行匹配,并且其派发请求时间将被推进到一个新的决策时间点,直到空闲司机集合不再为空。如果订单在履行前被取消,我们将价格设为 0。订单分配后发生取消,通常是因为接驾距离过长或预计的接驾等待时间过长。

我们兼顾了以司机为中心和以乘客为中心的目标。我们以司机为中心的目标是最大化平台上司机的总收入。我们把该目标的具体数学公式推导留在了附录中。以乘客为中心的目标是最小化所有已分配订单的平均接驾距离。这在接驾等待时间方面调控了乘客的体验。相比于等待时间更倾向于选择接驾距离的原因在于,接驾距离在分配时是确定性的,而接驾等待时间则必须通过一个独立的 ETA 预测模块,基于时间、交通和天气状况等诸多因素进行估计。我们还监控了响应率和完单率(fulfillment rate)方面的其他市场效率指标,这些指标同样会影响乘客对平台的体验。响应率定义为所有已提交订单中分配给司机的订单百分比。完单率定义为所有已提交订单中最终完成的订单百分比。同样,这些指标的精确数学定义见附录。我们在评估过程中比较了不同算法在这些指标上的表现。

生产要求与约束 (Production Requirements and Constraints)

由于我们的方案目标是进行生产部署,用于在真实的滴滴市场中匹配订单和司机,因此生产系统的要求和约束对我们对求解方法的选择有着重大影响。对于一个服务于数百个城市的大规模派发系统而言,计算效率和系统可靠性是任何解决方案的首要要求。这意味着神经网络推理的任何实现都必须足够快,运行求解算法且被生产系统调用的服务必须能够承受高每秒查询率(QPS),并且训练和线上服务流水线的复杂度必须可控。真实世界的系统需要具备足够的灵活性,以适应不断变化的业务需求,其中一些常见的例子包括匹配资格、订单优先级和多目标优化。如果模型中尚未显式地考虑到这些要求,它们通常会基于规则并作为后处理函数进行应用。

相关工作 (Related Works)

网约车领域的订单派发(匹配)问题与运筹学文献中的几个经典 NP-hard 组合优化问题相关。旅行商问题(TSP)调度一辆车在返回其大本营(depot)之前访问多个已知的目的地。车辆路径问题(VRP)将 TSP 推广到了一个车队上。我们在本文中考虑的订单派发问题与取送货问题(PDP)或预约拨车出行问题(DARP)最为密切相关,在这些问题中,车辆从中央大本营派发并返回,以满足一组具有单一起点和终点的运输请求。网约车订单派发问题与 DARP 的不同之处在于,它没有中央大本营,且行程请求并非全部预先已知。因此,与经典的静态问题相比,订单派发问题是一个动态问题。

订单派发已被公认为共享出行应用中的一个重要研究课题。许多工作研究了动态匹配的优化问题(参见 Özkan 和 Ward 2020 及其参考文献),这与早期一些工作中的静态匹配(例如最近司机匹配,Bailey 和 Clark 1987)不同。其中许多工作假设司机和订单的到达率在时间上是齐次的(同质的)。Özkan 和 Ward(2020年)考虑了时变参数,但假设这些到达率是给定的,而 Miao 等人(2016年)提出了一种后退地平线控制(receding horizon control)方法。依赖于未来供需参数估计的方法通常对预测误差非常敏感。Kümmel 等人(2016年)和 Yan 等人(2019年)研究了带有时间窗的订单匹配,以对司机和订单进行批量(波次)处理。

近来,在编码-解码框架下,带有深度神经网络的机器学习方法已被用作解决 TSP 和 VRP 的新方法(Bello 等人 2017,Nazari 等人 2018,Vinyals 等人 2015)。强化学习已被应用于司机寻路(routing)问题,以提高司机获得订单的前景。Verma 等人(2017年)使用了蒙特卡洛学习方法,Shou 等人(2020年)使用了动态规划来学习状态-动作价值函数。Oda 和 Joe-Wong(2018年)在分布式环境下采用深度 Q 网络(DQN),以考虑车队管理问题的多智能体特性。Q 网络是一个由神经网络表示的状态-动作价值函数。

求解方法 (Solution Approach)

我们的两个主要目标并不排斥。平台上司机的总收入与司机的总服务时间内(即司机正在服务订单的时间)密切相关。当然,由于行程价格通常取决于行程所需的时间,收入与服务时间之间的关系并不是线性的。然而,最大化总服务时间有助于增加司机的总收入。假设司机数量及其各自的(在线)可用时间是预先固定的,那么最大化总服务时间就相当于最小化司机的接驾等待时间和空闲时间之和,因为司机的总可用时间是固定的。减少接驾等待时间还会降低订单的取消概率,这直接影响到行程的最终达成。我们从一个简单的组合优化方法开始,它为我们的框架奠定了基础,并充当了策略生成器。为了开发一种能够在更长跨度上进行优化的方法,我们通过开发定制算法来计算给定派发策略的长期价值,进而引导策略生成器,从而将强化学习融入到我们的求解框架中。正如我们稍后将讨论的,我们的框架属于 Sutton 和 Barto(2018年)所探讨的广义策略迭代(generalized policy iteration)范畴。

组合优化 (Combinatorial Optimization)

订单到达后,将其派发给最近的可用司机是一种简单常用的派发方法(Özkan 和 Ward 2020,Yan 等人 2019),但它是所有备选方案中最目光短浅(myopic)的方法。解决网约车市场中供需随机性的一个基本步骤是创建派发窗口,将未处理的订单和可用的司机汇集在一起并同时进行匹配(Kümmel 等人 2016,Yan 等人 2019)。图 2 展示了这一过程。派发窗口的长度 Δ t \Delta t Δt 是可调的,通常为几秒钟。以牺牲更长的订单响应时间为代价,对订单和司机进行批量处理可以实现更趋于"全局"的优化。在一个派发窗口内,有 n n n 个未处理订单和 m m m 个空闲司机,分别用 O d i s p O_{disp} Odisp 和 X d i s p X_{disp} Xdisp 表示。通常情况下 n > m n>m n>m,这意味着 O d i s p O_{disp} Odisp 的一个子集将不会与任何司机匹配,而必须等待下一个窗口。反之,一组 X d i s p X_{disp} Xdisp 的司机子集将被留空,直到下一个窗口。批处理窗口内的订单会被保留,直到该窗口的结束时间才进行匹配。我们通过求解附录"组合优化"中问题 (3) 所定义的线性指派问题来生成派发策略。

考虑到各种业务可行性约束,基本的生产基线方法一直是:将订单与司机之间潜在匹配的边权重设置为接驾距离的负值。值得注意的是,边的权重并没有被设置为价格(尽管人们可能会直观地认为这能实现总收入最大化)。原因是:如果这样做,当 n > m n>m n>m 时,解法就会变成按价格降序对 O d i s p O_{disp} Odisp 进行排序,并将任何司机分配给价格靠前的订单,这可能会导致更长的接驾距离(相比于距离最小化而言),并且会导致系统反复忽略短途订单,从而带来糟糕的用户体验。

与最近司机匹配策略相比,带有批处理窗口的组合优化能够在接驾距离方面产生更优的派发策略。然而,为了不影响乘客体验,批处理窗口的长度通常必须很小。该方案由于具有近视(目光短浅)的本质,意味着仍有进一步优化的空间。Özkan 和 Ward(2020年)使用一个例子说明了由于缺乏对下一个批处理窗口中需求的可见性而导致的潜在效率损失。

尽管上述组合优化方法是近视的,但它具有许多理想的特性,使得该框架非常适合生产系统。首先,该优化算法在文献中已经得到了充分的研究,并且有快速的实现方案;例如,Lopes 等人(2019年)讨论了如何满足生产环境的 QPS 要求。其次,该方法足够灵活,可以通过调整边权重来适应各种具体的业务需求,我们将在下文的"生产要求与约束"章节中对此进行讨论。

半马尔可夫决策过程 (MDP) 模型 (Semi-Markov Decision Process (MDP) Model)

为了进一步改进上述方案,非常有必要考虑当前匹配决策的更长远影响,因为它们会影响未来时间步中司机的可用性和分布。在"优化问题"章节中描述的订单派发系统是一个以司机为智能体的协同多智能体系统。智能体的数量给解决此类多智能体问题带来了巨大挑战,因为联合动作空间会迅速变得难以控制(无法求解)。另一个复杂之处在于,每个智能体符合条件的动作空间(即待匹配的订单集)会随着时间而变化。Holler 等人(2019年)展示了直接学习以系统为中心的智能体的全局派发策略所面临的挑战。因此,为了开发出适用于生产的实际解决方案,我们采用了以司机为中心的视角来审视该问题。

正如上面"优化问题"章节中所讨论的,派发决策的时间依赖性表明,可以将每位司机的派发轨迹建模为一个 MDP(马尔可夫决策过程),它能够自然地对旨在优化长期目标的序贯决策过程进行建模(Xu 等人 2018)。在该模型中,每个司机都是一个独立的智能体。司机的状态 s s s 由位置和时间组成,两者都可以被离散化:司机的位置用如图 3 所示的六边形网格系统表示,时间则用时间桶(通常为几分钟)表示。如果一个状态的时间部分是一天的结束时间(或一个时间步/回合的结束),则该状态为终止状态。

司机的动作 a a a(或者更确切地说是系统强加给司机的动作)是去履行某一个特定的订单,包括在没有乘客的情况下闲置或巡游。在给定状态下执行动作的奖励 r r r 仅仅是订单的价格,如果司机闲置,奖励可以为零。状态转移流(dynamics)为:当前时空桶中的司机完成一个订单后,司机的状态会转变为目的地对应的时空桶,并且司机获得一份奖励,该奖励相当于价格的固定百分比,或等同于价格金额。在状态转移中,闲置或空车巡游动作等同于一个价格为零的订单。因此,在给定 s s s 和 a a a 的情况下,状态转移和奖励都是确定性的,而在状态 s s s 下的动作空间则是随机的。(有关这方面的更多细节,请参见附录中的"半 MDP 模型"。)该 MDP 的目标是最大化智能体(司机)在一个回合(episode)内的累积奖励。由此也可以得出,该问题的目标函数仅仅是所有司机在这一以司机为中心的 MDP 目标的总和。

该模型包含了在时间上延伸的动作过程,因此它实际上是一个半 MDP(如 Tang 等人 2019 所述),并且其动作是"选项"(options,Sutton 等人 1999),我们也用 o o o 来表示。这与它的含义是一致的,因为一个"选项"就是一个出行订单,而保持空闲则被视为一个零距离的行程。出行订单的数学定义见附录中的"优化问题"。大多数与 MDP 相关的理论只需稍作修改便可沿用(Sutton 等人 1999)。在一个行程部分跨越多个时间单位的"选项"上累积的奖励 r r r 需要进行适当的折扣(discounted)。准确定义请参考附录中的公式 (7)。智能体的策略 π d \pi_d πd 是一个将司机状态映射到"选项"的函数。我们注意到,在实际操作中,系统是通过(例如)求解线性指派问题来执行中心化的派发策略的。尽管如此,(系统策略)可以通过对偶关系提炼为司机的独立策略 π d \pi_d πd。

与 MDP 类似,半 MDP 的状态价值函数 V π d ( s ) V^{\pi_d}(s) Vπd(s) 被定义为:在给定状态 s s s 下,遵循策略 π d \pi_d πd,在整个"选项"执行过程中获得的长期折扣累积奖励。回想一下,状态空间是由六边形网格系统和时间桶离散化的。因此,在这种情况下, V π d ( s ) V^{\pi_d}(s) Vπd(s) 可以用表格形式(tabular form)来表示。类似地,状态-选项价值函数 Q π d ( s , o ) Q^{\pi_d}(s,o) Qπd(s,o) 定义为:在给定当前状态 s s s 并在 s s s 上执行选项 o o o 的情况下,通过遵循策略 π d \pi_d πd 在整个选项过程中获得的长期折扣累积奖励。

表格时序差分学习 (Tabular Temporal-Difference Learning)

利用我们在上一节讨论的半 MDP 模型,我们的第一种强化学习(RL)方法(Xu 等人 2018)采用了如图 4 所示的广义策略迭代框架(Sutton 和 Barto 2018)。在策略评估阶段,利用在训练期间(例如一个月)收集的所有司机的行程和空闲移动数据,通过表格时序差分(TD)学习(Sutton 1988,确切地说是 T D ( 0 ) TD(0) TD(0))来学习 V π d V^{\pi_d} Vπd。我们可以将 V π d V^{\pi_d} Vπd 理解为一个普通司机在给定的位置和时间下的长期状态价值(一直计算到一天结束)。该表格方案遵循上一节中定义的时空网格系统。 T D ( 0 ) TD(0) TD(0) 通过自举法(bootstrapping)学习价值函数,即利用上一次迭代的估计值来构建更新的目标。附录"表格时序差分学习"中的算法 1 展示了 T D ( 0 ) TD(0) TD(0) 的关键步骤,我们将其应用到了上一节的半 MDP 中。内层循环中的更新项是状态转移经验的 TD 误差(TD-error),而 α \alpha α 是步长。

相对于 V π d V^{\pi_d} Vπd 改进后的系统派发策略 π ′ \pi^{\prime} π′,是在匹配阶段通过上文讨论的组合优化生成的。边权重被计算为:利用 V π d V^{\pi_d} Vπd 算出的订单与司机之间每种可能匹配的样本(预测)优势(Advantage,Baird 1993)。(参见附录中的公式 (13)。)以司机为中心的策略 π d \pi_d πd 并没有被显式地计算和使用。相反,以司机为中心的价值函数被用来生成系统策略 π \pi π。我们强调,由于状态价值函数可以离线学习,因此线上服务的复杂度与基于距离的近视贪婪方法完全相同,即只需动态求解一个线性匹配问题。

如果将订单分配给该司机,则优势(advantage)可以被视为相对于司机当前时空点的长期价值的相对变化。生成的策略 π ′ \pi^{\prime} π′(通过优势函数)相对于 V π d V^{\pi_d} Vπd 是集体贪婪(collective greedy)的。样本优势的形式与 TD 误差(TD-error)的形式相同。由于增加预估的在途时间(接驾时间)会降低优势值,因此边权重自然地对长接驾距离进行了惩罚。新策略在司机独立长期选项优势的引导下,在近似最大化司机总收入的同时,避免了乘客遭遇过长的接驾等待时间。策略更新的频率是一个可调变量,可以从几天到几周不等。我们在附录的算法 2 中正式确立了用于派发的强化学习框架。如上所述,该框架包含两个阶段:策略评估与策略改进。

注 1:当在派发窗口内每个司机都能匹配到订单时,使用优势函数(advantages)与使用状态-选项价值(state-option value,这看起来可能是分配边更自然的定义)会产生相同的解。当一个批次内的可用司机数量超过未服务订单数量时,在保持方案总价值不变的前提下,使用优势函数会鼓励去匹配那些当前状态长期价值比其他司机更低的司机。这是一个非常理想的特性,因为除了能够通过惩罚长接驾距离以确保良好的乘客体验外,它还能促进公平性,并有助于提升平台上司机的整体体验。

深度价值网络 (Deep Value Networks)

表格时序差分(TD)学习使我们能够针对单个司机的平均长期价值来改进系统派发策略,但它也存在一些局限性。(1)表格方法受限于"维度灾难"。随着用于表示智能体状态的特征数量增加,价值函数的表格大小会迅速变得难以控制(无法求解)。(2)表格 TD 方法极易受到训练数据稀疏性的影响(见图 5),因为它无法以原则性的方式泛化到过去没有任何司机访问过的时空状态。(3)表格学习方法不支持不同城市模型之间的知识共享机制。同时,仅使用时空信息不足以捕捉司机状态的复杂本质。需要扩充状态空间,以使策略能够对实时供需状况做出更敏捷的响应,并更好地适应司机的异质性(个体差异)。派发系统必须支持可能多达数百个且数据可用性迥异的城市。因此,训练方法需要能够利用不同城市模型之间的知识共享,以缩短训练时间并提高学习质量。考虑到所有这些因素,我们为我们的广义策略迭代框架开发了一种基于深度神经网络的策略评估算法。

在价值迭代或 Q 学习中使用作为非线性价值函数逼近器的神经网络,会带来众所周知的收敛性问题(Sutton 和 Barto 2018)。我们首先证明了,在 DQN(Mnih 等人 2015年)框架内训练的、结合了一组实用启发式规则的简单神经网络模型,能够有效地应用于单司机派发任务和迁移学习(Wang 等人 2018年)。与仅将状态作为输入并为每个动作提供多个输出的 DQN 不同,我们的 Q 网络将状态和"选项"(option)同时作为输入,因为选项(即行程)空间本质上是连续的,如果对其进行离散化,其空间将极其庞大。通过一种能够区分网络中可迁移和不可迁移组件的新型双通道(dual-pathway)网络架构,促进了城市之间的迁移学习。这种架构随后也被应用到了我们全新的深度价值网络中(Tang 等人 2019年)。确保成功训练的关键启发式规则包括:采用 Double DQN(Van Hasselt 等人 2016年)、提高从经验回放缓冲区(replay buffer)中抽取终止状态转移经验的频率,以及利用模拟的经验数据来增强真实的行程训练数据。

由于"选项"(option)是输入的一部分,Q 网络在状态空间和选项空间中也都面临着严重的数据稀疏性挑战。此外,与使用状态价值函数相比,匹配行程的价格和接驾距离对网络输出的影响方式不够显式。因此,我们随后开发了小脑价值网络(CVNet,Tang 等人 2019年),用于学习以司机为中心的状态价值函数。为多司机订单派发开发 CVNet 需要在网络设计和训练中引入几项创新特性。

在给定时间内,相似地理位置的状态价值往往也是相似的,但由于交通网络的密度差异以及自然地理特征的不同,空间点的组合规模(粒度大小)可能会有所不同。因此,无论是单一分辨率的网格系统,还是原始的 GPS 坐标,对于状态表示和学习而言都不是最优的选择。CVNet 通过使用多分辨率六边形网格系统进行分层粗编码(hierarchical coarse-coding),从而对地理空间进行量化(Sahr 2011,Brodsky 2018,Uher 等人 2019年)。随后,通过将小脑模型关节控制器(CMAC,Albus 1971年)与嵌入矩阵相结合,构建出状态表示。关于 CVNet 网络架构的更多细节,读者可参阅附录中的"深度强化学习"部分。整体的网络与训练架构如图 6 所示。

注: 图的左侧和中部展示了使用多分辨率六边形网格系统和小脑嵌入的分层粗编码(hierarchical coarse-coding)。 q 1 q_1 q1、 q 2 q_2 q2 和 q 3 q_3 q3 代表量化函数, θ M \theta^M θM 表示嵌入矩阵的参数,其具体定义见附录中的"深度强化学习"部分。

在匹配阶段,依然通过公式 (13) 计算边权重以生成派发策略。CVNet 可以很容易地被提炼(蒸馏)为表格函数形式,例如,通过从每个网格中抽取起点样本。因此,CVNet 与我们框架(算法 2)内的表格策略评估方法是完全向后兼容的。图 7 展示了早晚高峰前,CVNet 在中国某主要城市的网格地图上输出的两个图表。颜色越深,价值(value)就越高。很容易看出 CVNet 在一天中这两个截然不同的时间段所捕捉到的不同模式:在早高峰前,对于普通司机而言,郊区的值更高,因为有大量前往市中心的乘客,而市中心随后将成为高需求的发源地。在晚高峰前,随着出行模式的逆转,市中心拥有更高的价值。由于该时间已接近一天(回合)的结束,高峰时段的行程在很大程度上决定了这些位置的价值。

迁移学习

采用深度强化学习的核心优势之一,在于它能够利用在某一城市训练中所学到的知识,来提高其他城市的训练效率和质量。为了在不同城市之间进行模型的迁移学习,我们进一步将神经网络细化为一种双通道(dual-pathway)架构(Wang 等人 2018年,Tang 等人 2019年);其中包含两组网络层,分别对应于位置特征( l l l)以及可迁移特征(如时间 μ \mu μ、时空位移和局部供需上下文特征 v v v)。这两个通道通过横向连接(lateral connections)相连。图 8 展示了这种网络架构,它被称为"相关特征渐进式迁移"(CFPT)架构。一旦源城市的网络训练完成,该网络中的可迁移模块就会被移植到目标网络中的相应位置,而目标网络中不可迁移的模块则继续通过来自目标城市的新数据进行更新。

注: l l l、 μ \mu μ 和 u u u 分别代表位置、时间以及上下文特征。目标网络上方通道中的蓝色区块是目标城市特有的网络层。两个网络下方通道中的绿色区块是源城市与目标城市之间可迁移的模块。 W ( t ) W^{(t)} W(t) 和 U ( c ) U^{(c)} U(c) 分别是不可迁移模块和横向连接的网络权重。目标城市网络中带有虚线(已冻结)的部分在训练期间不进行更新。

性能评估

用于评估的核心关注指标已在附录的"优化问题"子章节中进行了定义。在本节中,我们重点对实证评估的过程进行叙述。关于详细的实验结果,读者可参阅 Xu 等人(2018年)、Wang 等人(2018年)以及 Tang 等人(2019年)的研究。

仿真模拟

仿真模拟是强化学习(RL)研究中不可或缺的一部分。通常,智能体(agents)是在相同的环境中进行训练和评估的,例如经典的玩具游戏(Tsitsiklis 和 Van Roy 1996)、Atari 街机游戏(Mnih 等人 2015,Schulman 等人 2017)以及国际象棋游戏(Silver 等人 2016),这些全都是仿真模拟。对于工业级应用而言,学习到的策略必须部署在真实的生产系统中,而真实系统的动力学特征通常要复杂得多,且具有高度的随机性。因此,我们采用了从真实的行程和轨迹数据中学习价值函数的方法,而不是依赖仿真模拟环境,并且我们的方法在广义策略迭代框架下运行良好。在我们的设定中,我们利用仿真模拟来评估某一特定策略的相对性能表现。尽管我们针对真实世界的数据进行了仔细的校准,但我们开发模拟器的终极目标并不是在微观(精细)颗粒度上完全复制真实世界的交易市场(这很难做到)。相反,对于模拟器而言,更重要的是捕捉订单、司机以及派发系统之间相互作用的基本动力学特征(动态关联)。

我们的仿真模拟通过按天重放历史乘客订单,并在给定的派发策略下模拟司机的行驶轨迹和行为来运行。文献中普遍采用类似的作法(Alonso-Mora 等人 2017年,Verma 等人 2017年)。这种订单重放机制使得构建用于评估的"样本外"(out-of-sample)测试环境变得非常直接。利用该仿真环境,我们能够进行超参数搜索,在完全相同的供需上下文中对比不同算法变体的性能表现,并论证迁移学习的有效性。尽管不同城市和不同日期的供需背景可能存在显著差异,但我们的仿真结果表明,基于强化学习(RL)的方法持续以显著优势超越"接驾距离最小化"的基线方法。结合了 CVNet 的广义策略迭代在所有基准测试方法中实现了最高的司机总收入,并展现出最稳健的性能,特别是与 DQN 相比而言(Tang 等人 2019年)。

生产应用

组合优化方法一直是核心的生产线上组件,为滴滴所覆盖的所有市场提供订单派发服务。这是一个高性能的实现方案,以低延迟和高可靠性支撑着每年来自超过 5.5 亿乘客的 100 多亿次出行。它同时也是我们广义策略迭代框架中的基础模块。我们方法的模块化设计使得不同解决方案变体的部署变得相对容易。我们方法的模块化设计使得不同解决方案变体的部署变得相对容易。CVNet 和表格 T D ( 0 ) TD(0) TD(0) 模型都是通过基于 Spark 的 ETL(提取-转换-加载)数据流水线进行离线训练和更新的。随后,训练好模型的输出会在组合优化器中进行线上服务,使其能够在兼顾长期价值的情况下进行订单派发。

我们在一些试点城市的生产环境中部署并测试了基于强化学习的解决方案。许多其他基于用户的策略可以通过将实验的用户流量随机分成两组来进行 A/B 测试,与此不同的是,对比两种订单派发策略的性能表现并没有那么直接,这本身也是一个研究领域。其核心区别在于,在同一个城市中无法同时执行两种派发策略,因为在单个共享出行平台上不可能将这两组完全隔离开来。跨组的订单与司机匹配不可避免地会发生,从而导致两组之间产生相互干扰(实验混淆)。因此,我们采用了"时间片轮转"(time-slice rotation)机制。在这种类型的 A/B 测试中,一天被切分成若干个时长为 H H H 小时的区间,其中 H ∈ ( 0 , 24 ] H \in (0, 24] H∈(0,24]。算法 A 和算法 B 在平台上交替区间执行。这两种算法的执行顺序在不同的日子里会交替反转(例如第一天 A-B-A-B,第二天 B-A-B-A)。在任何时间点,系统中只有一种算法在运行以匹配订单和司机。在我们的 A/B 测试中,设定 H = 3 H = 3 H=3(即每3小时轮换一次)。实验周期内的总天数通常选择为偶数。在各个算法运行的期间内,系统会分别收集核心关注的指标。这种 A/B 测试机制的一个优势在于,它允许两种派发算法在接近平行的状态下运行,同时在同一时刻内只有一种算法在进行控制。对于具有长优化跨度(长远规划)的方法,一个潜在的问题是:算法 A 所做决策带来的收益,可能会在算法 B 运行的区间内才显现(实现)出来。另一方面,如果我们把 H H H 设得长得多(例如 H = 24 H = 24 H=24,即按天轮换),那么如何消除不同日期之间测试环境变化(如天气、周中与周末等)所带来的影响,则将成为另一个独立的研究课题。

业务影响

滴滴最初采用了不同的订单派发模式:每个订单都会广播给预设半径范围内的所有空闲司机。该群体中第一个接受(抢单)的司机将获得该订单(Zhang 等人 2017年)。随后,该机制被基于批处理的中心化订单派发所取代,旨在通过利用全局供需信息来提高市场效率。基于强化学习(RL)方法的研究始于 2017 年。截至本文撰写时,这项利用运筹学和机器学习等定量方法的研究计划已进入第三年,且目前仍在进行中。

在与基于距离的组合优化方法进行 A/B 测试(采用前一节所述的时间片轮转机制)并取得成功后,结合了 T D ( 0 ) TD(0) TD(0) 的广义策略迭代框架已在中国 20 多个主要城市投入生产线实际运行(Xu 等人 2018年)。从设计上来看,CVNet 往往具有更好的泛化性能,且不易受数据稀疏性的影响。随后,CVNet 被部署到另外几个城市的生产环境中进行 A/B 测试,并在司机总收入、订单应答率和完单率方面,相比生产基线展现出了显著的提升(0.5% -- 2%)(Tang 等人 2019年)。订单派发算法演进所带来的效益是深远的,它让数百万乘客的出行需求能够更快速地得到匹配。这种量化影响如果转化到整个中国市场,相当于每天增加数十万个订单。据我们所知,这是基于强化学习(RL)的优化方法在共享出行领域的首次大规模成功应用。

在研工作与未来方向

我们目前正在推进多项研究项目,旨在开发并部署用于交易市场优化的先进强化学习方法,涵盖了订单派发、司机重定位(调度)以及拼车业务。我们还在进一步研究一种端到端的深度强化学习算法,以将订单派发和司机重定位进行统一结合(Holler 等人 2019年)。我们简要讨论了为订单派发开发大规模多智能体强化学习方法所面临的挑战。尽管是在一个简化的环境中,我们解决该问题的初步尝试已经取得了一些令人期待的成果(Li 等人 2019年)。除了单人乘车之外,我们也在探索强化学习在多人乘车(拼车)场景中的应用(Jindal 等人 2018年)。

附录

优化问题 (Appendix: The Optimization Problem)

为了便于公式的推导和表述,我们在表 1 中对本文中所涉及的数量及其符号进行了总结。

我们的优化周期为 24 小时。一个行程订单可以简要概括为 o : = { l ~ o , l o , l d , t r , t m , t ~ o , t o , t d , p } o := \{\tilde{l}_o, l_o, l_d, t_r, t_m, \tilde{t}o, t_o, t_d, p\} o:={l~o,lo,ld,tr,tm,t~o,to,td,p}。其中 l ~ o \tilde{l}o l~o 和 t ~ o \tilde{t}o t~o 带有波浪号( ∼ \sim ∼),表示它们与所分配的司机存在额外的依赖关系。我们使用 i i i 来对订单进行索引,如 o ( i ) o^{(i)} o(i)。一名司机 x x x 可以表示为 x : = { t f , l x , t x } x := \{t_f, l_x, t_x\} x:={tf,lx,tx},其中 t f t_f tf 是该司机最近一次变为空闲的时间,而 ( l x , t x ) (l_x, t_x) (lx,tx) 是该司机当前的时空状态。如果司机正在服务中,则其变为空闲的时间 t f = ∞ t_f = \infty tf=∞。行程订单 o ( i ) o^{(i)} o(i) 的持续时间为 τ o ( i ) : = t d ( i ) − t o ( i ) \tau{o^{(i)}} := t_d^{(i)} - t_o^{(i)} τo(i):=td(i)−to(i)。司机前往接驾乘客途中所花费的时间(接驾时长)为 τ e ( i ) : = t o ( i ) − t ~ o ( i ) \tau{e^{(i)}} := t_o^{(i)} - \tilde{t}o^{(i)} τe(i):=to(i)−t~o(i)。因此,履行该订单的总时间为 τ o ( i ) + τ e ( i ) = t d ( i ) − t ~ o ( i ) \tau{o^{(i)}} + \tau{e^{(i)}} = t_d^{(i)} - \tilde{t}_o^{(i)} τo(i)+τe(i)=td(i)−t~o(i)。如果 t m ( o ) ≥ t f t_m(o) \ge t_f tm(o)≥tf,则订单 o o o 有资格被派发给司机 x x x;其中 t m ( o ) t_m(o) tm(o) 是订单 o o o 的 t m t_m tm 属性(派发时间)(这一符号约定同样适用于其他变量)。为了简便起见,我们将 t m ( o ( i ) ) t_m(o^{(i)}) tm(o(i)) 简写为 t m ( i ) t_m^{(i)} tm(i)。我们使用 j j j 来对司机进行索引,如 x ( j ) x^{(j)} x(j)。我们将空闲司机集合表示为 X ( t ) : = { x ( j ) ∣ t f ( j ) ≤ t } X(t) := \{x^{(j)} \mid t_f^{(j)} \le t\} X(t):={x(j)∣tf(j)≤t}。订单派发策略 π \pi π 是一个将订单 o o o 映射到空闲司机 x ∈ X ( t m ( o ) ) x \in X(t_m(o)) x∈X(tm(o)) 的函数,即

π ( o ) : o → x ∈ X ( t m ( o ) ) (1) \pi(o) : o \rightarrow x \in X(t_m(o))\tag{1} π(o):o→x∈X(tm(o))(1)

需要说明的是,如果多个订单具有相同的派发时间 t m t_m tm,则派发策略 π \pi π 会确保不会将两个不同的订单匹配给同一位空闲司机。如果 X ( t r ( o ) ) = ∅ X(t_r(o)) = \emptyset X(tr(o))=∅(即订单提交时没有空闲司机),则该订单此时不进行匹配,其派发请求时间将被推迟到新的决策时间点,直到 X ( t r ( o ) ) X(t_r(o)) X(tr(o)) 不为空为止。如果订单在完单前被取消,我们将价格设为 p = 0 p = 0 p=0。订单被派发(指派)后的取消,通常是因为接驾距离过长或预计接驾等待时间 t ^ o ( i ) − t ~ o ( i ) \hat{t}_o^{(i)} - \tilde{t}_o^{(i)} t^o(i)−t~o(i) 过长;该距离由 d ( l ~ o ( i ) , l o ( i ) ) d(\tilde{l}o^{(i)}, l_o^{(i)}) d(l~o(i),lo(i)) 定义,其中函数 d d d 返回两个位置之间的行驶距离。因此, p p p 是策略 π \pi π 的函数,我们可以将其明确表示为 p ( π ) p(\pi) p(π)。设全天由乘客创建的订单集合为 { o ( i ) } i = 1 N \{o^{(i)}\}{i=1}^N {o(i)}i=1N。我们同时拥有以司机为中心和以乘客为中心的目标。我们以司机为中心的目标是最大化平台上司机的总收入。根据定义,司机每单的收入为 r : = p θ r := p\theta r:=pθ,其中 θ \theta θ 是一个与订单无关的常数比例(即分成比例)。因此,该优化问题为:

max ⁡ π J ( π ) : = ∑ i = 1 N p ( i ) ( π ) . ( 2 ) \max_{\pi} J(\pi) := \sum_{i=1}^N p^{(i)}(\pi). \quad (2) πmaxJ(π):=i=1∑Np(i)(π).(2)

以乘客为中心的目标是最小化所有已派发订单的平均接驾距离: 1 N + ∑ i = 1 N ( d ( l ~ o ( i ) , l o ( i ) ) ) 1 ( l ~ o ( i ) ≠ ∅ ) \frac{1}{N^+} \sum_{i=1}^N (d(\tilde{l}o^{(i)}, l_o^{(i)})) \mathbf{1}{(\tilde{l}o^{(i)} \neq \emptyset)} N+1∑i=1N(d(l~o(i),lo(i)))1(l~o(i)=∅),其中 N + N^+ N+ 表示已成功派发的订单总数。这一指标从接驾等待时间的角度来管理(提升)乘客的出行体验。应答率(Response rate)定义为所有已提交订单中被指派给司机的比例,即 N + N \frac{N^+}{N} NN+。完单率(Fulfillment rate)定义为所有已提交订单中最终被成功完单的比例,即 ∑ i = 1 N 1 ( p ( i ) ( π ) > 0 ) N \frac{\sum{i=1}^N \mathbf{1}_{(p^{(i)}(\pi) > 0)}}{N} N∑i=1N1(p(i)(π)>0)。

组合优化

在一个派发窗口内,我们对于所有属于待派发订单集合的订单( ∀ o ∈ O d i s p \forall o \in O_{disp} ∀o∈Odisp),将其派发时间设定为窗口的结束时间( t m ( o ) = t d i s p t_m(o) = t_{disp} tm(o)=tdisp)。系统会构建一个包含 n n n 个订单节点和 m m m 个司机节点的加权二分图 G : = ⟨ O d i s p , X d i s p ⟩ \mathcal{G} := \langle O_{disp}, X_{disp} \rangle G:=⟨Odisp,Xdisp⟩。首先会根据派发半径对边进行剪枝(修剪):对于每个订单,如果司机与其距离超过了预设的阈值,则消除该司机与订单之间的连线(边)。边的权重 w o x w_{ox} wox 决定了我们所关注的优化目标。派发策略是通过使用 Kuhn-Munkres (KM) 算法(亦称为匈牙利算法,Kuhn 1955年),在图 G \mathcal{G} G 的基础上求解一个线性指派问题(即问题 3)来生成的。

max ⁡ z ∑ o ∈ O ∑ x ∈ X w o x z o x s . t . ∑ x z o x ≤ 1 , ∀ o ∈ O d i s p , ∑ o z o x ≤ 1 , ∀ x ∈ X d i s p , z o x ∈ { 0 , 1 } , ∀ o ∈ O d i s p , x ∈ X d i s p . (3) \begin{aligned} \max_{z} \quad & \sum_{o \in O} \sum_{x \in X} w_{ox} z_{ox} \\ s.t. \quad & \sum_{x} z_{ox} \le 1, \quad \forall o \in O_{disp}, \\ & \sum_{o} z_{ox} \le 1, \quad \forall x \in X_{disp}, \\ & z_{ox} \in \{0, 1\}, \quad \forall o \in O_{disp}, x \in X_{disp}. \end{aligned}\tag{3} zmaxs.t.o∈O∑x∈X∑woxzoxx∑zox≤1,∀o∈Odisp,o∑zox≤1,∀x∈Xdisp,zox∈{0,1},∀o∈Odisp,x∈Xdisp.(3)

(注:公式中 s.t. \text{s.t.} s.t. 为 subject to 的缩写,意为"约束条件"; z o x z_{ox} zox 为决策变量,取值为 1 表示将订单 o o o 指派给司机 x x x,取值为 0 则表示不指派。)

有了最优解 z ∗ z^∗ z∗,就可以通过设定来推导出当前窗口的调度策略:

π ( o ) = x , ∀ o ∈ O d i s p , x ∈ X d i s p , z o x ∗ = 1 (4) \pi(o) = x, \forall o \in O_{disp}, x \in X_{disp}, z^*_{ox} = 1\tag{4} π(o)=x,∀o∈Odisp,x∈Xdisp,zox∗=1(4)

我们定义了一个算子 Π ( w ) : w → π \Pi(w) : w \rightarrow \pi Π(w):w→π,它通过公式 (3) 和公式 (4) 将输入的权重 w w w 映射为一个策略。由于 π \pi π 是一个系统层面的派发策略,它不仅需要将当前关注的订单作为输入,还需要将整个待派发订单集合 O d i s p O_{disp} Odisp 以及空闲司机集合 X d i s p X_{disp} Xdisp 作为输入。

半马尔可夫决策过程(Semi-MDP)模型

在该模型中,每位司机都是一个独立的智能体(agent)。司机的状态 s s s 由位置和时间 ( l , t ) (l, t) (l,t) 组成,两者都可以进行离散化:司机的位置由六边形网格系统表示(如图 3 所示),时间则由时间桶(通常为几分钟一段)来表示。如果 t = T t = T t=T(其中 T T T 是一天的结束时间,即一个回合的终点),则该状态为终止状态。我们用 g ( l , t ) g(l, t) g(l,t) 来表示位置 l l l 和时间 t t t 对应的(六边形网格索引,时间桶索引)二元组。六边形网格系统常用于地图系统中,因为它具备一个理想的特性:每对相邻网格中心点之间的欧几里得距离都是相同的;且六边形网格具有最优的周长/面积比,这能极好地近似圆形(Hales 2001年)。司机的动作 a a a(更确切地说是系统强加给司机的动作)是去履行某一个特定的订单(来自匹配窗口内的待派发订单),或者保持空闲(听单/闲逛)。在给定状态下执行某个动作所获得的奖励 r r r 即为该订单的价格 p p p,如果司机处于空闲状态,则奖励可以为零。状态转移矩阵的动态特征是:处于状态 s = g ( l ~ o , t ~ o ) s = g(\tilde{l}o, \tilde{t}o) s=g(l~o,t~o) 的司机在完成订单 o o o 后,其状态转变为 s ′ = g ( l d , t d ) s' = g(l_d, t_d) s′=g(ld,td),并且司机获得奖励 r = p r = p r=p。因此,在给定状态 s s s 和动作 a a a 的情况下,状态转移和奖励全都是确定性的。司机在一个回合中的示例轨迹如图 9 所示。该 MDP 的随机性在于未来的需求,需求决定了每个状态下可行的动作集合。因此,严格来说,我们的 MDP 是一个具有随机动作集(SAS-MDP)的马尔可夫决策过程(Boutilier 等人 2018年)。在这种情况下,只要针对实际发生的可用动作进行更新,常规的学习算法(如 Q-learning、DQN)以及策略评估方法在使用批处理数据时依然可以正常运行。该 MDP 的目标是最大化智能体(司机) x x x 在一个回合内的累计奖励: J x = ∑ k = 1 K r t k J_x = \sum{k=1}^K r{t_k} Jx=∑k=1Krtk,其中 t k t_k tk 是第 k k k 次执行动作的时间,而 t K t_K tK 是在结束时间 T T T 之前最后一次动作的时间。为了符号表述的简便,我们随后可以运行 r k r_k rk 来代替 r t k r_{t_k} rtk。由于所有空闲动作带来的奖励都为零,因此我们有:

J x ( π ) = ∑ k = 1 K r t k = ∑ i = 1 N p ( i ) ( π ) ∣ π ( o ( i ) ) = x . ( 5 ) J_x(\pi) = \sum_{k=1}^K r_{t_k} = \left. \sum_{i=1}^N p^{(i)}(\pi) \right|_{\pi(o^{(i)}) = x} . \quad (5) Jx(π)=k=1∑Krtk=i=1∑Np(i)(π) π(o(i))=x.(5)

(注:公式 5 表示司机 x x x 的总收益等于全天所有派发策略 π \pi π 下指派给该司机的所有订单 o ( i ) o^{(i)} o(i) 的价格之和。)

(注:前两段行程(分段)对应的是履行订单的状态转移(即:接驾加上实际行程)。最后一段行程则是空闲巡航(闲逛)的状态转移。相关符号的定义可以在附录中的"优化问题"(The Optimization Problem)章节中找到。)

由公式 (5) 可得:

J ( π ) = ∑ x J x ( π ) . ( 6 ) J(\pi) = \sum_{x} J_x(\pi). \quad (6) J(π)=x∑Jx(π).(6)

该模型包含了在时间上延伸的一连串动作,因此它实际上正如 Tang 等人 (2019年) 所描述的那样,是一个半马尔可夫决策过程(semi-MDP);其中的动作被称为"选项"(options,Sutton 等人 1999年),我们同样用 o o o 来表示(这也与其原本的含义相一致)。马尔可夫决策过程(MDP)的大多数相关理论只需稍加修改即可沿用(Sutton 等人 1999年)。对于一个行程部分跨越 τ o \tau_o τo 个时间单位的选项,其所累积的奖励 r r r 需要进行适当的折现:

r ^ = γ τ e ( r τ o + γ r τ o + ⋯ + γ τ o − 1 r τ o ) = r ( γ τ o − 1 ) γ τ e τ o ( γ − 1 ) , ( 7 ) \hat{r} = \gamma^{\tau_e} \left( \frac{r}{\tau_o} + \gamma \frac{r}{\tau_o} + \dots + \gamma^{\tau_o-1} \frac{r}{\tau_o} \right) = \frac{r(\gamma^{\tau_o} - 1)\gamma^{\tau_e}}{\tau_o(\gamma - 1)}, \quad (7) r^=γτe(τor+γτor+⋯+γτo−1τor)=τo(γ−1)r(γτo−1)γτe,(7)

(注:公式 6 表明系统总目标 J ( π ) J(\pi) J(π) 是所有司机个人累计收益 J x ( π ) J_x(\pi) Jx(π) 的总和;公式 7 则是考虑了司机接驾行为所需时间 τ e \tau_e τe 以及实际送客行程时间 τ o \tau_o τo 后,对单笔订单车费进行时间折现的计算公式。)

其中 γ ∈ [ 0 , 1 ) \gamma \in [0, 1) γ∈[0,1), τ o ≥ 1 \tau_o \ge 1 τo≥1,并假设奖励在时间上是均匀累积的。在这里,我们还考虑了司机前往接驾乘客途中所花费的时间 τ e \tau_e τe。智能体(司机)的策略 π d \pi_d πd 是一个将司机状态映射到选项(option)的函数,即 π d ( s ) : S → O \pi_d(s) : S \rightarrow O πd(s):S→O,其中 S S S 和 O O O 分别代表状态空间和选项空间。需要注意的是,系统派发策略 π \pi π 具有不同的输入和输出顺序,因为它是从全局系统视角出发的策略,并且在符号表述上这样定义更为便利。尽管如此,通过以下关系,系统策略 π \pi π 依然可以提炼转化为司机个体的策略 π d \pi_d πd:

π d ( s ( x ) ) = o ( i ) iff π ( o ( i ) ) = x . ( 8 ) \pi_d(s(x)) = o^{(i)} \quad \text{iff} \quad \pi(o^{(i)}) = x. \quad (8) πd(s(x))=o(i)iffπ(o(i))=x.(8)

(注:公式 8 中的 iff 表示"当且仅当"。整句意思是:当且仅当系统策略 π \pi π 将订单 o ( i ) o^{(i)} o(i) 指派给司机 x x x 时,司机 x x x 在当前状态下的个体策略 π d \pi_d πd 才会选择履行该订单选项 o ( i ) o^{(i)} o(i)。)

司机 x x x 的一个回合轨迹数据为 P ( x ) = { s t 0 , o 0 , r 0 , ... , s t k , o k , r k , s t k + 1 , ... , s t K } P^{(x)} = \{s_{t_0}, o_0, r_0, \dots, s_{t_k}, o_k, r_k, s_{t_{k+1}}, \dots, s_{t_K}\} P(x)={st0,o0,r0,...,stk,ok,rk,stk+1,...,stK}。我们使用符号 o k o_k ok 来表示时间 t k t_k tk 处的第 k k k 个选项,以区别于行程订单的索引 o ( i ) o^{(i)} o(i)。除了接单执行行程之外,选项 o k o_k ok 也可以是保持空闲(听单)。

与马尔可夫决策过程(MDP)类似,半马尔可夫决策过程(semi-MDP)的状态价值函数 V π d ( s ) V^{\pi_d}(s) Vπd(s) 定义为:在给定状态 s s s 且遵循策略 π d \pi_d πd 的情况下,在整个选项执行过程中所获得的长期折现累计奖励:

V π d ( s ) : = E ∑ i = 1 K − k γ ( t k + i − t k − τ o k − τ e k ) R \^ k + i ∣ s t k = s , ( 9 ) V^{\pi_d}(s) := \mathbb{E} \left \\left. \\sum_{i=1}\^{K-k} \\gamma\^{(t_{k+i} - t_k - \\tau_{o_k} - \\tau_{e_k})} \\hat{R}_{k+i} \\right\| s_{t_k} = s \\right, \quad (9) Vπd(s):=Ei=1∑K−kγ(tk+i−tk−τok−τek)R\^k+i stk=s,(9)

其中 R ^ \hat{R} R^ 是一个随机变量,其具体观测到的实现值为 r ^ \hat{r} r^。 R ^ k + i \hat{R}{k+i} R^k+i 前面折现因子的时间指数部分,是因为奖励 R ^ k + i \hat{R}{k+i} R^k+i 是在第 k k k 次状态转移完成后才开始收集的。 π d \pi_d πd 的贝尔曼方程(Bellman equation)为:

V π d ( s ) = E O d i s p ( s ) ∼ O R \^ ( s , π d ( s ; O d i s p ( s ) ) ) + γ ( τ e + τ o ) V π d ( s ′ ) , ( 10 ) V^{\pi_d}(s) = \mathbb{E}{O{disp}(s) \sim \mathcal{O}} \left \\hat{R}(s, \\pi_d(s; O_{disp}(s))) + \\gamma\^{(\\tau_e + \\tau_o)} V\^{\\pi_d}(s') \\right, \quad (10) Vπd(s)=EOdisp(s)∼OR\^(s,πd(s;Odisp(s)))+γ(τe+τo)Vπd(s′),(10)

(注:公式 10 中的第一项 R ^ \hat{R} R^ 代表当前状态下执行策略所获得的即时折现奖励,第二项则代表转移到下一个状态 s ′ s' s′ 后的长期价值在考虑了接驾时间 τ e \tau_e τe 和送客时间 τ o \tau_o τo 后的进一步折现。)

其中 O d i s p ( s ) O_{disp}(s) Odisp(s) 是在状态 s s s 处待派发的开放行程订单集合(即动作集),而 O \mathcal{O} O 是相应的需求分布。通过写作 π d ( s ; O d i s p ( s ) ) \pi_d(s; O_{disp}(s)) πd(s;Odisp(s)),我们明确了司机策略 π d \pi_d πd 对待派发订单集 O d i s p O_{disp} Odisp 的依赖关系。借鉴 Boutilier 等人 (2018年) 的方法,我们可以通过用实际观察到的动作集 O d i s p ( s ) O_{disp}(s) Odisp(s) 来增强(扩展)状态 s s s,从而定义一个相应的嵌入式半马尔可夫决策过程(embedded semi-MDP),记为 s ~ : = ( s , O d i s p ( s ) ) ∈ S ~ \tilde{s} := (s, O_{disp}(s)) \in \tilde{S} s~:=(s,Odisp(s))∈S~,并将其对应的策略表示为 π ~ d \tilde{\pi}_d π~d。这样我们就可以恢复出针对 π ~ d \tilde{\pi}_d π~d 的标准贝尔曼方程(Bellman equation):

V π ~ d ( s ~ ) = E s ~ ′ ∼ S ~ R \^ ( s \~ , π \~ d ( s \~ ) ) + γ ( τ e + τ o ) V π \~ d ( s \~ ′ ) , ( 11 ) V^{\tilde{\pi}d}(\tilde{s}) = \mathbb{E}{\tilde{s}' \sim \tilde{S}} \left \\hat{R}(\\tilde{s}, \\tilde{\\pi}_d(\\tilde{s})) + \\gamma\^{(\\tau_e + \\tau_o)} V\^{\\tilde{\\pi}_d}(\\tilde{s}') \\right, \quad (11) Vπ~d(s~)=Es~′∼S~R\^(s\~,π\~d(s\~))+γ(τe+τo)Vπ\~d(s\~′),(11)

其中 S ~ \tilde{S} S~ 是在给定动作 π ~ d ( s ~ ) \tilde{\pi}_d(\tilde{s}) π~d(s~) 条件下,下一个状态 s ~ ′ \tilde{s}' s~′ 的条件分布。在实际应用中,我们使用时序差分学习(TD-learning)从收集到的一系列真实运行轨迹中学习状态价值函数 V π d ( s ) V^{\pi_d}(s) Vπd(s)。

类似地,状态-选项价值函数(即 Q Q Q 函数) Q π d ( s , o ) Q^{\pi_d}(s, o) Qπd(s,o) 定义为:在给定当前状态 s s s 且执行选项 o o o 的情况下,后续遵循策略 π d \pi_d πd 在整个选项执行过程中所获得的长期折现累计奖励:

Q π d ( s , o ) : = E ∑ i = 1 K − k γ ( t k + i − t k − τ o k − τ e k ) R k + i \^ ∣ s t k = s , o k = o . ( 12 ) Q^{\pi_d}(s, o) := \mathbb{E} \left \\left. \\sum_{i=1}\^{K-k} \\gamma\^{(t_{k+i} - t_k - \\tau_{o_k} - \\tau_{e_k})} \\hat{R_{k+i}} \\right\| s_{t_k} = s, o_k = o \\right. \quad (12) Qπd(s,o):=Ei=1∑K−kγ(tk+i−tk−τok−τek)Rk+i\^ stk=s,ok=o.(12)

表格型时序差分学习

在策略评估阶段,系统会利用在训练期间(例如一个月)收集到的所有司机(从司机 x ( 0 ) x^{(0)} x(0) 到 x ( J ) x^{(J)} x(J))的行程和空闲移动数据 { P ( x ) } x = x ( 0 ) x ( J ) \{P^{(x)}\}_{x=x^{(0)}}^{x^{(J)}} {P(x)}x=x(0)x(J),通过表格型时序差分(TD)学习(具体而言是 T D ( 0 ) TD(0) TD(0),Sutton 1988年)来学习状态价值函数 V π d V^{\pi_d} Vπd。算法 1 展示了将 T D ( 0 ) TD(0) TD(0) 应用于上一节所述半马尔可夫决策过程(semi-MDP)的核心步骤。其中的更新项 r + γ V π d ( s ′ ) − V π d ( s ) r + \gamma V^{\pi_d}(s') - V^{\pi_d}(s) r+γVπd(s′)−Vπd(s) 是该状态转移经验 ( s , o , r , s ′ ) (s, o, r, s') (s,o,r,s′) 的时序差分误差(TD-error),而 α \alpha α 则表示步长(学习率)。


算法 1:针对司机半马尔可夫决策过程(Semi-MDP)的 TD(0) 算法


必要条件 : 在训练期间通过策略 π \pi π 收集到的所有司机的轨迹数据 { P ( x ) } x = x ( 0 ) x ( J ) \{P^{(x)}\}_{x=x^{(0)}}^{x^{(J)}} {P(x)}x=x(0)x(J)(从司机 x ( 0 ) x^{(0)} x(0) 到 x ( J ) x^{(J)} x(J)),以及步长(学习率) α ∈ ( 0 , 1 ] \alpha \in (0, 1] α∈(0,1]。

保障条件 : 对于所有时间桶包含结束时间 T T T 的状态 s s s,其状态价值 V π d ( s ) = 0 V^{\pi_d}(s) = 0 Vπd(s)=0(即终止状态的价值为 0)。

\\ \\ \\ \\ 初始化: 对状态空间中的所有状态( ∀ s ∈ S \forall s \in S ∀s∈S),将状态价值初始化为 V π d ( s ) = 0 V^{\pi_d}(s) = 0 Vπd(s)=0

\\ \\ \\ \\ 对于(数据中的)每一个回合(序列) P P P 执行:

\\ \\ \\ \\ \\ \\ \\ \\ 对于回合中的每一个状态转移经验 ( s , o , r , s ′ ) (s, o, r, s') (s,o,r,s′) 执行:

V π d ( s ) ← V π d ( s ) + α r \^ + γ ( τ o + τ e ) V π d ( s ′ ) − V π d ( s ) V^{\pi_d}(s) \leftarrow V^{\pi_d}(s) + \alpha \left \\hat{r} + \\gamma\^{(\\tau_o + \\tau_e)} V\^{\\pi_d}(s') - V\^{\\pi_d}(s) \\right Vπd(s)←Vπd(s)+αr\^+γ(τo+τe)Vπd(s′)−Vπd(s)

\\ \\ \\ \\ \\ \\ \\ \\ 结束内层循环

\\ \\ \\ \\ 结束外层循环


在匹配阶段,系统通过前面讨论的组合优化,利用算子 Π ( w ) \Pi(w) Π(w) 生成相对于 V π d V^{\pi_d} Vπd 的改进系统派发策略 π ′ \pi' π′。边的权重是利用 V π d V^{\pi_d} Vπd 计算出来的、订单 o ( i ) o^{(i)} o(i) 与司机 x ( j ) x^{(j)} x(j) 之间每个可能匹配的样本(预测)优势(Advantage,Baird 1993年):

w o ( i ) , x ( j ) ( V π d ) : = p ^ ( i ) + γ ( τ ^ o ( i ) + τ ^ e ( i ) ) V π d ( g ( l d ( i ) , t ^ d ( i ) ) ) − V π d ( s ( x ( j ) ) ) , ( 13 ) w_{o^{(i)},x^{(j)}}(V^{\pi_d}) := \hat{p}^{(i)} + \gamma^{(\hat{\tau}_o^{(i)} + \hat{\tau}_e^{(i)})} V^{\pi_d}(g(l_d^{(i)}, \hat{t}_d^{(i)})) - V^{\pi_d}(s(x^{(j)})), \quad (13) wo(i),x(j)(Vπd):=p^(i)+γ(τ^o(i)+τ^e(i))Vπd(g(ld(i),t^d(i)))−Vπd(s(x(j))),(13)

需要说明的是,其中的 p ^ ( i ) \hat{p}^{(i)} p^(i) 已按照公式 (7) 进行了折现。公式 (13) 中的优势项可以被视为:如果将订单 o ( i ) o^{(i)} o(i) 指派给司机 x ( j ) x^{(j)} x(j),其长期价值相对于该司机当前时空点的相对变化。所生成的策略 π ′ = Π ( w ( V π d ) ) \pi' = \Pi(w(V^{\pi_d})) π′=Π(w(Vπd)) 则是通过该优势展现出相对于 V π d V^{\pi_d} Vπd 的群体贪婪性(collective-greedy)。该样本优势的形式与时序差分误差(TD-error)的形式完全相同。我们注意到,公式 (13) 的边权重惩罚了过长的接驾距离,因为随着预计接驾时间(在途时间) τ ^ e ( i ) \hat{\tau}_e^{(i)} τ^e(i) 的增加,即时奖励 p ^ ( i ) \hat{p}^{(i)} p^(i)(参见公式 7)和目的地价值项的折现因子都会减小,从而降低了该匹配的优势值。新策略在司机各自独立的长期选项优势的引导下,旨在近似最大化司机的总收入,同时避免让乘客承担过长的接驾等待时间。我们在算法 2 中将这一用于派发的强化学习(RL)框架进行了公式化(规范化)描述。


算法 2:针对订单派发的广义策略迭代算法


输入(必要条件): 派发策略 π \pi π(以及对应的司机个体策略 π d \pi_d πd)。包含由策略 π \pi π 收集到的(所有司机)回合轨迹数据 { P ( x ) } \{P^{(x)}\} {P(x)} 的存储缓存区 B \mathcal{B} B。

for t = 1 , 2 , ... t = 1, 2, \dots t=1,2,... do

\\ \\ \\ \\ 使用策略评估方法(例如 CVNet 或 TD(0) 算法),根据缓存区 B \mathcal{B} B 中的数据学习状态价值函数 V π d V^{\pi_d} Vπd。

\\ \\ \\ \\ 根据公式 (13) 计算(二分图的边)权重 w ( V π d ) w(V^{\pi_d}) w(Vπd),并通过算子生成新策略 π ′ = Π ( w ) \pi' = \Pi(w) π′=Π(w)。

\\ \\ \\ \\ 在批处理窗口中,使用新策略 π ′ \pi' π′ 对订单和司机进行匹配。

\\ \\ \\ \\ 收集新的行程和司机轨迹数据,并将这些新数据填充到缓存区 B \mathcal{B} B 中。

\\ \\ \\ \\ π ← π ′ \pi \leftarrow \pi' π←π′

end for


注 2: 我们框架的目标是最大化总累计奖励。因此,使算子 Π \Pi Π 生成的策略相对于"状态-选项"价值 Q π d Q^{\pi_d} Qπd 展现出群体贪婪性(collective-greedy)是很自然的;也就是说,在匹配步骤中,在公式 (3) 的组合优化里使用 w o ( i ) , x ( j ) = Q π d ( s ( x ( j ) ) , o ( i ) ) w_{o^{(i)},x^{(j)}} = Q^{\pi_d}(s(x^{(j)}), o^{(i)}) wo(i),x(j)=Qπd(s(x(j)),o(i)) 作为权重。然而,如果在表格型价值函数中把"选项"(options,即订单)也包含进去,会导致表格的尺寸变得极其庞大(至少是时空单元格数量的平方)。虽然在这种情况下,可以使用样本近似值 p ^ ( i ) + γ ( τ ^ o ( i ) + τ ^ e ( i ) ) V π d ( g ( l d ( i ) , t d ( i ) ) ) \hat{p}^{(i)} + \gamma^{(\hat{\tau}_o^{(i)} + \hat{\tau}_e^{(i)})} V^{\pi_d}(g(l_d^{(i)}, t_d^{(i)})) p^(i)+γ(τ^o(i)+τ^e(i))Vπd(g(ld(i),td(i))) 来代替,但这样得到的解将会忽略司机当前所处的状态。正如我们在"注 1"中所讨论的,这将导致系统失去一个理想的特性------该特性本可以促进(分派)公平性,并有助于提升平台上司机的整体体验。

深度强化学习

输入到 CMAC(小脑模型关节控制器)的空间点 l l l,通过量化函数 { q k ( l ) } k \{q_k(l)\}_k {qk(l)}k 激活一组具有多种分辨率的网格,从而生成一个稀疏激活向量 c ( l ) ∈ R A c(l) \in \mathbb{R}^A c(l)∈RA(其中 A A A 为概念内存的大小),该向量通过 c ( l ) T M c(l)^T M c(l)TM 的计算将 l l l 映射到嵌入矩阵 M ∈ R A × m M \in \mathbb{R}^{A \times m} M∈RA×m 对应的行中。在学习(训练)阶段,这些嵌入向量作为神经网络的一部分进行更新,以学习每个网格的最佳特征表示。该嵌入层与其他状态特征(例如,供需上下文环境)相结合,共同连接到一个多层感知机(MLP)中,以输出最终的状态价值。CVNet(网格价值网络)是在一个类似于 DQN 的框架内,利用小批量随机梯度下降(minibatch SGD)进行训练的。

价值函数对输入扰动的敏感性,会传递(传播)到由该价值函数推导出的策略中。为了提高 CVNet(网格价值网络)对输入扰动的鲁棒性(当选定时空空间的某些区域训练数据稀疏时,表格型价值函数很容易受到这种扰动的影响,从而在价值表中产生"尖峰"),我们对 V π d V^{\pi_d} Vπd 的 Lipschitz(利普希茨)常数的上限 L ( V π d ) \mathcal{L}(V^{\pi_d}) L(Vπd) 进行正则化约束,也就是说,根据所有输入状态的范数来限制输出的范围。由于 V π d ( s ) = ( v L ∘ v L − 1 ∘ ⋯ ∘ v 1 ) ( s ) V^{\pi_d}(s) = (v_L \circ v_{L-1} \circ \dots \circ v_1)(s) Vπd(s)=(vL∘vL−1∘⋯∘v1)(s),其中 { v h } h = 1 L \{v_h\}_{h=1}^L {vh}h=1L 是该神经网络 L L L 个层的一系列组成函数,因此满足 L ( V π d ) ≤ ∏ h L ( v h ) \mathcal{L}(V^{\pi_d}) \le \prod_h \mathcal{L}(v_h) L(Vπd)≤∏hL(vh);并且我们已经在 Tang 等人 (2019年) 的研究中,推导出了小脑嵌入层(Cerebellar Embedding layer)和多层感知机(MLP)层的 Lipschitz 常数的解析形式。

讨论

以系统为中心的价值函数 V π ( X , O d i s p ) V^{\pi}(X, O_{disp}) Vπ(X,Odisp) 拥有全局信息状态,并支持系统层面的策略。令 s : = ( X , O d i s p ) \mathbf{s} := (X, O_{disp}) s:=(X,Odisp),并令 a \mathbf{a} a 表示针对所有司机和开放订单的指派动作。以系统为中心的(全局)马尔可夫决策过程(MDP)的贝尔曼最优条件为(假设行程为单位时间):

V π ∗ ( s ) = max ⁡ a ∈ A ( s ) E s ′ R ( s , a ) + γ V π ∗ ( s ′ ) . ( 14 ) V^{\pi^*}(\mathbf{s}) = \max_{\mathbf{a} \in \mathcal{A}(\mathbf{s})} \mathbb{E}_{\mathbf{s}'} \left R(\\mathbf{s}, \\mathbf{a}) + \\gamma V\^{\\pi\^\*}(\\mathbf{s}') \\right. \quad (14) Vπ∗(s)=a∈A(s)maxEs′R(s,a)+γVπ∗(s′).(14)

由公式 (6) 可知,对于每位司机而言,全局视角下以司机为中心的价值(Holler 等人 2019年)------我们将其记为 V j π ( s ( j ) ; X , O d i s p ) V^{\pi}j(s^{(j)}; X, O{disp}) Vjπ(s(j);X,Odisp)------相加之和等于在相同策略下的系统价值,即: ∑ j V j π ( s ( j ) ; X , O d i s p ) = V π ( X , O d i s p ) \sum_{j} V^{\pi}j(s^{(j)}; X, O{disp}) = V^{\pi}(X, O_{disp}) ∑jVjπ(s(j);X,Odisp)=Vπ(X,Odisp)。在我们的方法中,我们并没有去求解公式 (14)。相反,我们将重点放在了系统派发策略的司机视角以及以司机为中心的 MDP 上。我们把 π ( j ) \pi^{(j)} π(j) 定义为第 j j j 位司机视角的 π \pi π,满足 π ( j ) ( s ( j ) , O d i s p ) = o ∈ O d i s p \pi^{(j)}(s^{(j)}, O_{disp}) = o \in O_{disp} π(j)(s(j),Odisp)=o∈Odisp。我们注意到,局部视角下以司机为中心的价值函数 V π ( j ) ( s ( j ) , O d i s p ) V^{\pi^{(j)}}(s^{(j)}, O_{disp}) Vπ(j)(s(j),Odisp) 与公式 (11) 中的嵌入式 MDP 价值函数 V π ~ d ( s ~ ) V^{\tilde{\pi}_d}(\tilde{s}) Vπ~d(s~) 具有相同的形式。在系统策略的局部视角下,只要状态集合 { s ( j ) } \{s^{(j)}\} {s(j)} 具有相同的时间分量,那么所有司机的 { V π ( j ) ( s ( j ) ) } j \{V^{\pi^{(j)}}(s^{(j)})\}j {Vπ(j)(s(j))}j 之和就等于基于同一底层系统策略的、以系统为中心的价值。由于 V π d ( s ) V^{\pi_d}(s) Vπd(s) 作为 V π ~ d ( s ~ ) V^{\tilde{\pi}d}(\tilde{s}) Vπ~d(s~) 的压缩版本(Boutilier 等人 2018年),是通过众包所有司机的经验轨迹学习而来的,因此它可以被看作是所有司机共享的"平均"以司机为中心的价值函数,并对应着相应的"平均"司机视角策略 π d \pi_d πd。通常情况下, ∑ j V π d ( s ( j ) ) \sum{j} V^{\pi_d}(s^{(j)}) ∑jVπd(s(j)) 仅仅是对系统价值函数的一种近似,其精度取决于对 O d i s p O{disp} Odisp 的期望值。因此,这里的策略评估步骤是近似的,因为其更新目标并不是真正的系统价值函数。该策略表现为贪婪策略,而其对应的价值函数则被定义为:在每位司机各自状态下评估出的、局部视角司机价值的总和。