DoorDash如何使用ML和优化解决订单派送的调度问题


DoorDash 每天交付数百万个订单,为了支持我们的平台,我们需要解决“调度问题”:如何尽可能高效地通过 Dashers 将每个订单从商店送到客户手中。在这篇博文中,我们将讨论调度问题的细节,我们如何使用机器学习和优化来解决问题,以及我们如何通过模拟和实验不断改进我们的解决方案。
 
订单派送目标
让我们首先定义我们在调度 Dashers 时要实现的目标。我们的目标有两个: 

  • 尽可能高效地向 Dashers 提出报价,以便他们最大限度地提高赚钱机会。
  • 快速准时交付订单,让消费者和商家对他们的体验感到满意。 

实现这些目标需要克服许多挑战。我们使用机器学习和优化解决方案应对每个挑战,并使用模拟和实验方法来构建该性能。  
 
寻找最好的Dasher 
要找到交付订单的最佳 Dasher,我们需要考虑许多不同的因素。最重要的因素是Dashers 的地理位置。我们通常希望找到尽可能靠近商店的 Dasher,以尽量减少总派送时间。
我们考虑的第二个因素是确保 Dasher 会在正确的时间到达。如果我们过早派遣 Dasher,他们将不得不等待订单准备就绪。如果我们发货太晚,食物会放置太久并可能变冷,而商家和消费者会因为食物没有尽快交付而感到不安。
另一个因素是批处理,通过寻找机会,尽可能有效地利用 Dasher,单个 Dasher 可以在同一家商店(或附近的一组商店)提取多个订单。
 
考虑市场条件
还有其他我们无法控制的市场条件会影响我们选择哪个 Dasher 的决定。最重要的是任何特定市场的供需平衡。虽然我们努力确保有足够的 Dashers 来完成订单,但有时我们可能没有足够的 Dashers 来处理所有订单。在这些供不应求的情况下,我们必须权衡现在和以后接受哪些订单。在这些情况下,如果单个 Dasher 能够同时提取多个订单,那么寻找批处理机会也是有益的,消费者可以更快地获得订单。我们还需要查看天气和交通等条件,这些条件可能会影响交货时间或导致 Dashers 以高于我们通常预期的速度拒绝订单。
 
解决派送问题
处理如此复杂的问题是一个两阶段的过程:
首先,我们构建了一个复杂的调度服务,该服务利用许多 ML 和优化模型来了解市场状态,并向 Dashers 提供最佳报价以满足我们市场的需求。
第二阶段是建立模拟和实验平台,使我们能够不断改进我们的调度服务。
这两种方法都帮助我们实现目标,并每天继续进步 1%。在以下部分中,我们将介绍我们的调度系统的架构以及它如何处理样品交付。然后我们将描述我们如何利用我们的模拟和实验平台来改进我们的决策。 
 
构建 DeepRed:我们的调度服务 
在高层次上,调度引擎建立在两组数学模型之上。第一组模型是 ML 模型,经过训练可以估计如果我们将订单提供给特定的 Dasher,订单将如何展开。这些模型专注于对每个订单、商店和 Dasher 进行预测。
 一旦做出估计,它们就会被送入我们的第二个建模层,我们的混合整数优化模型。优化模型最终建议将哪些订单提供给哪些 Dashers。ML 层专注于对每个订单进行单独估计,而优化层则专注于为整个市场做出系统范围的决策。
总之,ML 模型和优化层从我们的市场中提取数百万个数据点,形成一组调度决策,以确保将每个订单提供给 Dasher,后者可以尽可能高效地将其从商店交付给消费者。
 
订单的配送过程
理解我们如何解决调度问题的最好方法是考虑单个订单如何通过 DeepRed 的复杂系统工作。我们将看看订单如何通过 DeepRed 的多个层,从我们的报价候选生成器开始,继续到我们的 ML 层,该层估计这些报价在现实世界中的表现,然后通过我们的优化层,得出最终建议。
 
构建潜在的报价
当新订单到达我们的调度引擎时,我们首先更新我们对市场当前状态的理解以及该订单如何与 Dashers 和其他订单交互。我们正在寻找附近有哪些 Dasher 可以领取新订单。这些 Dashers 可能正在等待他们的下一个订单,在这种情况下,我们可以立即为他们提供新订单,或者他们可能正在完成另一个订单,在这种情况下,我们可以计划在他们完成订单后立即向他们提供新订单当前交货。
我们在此阶段的重点不仅限于哪些 Dashers 可用:我们还会查看其他哪些订单正在等待接收。如果在与我们的订单相同的商店或同一街区有另一个订单被提取,则将两个订单提供给同一个 Dasher 可能是有意义的。如果在我们的订单需要交付的地方附近还有另一个交付需要下车,情况也是如此。
通过查看可用的 Dasher 和其他订单,我们能够为我们的新订单构建潜在的报价:该订单可以提供给的一组 Dasher,以及可能由同一个 Dasher 提取的其他订单。然后,这些潜在的报价被发送到 ML 层,在那里我们预测这些报价在现实世界中可能会发生什么。
 
更多点击标题见原文