五千字长文为你揭秘滴滴共享出行派单算法原理(干货)

开通VIP,畅享免费电子书等14项超值服

首页

好书

留言交流

下载APP

联系客服

2019.09.22

说到滴滴的派单算法,大家可能感觉到既神秘又好奇,从扬召到抢单到派单,我们又是如何演进到今天大家的打车体验的呢,我们首先来看一看,好的派单算法为什么是出行行业不可或缺的能力?

回想几年前,当我们还没有滴滴的时候,只能在寒风或者酷暑中等待可能有、可能没有的扬招出租车,到后来可以从滴滴上呼叫一辆出租车,乘客可以在室内相对舒适的等待车辆的到达,从线上到线下,乘客的确定性得到第一次的提升,然而这还不够,抢单的模式注定我们的应答率天花板不会太高,在15年,滴滴上线快车业务,我们从抢单演进到了派单模式,乘客的应答率有了20个点以上的提升,很多时候能够全天能够高达90(高峰&局部供需紧张应答率会相对吃紧),乘客确定性再一次得到大幅的提升,由此可见,派单模式为滴滴创造了巨大用户价值。

再看近年来不断兴起的O2O业务,从国内外的网约车公司,包括我们的友商Uber、Lyft都基于派单的产品形态进行司机和乘客之间的交易撮合,Uber上市的时候把派单引擎也作为核心技术能力放在了招股书中;再看我们的国内的外卖平台,核心派单系统的优劣也决定了整个平台的交易效率(单均配送成本)和用户体验(配送时长);最后,整个大物流行业近年来也不断在进行线上化的改造,如何撮合货物和司机,以及更好的拼单能力也是整个交易环节的关键和商业模式是否成立的前提。从运人到运物,派单引擎目前越来越多的被应用在现实的商业和生活中。

言归正传,这里我们也来看一下,滴滴网约车平台到底是怎么派单的。首先,我们来看下我们面对的是什么样的问题?

“订单分配即是在派单系统中将乘客发出的订单分配给在线司机的过程”

这是一个看似简单的,但实际上非常复杂的问题。说到这,可能有很多人就会问,能否就把我的订单分配给离我最近的司机就好了?

的确啊,实际上目前滴滴的派单算法最大的原则就是“就近分配”(70%~80%的订单就是分配给了最近的司机),据我所知,目前世界上其他的竞品公司(包括Uber),也均是基于这个原则分单的。

我们进一步来看这个问题,如果我们只按照就近分配,先到先得的贪心策略,是不是能最好的满足平台所有乘客和司机的诉求呢?答案是否定的,原因就在于,如果我们只基于当前时刻和当前局部的订单来进行决策,忽视了未来新的订单&司机的变化,还忽视了和你相邻的其他区域甚至整个城市的需求(注:在时序上来看,新的司机&订单的出现会导致,贪心策略反而违背了就近分配的目标)。这就是为什么这个问题依然是非常复杂的原因。

这里稍微有点抽象了,不过没关系,我们再来一步一步的拆解一下订单分配的问题,让大家有个更好的理解:

简单看,在我们的平台上,每一个时刻,都有N个订单在被乘客创建,同时有M个司机可以被我们用来进行分配,我们强大的平台能够为派单算法给出司机的实时的地理位置坐标,以及所有订单的起终点位置,并且告诉我们每一个司机接到订单的实时导航距离。

看上去似乎就非常简单了,我们直接把这个订单指派给这个司机就好了嘛。

“那么为什么有时候附近有辆空车却不能指派给你呢?”

实际线上的系统会比这里稍微复杂一点,原因一方面有可能是司机正好网络出现故障,或者正在和客服沟通等等导致司机无法听单,另一方面的原因是并不是所有的车都能够符合服务你订单的要求,最基本的策略其实是人工设定的规则过滤。举几个最基础的例子:

必须澄清的一点是这里的规则并不会造成分单时不公平的效果,而完全是为了业务能正常运行而设立的,这些策略承担着保证业务正确性的重要职责。

假设这两个司机都能够分配给这个订单,那么我们来看系统应该是如何分配的。

首先第一种情况是,同一时刻下,这两个司机和订单的距离都完全一样的情况下,系统应该如何分配?

刚才也说到,我们平台订单分配最大的原则是就近分配,当距离完全一样的情况下,当前我们系统上会主要考虑司机的服务分的优劣,服务分较高的司机会获取到这个订单(注:服务分对分单的影响,简单的理解可以换算为多少分可以换成多少米距离的优势,这块不是今天的重点就不展开介绍),再说明一下,系统用到的是地图的导航距离,而非人直观看到的直线距离,有时候差一个路口就会因为需要掉头导致距离差异很大;并且如果司机的定位出现问题,也会出现分单过远的情况。

那么我们来看第二种情况,如果A司机离的近,B司机离的远,系统怎么派?

