目录
O2O即时配送智能调度系统
目前各外卖平台正在优质供给、配送体验、软件体验等各维度展开全方位的竞争,其中,配送时效、准时率作为履约环节的重要指标,是外卖平台的核心竞争力之一。
过去一年多时间里,美团配送团队在机器学习、运筹优化、仿真技术等方面,持续发力,深入研究,并针对即时配送场景特点将上述技术综合运用,推出了用于即时配送的“超级大脑”——O2O即时配送智能调度系统。
- 系统首先通过优化设定配送费以及预计送达时间来调整订单结构;
- 在接收订单之后,考虑骑手位置、在途订单情况、骑手能力、商家出餐、交付难度、天气、地理路况、未来单量等因素,在正确的时间将订单分配给最合适的骑手,并在骑手执行过程中随时预判订单超时情况并动态触发改派操作,实现订单和骑手的动态最优匹配;
- 同时,系统派单后,为骑手提示该商家的预计出餐时间和合理的配送线路,并通过语音方式和骑手实现高效交互;
- 在骑手送完订单后,系统根据订单需求预测和运力分布情况,告知骑手不同商圈的运力需求情况,实现闲时的运力调度。
通过上述技术和模式的引入,持续改善了用户体验和配送成本:订单的平均配送时长从2015年的41分钟,下降到32分钟,进一步缩短至28分钟,另一方面,在骑手薪资稳步提升的前提下,单均配送成本也有了20%以上的缩减。
建模过程:
外卖订单分配问题描述
外卖订单的分配问题一般可建模为带有若干复杂约束的DVRP(Dynamic Vehicle Routing Problem)问题。这类问题一般可表述为:有一定数量的骑手,每名骑手身上有若干订单正在配送过程中,在过去一段时间(如1分钟)内产生了一批新订单,已知骑手的行驶速度、任意两点间的行驶距离、每个订单的出餐时间和交付时间(骑手到达用户所在地之后将订单交付至用户所需的时间),那么如何将这批新订单在正确的时间分配至正确的骑手,使得用户体验得到保证的同时,骑手的配送效率最高。
题分析和建模:高效求解问题的第一步
学术研究领域有很多经典的优化问题(如旅行商问题TSP、装箱问题BP、车辆路径问题VRP等),它们的决策变量、优化目标和约束条件往往非常明确、简单。这在学术研究中是很必要的,因为它简化了问题,让研究者把精力放在如何设计高效算法上。
然而,由于实际工业场景的复杂性,绝大部分实际场景的决策优化问题很难描述的如此简单,此时,如果不仔细分析实际业务过程特点而错误地建立了和实际场景不符的模型,自然会造成我们获得的所谓“最优解”应用于实际后也会“水土不服”,最后被大量抱怨甚至抛弃。所以我们说,准确建模是实际决策优化项目的第一步,也是最关键的一步。
准确建模,包括两个方面的问题:
我们正确理解了实际业务场景的优化问题,并且通过某种形式化语言进行了准确描述;
我们建立的模型中,涉及的各类参数和数据,能够准确得获取。
在上述两个前提下,采用相应的高效优化算法求解模型所得到的最优解,就是符合实际场景需求的最优决策方案。第一个问题,一般是通过业务调研、分析并结合建模工具来得到;而解决第二个问题,则更多地需要依赖数据分析、机器学习、数据挖掘技术结合领域知识,对模型进行精确的量化表达。
一个决策优化问题的数学模型,一般包括三个要素:
决策变量
优化目标
约束条件
其中,决策变量说明了我们希望算法来帮助我们做哪些决策;优化目标则是指我们通过调整决策变量,使得哪些指标得到优化;而约束条件则是在优化决策的过程中所考虑的各类限制性因素。
为了说明即时配送场景下的订单分配问题,我们先引入若干符号定义:
在即时配送调度场景下,决策变量包括各个订单需要分配的骑手,以及骑手的建议行驶路线。
即时配送订单分配问题的优化目标一般包括希望用户的单均配送时长尽量短、骑手付出的劳动尽量少、超时率尽量低,等等。一般可表达为:
针对实际场景下的配送订单分配问题,设置哪些指标作为目标函数是一个较为复杂的问题。
原因在于两个方面:
该优化问题是多目标的,且各个目标在不同时段、不同环境下会有差别。举个例子,经验丰富的调度员希望在负载较低的空闲时段,将订单派给那些不熟悉区域地形的骑手,以锻炼骑手能力;在天气恶劣的情况下,希望能够容忍一定的超时率更多地派顺路单,以提高订单消化速度等。这些考量有其合理性,需要在优化目标中予以体现。
缺乏有助于量化优化目标的数据。如果带标签数据足够多,同时假设调度员的能力足够好,那么可以通过数据挖掘的手段获取优化目标的量化表达。不幸的是,这两个前提都不成立。我们针对该难题,首先通过深入调研明确业务痛点和目标,在此基础上,采用机理和数据相结合的办法,由人工设定目标函数的结构,通过仿真系统(下文介绍)和实际数据去设定目标函数的参数,来确定最终采用的目标函数形态。
即时配送调度问题的约束条件至少涵盖如下几种类型:
除了以上约束外,有时还需要考虑部分订单只能由具备某些特点的骑手来配送(例如火锅订单只能交给携带专门装备的骑手等)、载具的容量限制等。
以上只是针对给定的一批订单进行匹配决策的优化问题在建模时所需考虑的部分因素。事实上,在外卖配送场景中,我们希望的不是单次决策的最优,而是策略在一段时间应用后的累积收益最大。换句话说,我们不追求某一个订单的指派是最优的,而是希望一天下来,所有的订单指派结果整体上是全局最优的。这进一步加大了问题建模的难度,原因在于算法在做订单指派决策的时候,未来的订单信息是不确定的,如下图所示,在t时刻进行决策的时候,既需要考虑已确定的订单,还需要考虑未来的尚未确定的订单。运筹优化领域中的马尔可夫决策过程描述的就是这样的一类在不确定、信息不完备环境下的序贯决策优化问题。
问题建模中的机器学习
过去,在信息化水平较低的环境下,很多工业运筹优化类的项目不成功,重要原因之一就是缺少足够完备的数据采集基础工具,大量数据由人工根据经验设定,其准确性难以保证,且难以随着环境变化而自适应调整,从而造成模型的优化结果渐渐变得不符合实际。机器学习领域有个谚语“Garbage in,garbage out”, 说明了精准的基础数据对于人工智能类项目的重要性。
即时配送订单分配场景下的数据包括两类:
直接通过业务系统采集可获取的数据,例如订单数据、骑手负载数据、骑手状态数据等。
无法直接采集得到,需要预测或统计才能获取的数据,如商户出餐时间、用户驻留时间(骑手到达用户处将订单交付给用户的时间)、骑手配送能力等。
第一类数据的获取一般由业务系统、骑手端App直接给出,其精度通过提升工程质量或操作规范可有效保证;而第二类数据的获取是即时配送调度的关键难点之一。
在订单的配送过程中,骑手在商家、用户处的取餐和交付时间会占到整个订单配送时长的一半以上。准确估计出餐和交付时间,可以减少骑手的额外等待,也能避免“餐等人”的现象。商家出餐时间的长短,跟品类、时段、天气等因素都有关,而交付时间更为复杂,用户在几楼,是否处于午高峰时段,有没有电梯等等,都会影响骑手(到了用户所在地之后)交付订单给用户的时间。对这两类数据,无法单纯通过机理来进行预测,因为相关数据无法采集到(如商家今天有几个厨师值班、用户写字楼的电梯是否开放,等等)。为解决这些问题,我们利用机器学习工具,利用历史的骑手到店、等餐、取餐的数据,并充分考虑天气等外部因素的影响,建立了全面反映出餐能力的预测模型,并通过实时维度的特征进行修正,得到准确的出餐/交付时间估计。
进一步,我们建立了调度模型的自学习机制,借鉴多变量控制理论的思想,不断根据预估偏差调整预估模型中的相关参数。通过以上工作,我们通过调度模型来预估骑手的配送行为(取餐时间和送达时间),平均偏差小于4分钟,10分钟置信度达到90%以上,有效地提升了派单效果和用户满意度。
订单——骑手的匹配优化
如果说上述建模过程的目标是构建和实际业务吻合的解空间,优化算法的作用则是在我们构建的解空间里找到最优的策略。配送调度问题属于典型的NP-Hard类离散系统优化问题,解空间巨大。以一段时间内产生50个订单, 一个区域有200骑手,每个骑手身上有5个订单为例,那么对应的调度问题解空间规模将达到pow(200,50)*10(部分为不可行解),这是一个天文数字!所以,如何设计好的优化算法,从庞大的解空间中搜索得到一个满意解(由于问题的 NP-Hard特性,得到最优解几乎是不可能的),是一个很大的挑战。即时配送对于优化算法的另一个要求是高实时性,算法只允许运行2~3秒钟的时间必须给出最终决策,这和传统物流场景的优化完全不同。
针对此难题,我们采用了两个关键思路。一是问题特征分析。运筹优化领域有个说法叫“No Free Lunch Theory”,没有免费的午餐,含义是说如果没有对问题的抽象分析并在算法中加以利用,那么没有算法会比一个随机算法好。换句话说,就是我们必须对问题特点和结构进行深入分析,才能设计出性能优越的算法。在运筹优化领域中的各类基础性算法也是这样的更多思路,如单纯形、梯度下降、遗传算法、模拟退火、动态规划等,它们的本质其实是假定了问题具备某些特征(如动态规划的贝尔曼方程假设,遗传算法的Building Blocks假设等),并利用这些假设进行算法设计。那么,针对配送调度的场景,这个问题可以被分解为两个层次:骑手路径优化和订单分配方案的优化。
- 骑手路径优化问题要解决的问题是:在新订单分配至骑手后,确定骑手的最佳配送线路;
- 而订单分配优化问题要解决的问题是:把一批订单分配至相应的骑手,使得我们关注的指标(如配送时长、准时率、骑手的行驶距离等)达到最优。
这两个问题的关系是:通过订单分配优化算法进行初始的订单分配,然后通过骑手路径优化算法获取各骑手的最佳行驶路线,进而,订单分配优化算法根据骑手路径优化结果调整分配方案。这两个层次不断反复迭代,最终获得比较满意的解。
第二个思路是跨学科结合。订单分配问题在业内有两类方法,
- 第一类方法是把订单分配问题转换成图论中的二分图匹配问题来解决。但是由于标准的二分图匹配问题中,一个人只能被分配一项任务,所以常用的一个方法是先对订单进行打包,将可以由一个人完成的多个订单组成一个任务,再使用二分图匹配算法(匈牙利算法、KM 算法)来解决。这种做法是一个不错的近似方案,优点是实现简单计算速度快,但它的缺点是会损失一部分满意解。
- 第二类方法是直接采用个性化的算法进行订单分配方案的优化,优点是不损失获得满意解的可能性,但实际做起来难度较大。我们结合领域知识、优化算法、机器学习策略以及相关图论算法,基于分解协调思想,设计了骑手路径优化算法和订单分配优化算法。进一步,我们利用强化学习的思想,引入了离线学习和在线优化相结合的机制,离线学习得到策略模型,在线通过策略迭代,不断寻求更优解。通过不断地改进算法,在耗时下降的同时,算法的优化效果提升50%以上。
我们在大量的实际数据集上进行评估验证,99%以上的情况下,骑手路径优化算法能够在30ms内给出最优解。为了有效降低算法运行时间,我们对优化算法进行并行化,并利用并行计算集群进行快速处理。一个区域的调度计算会在数百台计算机上同步执行,在2~3秒内返回满意结果,每天的路径规划次数超过50亿次。
应对强随机性
即时配送过程的一个突出特点是线下的突发因素多、影响大,例如商家出餐异常慢、联系不上用户、车坏了、临时交通管制等等。这些突发事件造成的一个恶劣结果是, 虽然在指派订单的时刻,所指派的骑手是合理的,然而过了一段时间之后,由于骑手、订单等状态发生了变化,会变得不够合理。订单交给不合适的骑手来完成,会造成订单超时,以及骑手需要额外的等待时间来完成订单,影响了配送效率和用户体验的提升。
在出现上述不确定因素造成派单方案变得不合理的情况时,现有方法主要通过人工来完成,即:配送站长/调度员在配送信息系统里,查看各个骑手的位置、手中订单的状态及商户/用户的位置/期望送达时间等等信息,同时接听骑手的电话改派请求,在此基础上,分析哪些订单应该改派,以及应该改派给哪位骑手,并执行操作。
我们针对即时配送的强不确定性特点,提出了两点创新:
一是延迟调度策略,即在某些场景订单可以不被指派出去,在不影响订单超时的情况下,延迟做出决策;
二是系统自动改派策略,即订单即便已经派给了骑手,后台的智能算法仍然会实时评估各个骑手的位置、订单情况,并帮助骑手进行分析,判断是否存在超时风险。如果存在,则系统会评估是否有更优的骑手来配送。
延迟调度的好处一方面是在动态多变的不确定环境下,寻求最佳的订单指派时机,以提高效率;另一方面是在订单高峰时段存在大量堆积时,减轻骑手的配送压力。有了这两项策略,订单的调度过程更加立体、全面,覆盖了订单履行过程全生命周期中的主要优化环节,实现订单和骑手的动态最优化匹配。
仿真系统
工业系统非常看重监控和评估,“No measurement, No improvement”。在工业优化场景中,如何准确评估算法的好坏,其重要性不亚于设计一个好的算法。然而,由于多个订单在线下可能会由同一名骑手来配送,订单与订单之间存在耦合关系,导致无法做订单维度的A/B测试。而区域维度指标受天气、订单结构、骑手水平等外在随机因素影响波动比较大,算法效果容易被随机因素湮没从而无法准确评估。为此,我们针对即时配送场景,建立了相应的仿真模型,开发了配送仿真系统。系统能够模拟真实的配送过程和线上调度逻辑,并给出按照某种配送策略下的最终结果。该模拟过程和线下的实际导航、地理数据完全一致,系统同时能够根据实际配送数据进行模型自学习,不断提升仿真精度。
一个高精度的配送仿真系统,除了能够对配送调度算法进行准确评估和优化,从而实现高效的策略准入控制外,另一个巨大的价值在于能够对配送相关的上下游策略进行辅助优化,包括配送范围优化、订单结构优化、运力配置优化、配送成本评估等等,其应用的想象空间非常大。
结语
美团配送智能调度系统在应用之后,取得了非常不错的应用效果。下图说明了在订单结构比较类似的两个白领区域上的A/B测试结果。中关村配送站在5月6日切换了派单模式和相应的算法,大望路配送站的调度策略维持不变。可以看出,在切换后,中关村的平均配送时长有了2.9分钟的下降,严重超时率下降了4.7个百分点(相比较对比区域)。
同时,在更广泛的区域上进行了测试,结果表明,在体验指标不变的前提下,新策略能够降低19%的运力消耗。换言之,原来5个人干的活,现在4个人就能干好,所以说,智能调度在降低成本上价值是很大的。
美团配送的目标之一是做本地化的物流配送平台,那么,效率、体验和成本将成为平台追求的核心指标。人工智能技术在美团配送的成功应用有很多,通过大数据、人工智能手段打造一个高效、智能化、动态协同优化的本地智慧物流平台,能显著提高本地、同城范围内的物流配送效率,持续提升配送体验,降低配送成本。