通用技术 百度外卖的技术味道

易寒 for 百度外卖 · 2016年11月19日 · 最后由 易寒 回复于 2016年11月20日 · 1441 次阅读

转载来自百度为什么这么招黑,这是阿尔法狗火爆的时候,有人在知乎上鄙视百度的一篇帖子,刚好拿外卖做靶子。我们的一位 RD 同学的回答在知乎上引起了热议。也分享过来让大家认识一下外卖

我是百度外卖的一名 RD,主要负责智能物流配送系统的设计和研发。很少主动回答问题,但看到这个题,还是忍不住想回一下。坦白说,看到题主发布的这张图,心里有一种五味杂陈的感觉。最近终于有时间,来写写我们在送外卖这个事情上用人工智能技术所做的事情,这些技术又究竟解决了哪些问题~

一、 提升效率

我们可以想象这样一个场景:在国贸地区,假设有 100 个骑士(送餐员),在用餐高峰期接到了 300 份订单,这些订单需要从 200 家不同的餐厅取餐,并送往 100 个不同的地址。这 100 个骑士应该每个人取几份餐?他们应该分头按照什么线路行进,各自到哪些餐厅取餐,并送到哪些地址,最终可以做到让骑士少跑冤枉路,一次多送几份,也让饥肠辘辘的用户尽快的收到所点的餐品?这个时候需要根据每个骑士实时的位置、正在配送的订单路线、对时间的要求、餐厅出餐速度的快慢、每个骑士能力的差异等等。相比起来,外卖物流调度,远比专车的调度问题复杂得多。

很显然,单靠人工派单(饿了么的模式)和骑士自主抢单(美团外卖和到家美食汇的模式)已经远远不能很好的完成这个任务了。因为无论是配送员还是调度员,都无法在短时间内做出最好的判断,大部分情况只能凭经验和直觉。

于是,我们从去年起就在尝试独立设计开发物流界第一套智能调度系统,期望借助机器学习和人工智能的技术实现订单最优的自动化分配。实际上经过两个月的努力,借鉴了图论和 Ranking 算法中的很多思想,2015 年 3 月,我们的系统第一次在与人工调度 pk 的时候在多区域的 abtest 中整体效果优于了调度员的人工调度。

之后我们结合大量历史数据设计开发了一套高精度的物流仿真系统,这套仿真系统可以实现对任何调度模型的订单分配结果,预测每个订单的完成时间,预测的精度在 3 分钟之内。基于这套仿真系统,我们开始采用机器学习做模型的方法不断采用真实数据训练并优化调度模型,赋予模型根据实际调度结果自学习的能力。2015 年 5 月,这套智能物流调度系统,击败了全北京的调度员;7 月,全国适配后的系统击败了全国所有城市的调度员。

我们实现了业界至今唯一的全自动化智能调度,获得了 21 项专利,并且在配送时长和骑士效率方面都远远优于其他平台。所以,百度外卖的订单才有信心对用户承诺百度物流订单超时五折赔付(同样仍是外卖平台中唯一的一家)。实际上每天赔付的订单占比非常少。

二、预估出餐时间

对于一个外卖骑士来说,自己几分钟能够赶到餐厅取餐是一个基本确定值,多长时间能够送到用户家中也可估算,可是 “餐厅多长时间能把餐做出来” 这件事,却是非常难以预估的事情。毕竟每家餐厅在不同时间的忙闲程度不同,未完成的订单数量不同,做不同的菜品速度也不同。但这个时间预估对自动分配订单又十分关键,预估的不准确很容易导致分配订单后骑士去早了,在餐厅白白等待;或是骑士去玩了,餐已经凉了的问题。

为了解决这个问题,我们在出餐时长预估中尝试了大量的模型,比较效果后最终采用了 DNN 模型,并与百度深度学习研究院一起进行了大量特征和模型的优化。最终模型预测的出餐时间误差在 7 分钟之内,这个误差已经在实际测试中比餐厅服务员人为预估的更准确了。

在此基础上,全自动的智能系统在给百度骑士派单时,已经充分考虑出餐时间的因素,从而使得骑士能够做到到店就能取餐,不必苦苦等待,节约送餐时间。我们还即将在 APP 客户端上线取餐时间个性化预估功能,给用户带来更加准确的送达时间预估。

此外在解决骑士路线规划时借鉴了 TSP 问题的解决方法,大幅缩短了骑士的单均配送距离;在餐箱容量有限的情况下,选择配送订单时借鉴了背包问题的解决方法。做全局最优分配时借鉴了 KM 算法。整个订单分配的决策过程中做了很多的传统算法与机器学习结合。

为了让调度系统拥有根据历史数据自动学习的能力,我们为调度系统搭建了一套精准的仿真系统和评估系统,使得不同的调度模型与参数组合都能在仿真和评估系统中得到检验,这样便能根据每个城市的订单情况,定制化的训练最适合当地的模型,并能够每天根据最新的数据自动学习更新。

抛开其他还没有提及的子系统不谈,与 alphago 一样作为人工智能系统,百度外卖的物流智能调度系统拥有着同样的自主学习的能力,同样在各自领域中具有胜于人工的优势,alphago 提升了大众对人工智能的认知,而我们也在用人工智能服务着每一个用户。用技术帮助骑士们多获得了一些收入,用 AI 帮助用户早一点吃上热乎乎的饭菜,我觉得也是一件很值得骄傲的事情。

以上,谢谢大家。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 6 条回复 时间 点赞

就不能分段么……

可以尝试手动注释分段。。

深度学习和技术学习现在用的挺普遍了

不知道外卖的数据处理和特征工程是专门的数据科学家在做么? 还是 RD 自己评经验? 自学习部分又是怎么实施的?

在模型生产出来之前有什么有效的测试方式呢? 还是只看模型出来后的 AUC? 很想知道百度的 QA 同学是怎么做的?我们目前都是自己在研究

#4 楼 @ycwdaaaa 这是转载的回复,我自己不懂这些东西。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册