这就简单了,根据就近分配的原则,我们会把A司机分配给这个订单。嘿嘿~~,假设我们再把问题设置的更加实际一点,当订单发出时,B司机已经在线并空闲,但是A司机还没有出现(没有上线,或者还在送乘客),但再过1s,离得更近的A司机突然出现可被分单了,假设我们使用先到先得的贪心策略,那么B司机就会被分给这个订单,那就违背我们希望就近分单的目标了:(。所以看上去简单,但实际情况下,算法还需要变的更好一些,这个问题我们把它叫做派单中的时序问题,我们后面再来看怎么解决。

最后我们来考虑最复杂的多对多的情况,这也是线上系统每天高峰期都需要面对的挑战,我们一般把这种情况会形式化为一个二部图的匹配问题,在运筹领域也叫做matching的问题,如图所示:

我们再把这个问题具象一点,假设这个时候我们有20个乘客,有20个司机,这些乘客都可以被这20个司机中的一个接驾,我们的系统需要把这20个乘客都分配出去,并且让大家的总体接驾的时长最短。听上去是不是有点复杂?我们套用下组合数学的知识,这其中可能的解法存在20的阶乘那么多,20的阶乘是什么概念呢?20*19*18*…*1=2432902008176640000,这个数巨大无比,想要完全的暴力搜索是绝对不可能的。这里需要更聪明的办法。

上面我们已经描述了什么是订单分配问题,并且它所面临的各种挑战,那么在这里我们来

聊一聊我们线上的派单策略是如何解决其中一部分问题的。

如何理解这个原则呢?我们说策略会站在全局的角度去达成全局最优,这样对于每一个独立的需求来看,派单可能就不是“局部最优”,不过可以告诉大家的是,就算在这个策略下,仍然有70%~80%的需求也是符合当前距离最近的贪心派单结果的。

接下来,这里会拿两个重要的派单策略的来进行介绍。(这里的内容主要是讲清楚策略的motivation为主哈,细节不再展开)

派单策略中最为基础的部分,就是为了解决上一节所提到的时序问题。这个算法几乎是所有类似派单系统为了解决这个问题的最基础模型,在Uber叫做BatchingMatching,我们内部也叫做“全局最优”或者“延迟集中分单”。

找寻司机和订单分配的全局最优是一个二分图匹配问题(bipartitegraphmatching),一边是乘客、一边是司机,可用运筹优化中各种解决Matching问题的方法进行求解。

再和大家澄清一下,我们所采用的批量匹配的模式和大家所希望的,“把离我最近的司机派给我”的「就近派单模式」并不矛盾,我们也是寻求“乘客接驾时长最短”的最优解,大多数情况下也是指派离你最近的司机,但充分满足每一个乘客的“把离我最近的司机派给我”的个体需求,有些时候反而会导致部分乘客的需求无法得到满足,比如说下面这种情况:

我们采取的做法是,把距离较远的2号车派给1号乘客。

把1号车派给2号乘客,这样一来,1号乘客和2号乘客,平均等待时长缩短为5分钟,比就近派单,缩短了2.5分钟,总等待时长缩短为10分钟,比就近派单,缩短了足足5分钟。

通过提升全局的效率,才能转化为让更多乘客的需求得到满足。

刚才所说的批量匹配的方法,理论上能够保证那一个批次的匹配是最优的。但是这样就够了吗?

若想即时的获得最优派单结果,唯一的方法是利用对未来的预测,即进行基于供需预测的分单。这种想法说来玄妙,其实核心内容也很简单:如果我们预测出未来一个区域更有可能有更多的订单/司机,那么匹配的时候就让这个区域的司机/订单更多去等待匹配这同一个区域的订单/司机。

基于供需预测的分单有很大意义,但由于预测的不确定性,其实际效果很难得到保证。为此,我们使用了一种更有确定性的预测方式来进行派单,即连环派单。

“连环派单,即将订单指派给即将结束服务的司机,条件为如果司机的终点与订单位置很相近”

整个派单算法核心克服的是未来供需的不确定性,动态的时空结构的建模,以及用户行为的不确定性,对于这些不确定性我们现在更多采用深度学习方法对我们的时空数据&用户行为进行建模预测。

另外,我们的问题相对于传统推荐搜索领域,多了一层匹配决策,我们到底积攒多久的订单进行分配,对于每一个分配来说我们都面临着分或者不分,现在分还是未来分配,并且分给谁的问题,这个问题天生就可以建模为强化学习问题,目前在我们的系统中也引入了强化学习方法来优化更长期的收益。

除了不断去优化之前说到的派单问题,整个派单系统还面临着大量其他的挑战,包括如何利用快车优享等多个品类的运力进行跨层的最优分配,如何同时对用户&司机&平台短期长期等多个目标进行优化,如何同时优化预约&实时订单,如何在具备网络效应的场景下对算法进行评估,如果建立一个较为精准的仿真系统等等,这里既是挑战,也是AIForTransportation中大量新的重新定义问题和创新算法的机会。

总结

每天,我们的派单系统要面对超过3000万用户的叫车需求,高峰期每分钟接收超过6万乘车需求,平均每两秒就需要匹配几百到上千的乘客和司机。我们当前的派单策略相对于最初的派单策略版本,每天能够多满足百万以上乘客的出行需求。为了让更多人能更快、更确定的打到车,我们的交易策略团队将在更好的公平感知的前提下,不断地优化和打磨我们的派单算法,为乘客&司机创造更多价值。

当然当前的派单策略还有很多不够完善和完备的地方,本身也是一个相当复杂的问题和系统,一方面借此机会让大家对派单有更好的理解和认识,另一方面,也更欢迎大家对我们提出更多的宝贵意见,帮助我们进一步成长。

THE END
1.为什么系统在负载下会变慢以及如何解决随着流量的增加,CPU、内存或数据库连接等资源将被过度利用,从而导致响应时间变慢。 2. 延迟放大 高负载会加剧数据获取或处理的延迟,从而导致整个系统的级联延迟。 3.单点故障 如果关键组件缺乏冗余,当这些组件不堪重负时,就会导致整个系统的速度变慢。 https://www.jssolo.com/wiki/2646
2.java应用降低响应时长mob64ca13f53d41的技术博客你通过查看线上日志或者监控报告,查到某个接口用到的某条sql语句耗时比较长。 这时你可能会有下面这些疑问: 该sql语句加索引了没? 加的索引生效了没? mysql选错索引了没? 1.1 没加索引 sql语句中where条件的关键字段,或者order by后面的排序字段,忘了加索引,这个问题在项目中很常见。 https://blog.51cto.com/u_16213571/12852260
3.每个程序员都应该知道的计算机延迟数字腾讯云开发者社区并行化操作:通过多线程或异步机制减少等待时间。 批量处理:一次性传输更多数据以减少操作次数。 本地化数据:尽量将数据存储在更靠近计算单元的位置,例如内存。 结语 延迟是每个程序员都需要掌握的基础知识,它贯穿于软件开发的各个环节。从缓存的使用到网络优化,理解延迟数字可以帮助你写出更高效的代码。 https://cloud.tencent.com/developer/article/2479489
4.故障排除Web服务器问题:常见的错误和解决方案(故障排除问题错误2:Web服务器响应时间慢 可能的解决方案:检查服务器是否过载。优化Web页面,例如减少图像大小和启用缓存。升级服务器硬件。调整Web服务器软件的设置,例如增加线程数或启用压缩。 错误3:Web服务器显示错误页面 可能的解决方案:检查 Web 服务器的配置文件是否存在语法错误。确保 Web 服务器有权访问所需的资源。检查https://www.ulidc.com/2024/12/23/%E6%95%85%E9%9A%9C%E6%8E%92%E9%99%A4-web-%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%97%AE%E9%A2%98%EF%BC%9A%E5%B8%B8%E8%A7%81%E7%9A%84%E9%94%99%E8%AF%AF%E5%92%8C%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88-%E6%95%85/
5.Linux局域网登陆响应时间过长fergus.y.m在局域网中,使用ssh登陆到其他机器上时,有时会出现等待10s以上才能正常登陆的问题。 原因: Linux默认使用dns解析登陆IP,但是在局域网,并没有dns服务器,而且机器上也没有添加 IP与域名(hostname)的绑定,导致浪费很多时间检查主机名。 解决办法: 1.在/etc/hosts文件中添加IP与hostname的绑定 https://www.cnblogs.com/domainfei/p/4025835.html
6.AWR报告详解柏林之花Memory Usage %:对于一个已经运行一段时间的数据库来说,共享池内存使用率,应该稳定在75%-90%间,如果太小,说明Shared Pool有浪费,而如果高于90,说明共享池中有争用,内存不足。这个数字应该长时间稳定在75%~90%。如果这个百分比太低,表明共享池设置过大,带来额外的管理上的负担,从而在某些条件下会导致性能的下http://blog.chinaunix.net/uid-7847832-id-3486670.html
7.www.gzhxaq.com/mydata/law/202304/20/16819541750906.htm(4)加工过热和过冷的部件时,为避免操作者触及过热或过冷部件,在不影响操作和设备功能的情 况下,必须配置防接触屏蔽装置。 (5)生产、使用、贮存或运输中存在有易燃易爆的生产设施(如锅炉、压力容器、可燃气体燃烧设 备以及其他燃料燃烧设备),都要根据其不同性质配置安全阀、水位计、温度计、防爆阀、自动报警装置http://www.gzhxaq.com/mydata/law/202304/20/16819541750906.htm
8.运维开发工程师面试(一)运维开发一面HTTP–Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到https://blog.csdn.net/jj1130050965/article/details/118249094
9.面经2022年软件测试面试题大全(持续更新)附答案如何判断响应时间不达标? 根据性能测试结果先检查看下是否是服务器带宽存在问题,如果带宽存在瓶颈,则会考虑增加带宽或者压缩传输数据,如果带宽没有问题的话,我们会从服务器上导出日志,开发一起讨论分析是哪个地方导致响应时间过长,确定问题后,就提单给开发修复,修复好了就进行回归测试。 https://maimai.cn/article/detail?fid=1730797197&efid=rTTgV-zsthsezl4x1LC2pw
10.汽车制造企业采购策略(附带干货)阶路响应时间试验 step response test 结构完整性 structure integrity 静态操舵力试验 static steering effort test 举升hoist 聚碳化透镜 poly-carbonate len 空气导流板 air deflector 宽敞悬臂式座椅 roomy cantilevered seat 亮丽的外表 smart apperance 磷化phosphating https://www.dongchedi.com/article/7298645016342479398
11.软件性能测试报告在产品性能验证中的作用解析提供决策支持:性能测试报告能够帮助产品经理和技术团队理解当前版本的软件性能状态,识别出可能存在的瓶颈或问题区域,从而为优化方向和优先级设定提供指导。例如,如果报告显示特定操作下的响应时间过长,则可以考虑对相关代码段进行改进。 验证性能目标达成情况:在产品开发过程中,通常会设定一系列性能目标,如最大并发用户数、https://m.kexintest.com/sys-nd/3158.html
12.建筑装饰装修工程质量验收规范(GB502102001)4.1.3 抹灰工程应对水泥的凝结时间和安定性进行复验 4.1.4 抹灰工程应对下列隐蔽工程项目进行验收: 1 抹灰总厚度大于或等于35mm 时的加强措施 2 不同材料基体交接处的加强措施 4.1.5 各分项工程的检验批应按下列规定划分: 1 相同材料工艺和施工条件的室外抹灰工程每500 1000m2 应划分为一个检 http://www.wjjzyxh.com/text.asp?newsid=680&oneid=96&zid=55
13.[转]G1垃圾收集器入门CurrentJ给定时间内完成的事务数. 每小时批处理系统能完成的作业(jobs)数量. 每小时能完成多少次数据库查询 在吞吐量方面优化的系统, 停顿时间长(High pause times)也是可以接受的。由于高吞吐量应用运行时间长,所以此时更关心的是如何尽可能快地完成整个任务,而不考虑快速响应。 https://www.iteye.com/blog/currentj-2333884
14.计算机职称考试试题及答案A)远程终端系统中,计算机的负荷较重,会导致系统响应时间过长 B)单机系统的可靠性较低,一旦发生故障,将导致整个网络系统瘫痪 C)多机通信系统,既分散又统一,但网络系统的响应速度变慢 D)在多机通信系统中,单机的故障不会导致整个网络系统全面瘫痪。 33、以下关于计算机网络的讨论中,哪个观点是正确的( )。D A)组https://mip.oh100.com/kaoshi/zhicheng/506773.html
15.Redis调优大揭秘:掌握这几十种技巧,让你的Redis更快更稳定虽然Redis使用了多路复用技术,但是复用的是同一个线程,这一个线程同一时间只能处理一个IO事件。如果前面某个命令耗时比较长,后面的请求就会排队,对于客户端来说,响应延迟也会变长。如果大量使用复杂度过高的命令,将会导致Redis处理请求的速度变慢,响应延迟变长。 https://developer.aliyun.com/article/1408665
16.核动力工程杂志中国核动力研究设计院主办2019年第04期结果表明研制的氢气浓度监测装置具有选择性强、能实现在线监测、响应时间快、测量范围宽、测量精度高等特点,可用于我国的" 基于三代核电技术的电气贯穿件导体组件研制 关键词:三代核电厂 电气贯穿件 三同轴导体组件 根据三代核电厂对各类特殊信号传输要求,以三同轴导体组件为例,针对三同轴电缆贯穿安全壳及其射频https://www.youfabiao.com/hdlgc/201904/
17.EDUP长距离BT5.1蓝牙USB加密狗RealtekRTL8761B100MUSB蓝牙适配器阿里国际站响应时间 ≤4h 线上GMV 560,000+ 美元 主要市场分布 Domestic Market,Western Europe,North America 房屋面积 1500m2 服务 轻定制 按需定制 品控 有原材料追溯标识 订购无忧 被评定为高分供应商 查看更多产品查看企业简介 供应商的产品说明 http://chinese.alibaba.com/product-detail/EDUP-Long-Distance-BT5-1-Bluetooth-1600411825950.html