智慧物流挑战赛
饿了么拥有几十万外卖员,几百万商家,每天外卖订单几千万,服务几亿用户。具体统计每天饿了么外卖员(蓝骑士)行驶的距离累计可以绕地球400圈以上,这就是阿里巴巴本地生活今天的服务规模。
面对新型肺炎疫情,饿了么和广大商家一起,全力组织防护用品供给,平抑价格,增加骑士运力,持续实施最高等级的卫生安全举措,对骑手、餐箱、配送车辆、站点等消毒措施已全面升级,并进行专项督查。
Top5选手将获得天池奖牌、证书,以及精美礼品。
一等奖:1名,机械键盘
二等奖:2名,Kindle阅读器
三等奖:2名,天猫精灵
阿里校招绿色通道:初复赛TOP20团队有机会直投简历,简历直投邮箱。
外卖员绿色通道:优秀的参赛选手可体验当地骑士工作。
赛题会提供一部分历史订单数据,选手可以选择是否利用这部分数据做挖掘。此部分数据包括订单时间、订单预期时间、订单起始经纬度和订单结束经纬度。
初赛的目标是对骑手的下一个动作和下一个动作完成的时间做预测。很明显,存在两个不同的目标:预测动作和预测时间。并且存在着逻辑先后关系:先有动作,再有时间。在这里我主要分享一下我们组对于第一个小任务:预测骑手动作的思路,因为预测时间相对来说更简单一些。
首先,我们认为,判定一个动作,仅仅通过这个动作本身的相关属性是远远不够的,需要对所有的候选项通盘考量。也就是说,我们认为这个任务的重点是分析与提取某一个动作候选项与其他动作候选项(context)的关系。其中,context中可能有不定多个条目(动作候选项),并且,我们还希望获得一个对context的条目顺序无关的表示。
我们从一下两个方面去解决该难题
我们的总体的解决思想是将一个动作与一个动作之间的关系转化为一个排序问题:我们对每个动作进行打分,这个分值代表着这个动作的紧急程度,我们希望骑手选择的动作的分值尽量比其他动作的分值要大并且尽量扩大这个间隔。
我们对context进行化简:将context的大小化简为1,彻底消除顺序问题。具体讲,我们选择地理上离当前动作目标地点最近的动作作为context,因为我们认为骑手在规划订单的时候,会比较多地考虑一i个订单和附近进的订单。
基于排序以及context化简的思想,我们的模型阐述如下:我们的模型基本结构是一个mlp模型,候选动作与其context叠加后送入共享参数的mlp模型进行打分。打分完成后,经过softmax对其进行归一化,并使用negative log loss 进行优化,negative log loss可以极大化正确选项的得分并且极小化不正确选项的得分,从而达到排序效果。
复赛我们采用的是简单贪心派单策略,总体pipeline如图3所示
根据骑手-订单(组)生成订单对
按照cost从小到大排序,依次模拟派单
原因是该方法比较迅速,在一个复杂度为主要限制的情况下,可以给算法的其他部分留下充足的时间。一些更加全面的方法都有一定的应用局限性或者复杂度较高,比如:二分图最有匹配算法,计算骑手与订单的整体cost最小的匹配。
将行动与之后的行动两两组合在一起,如果是紧接着的行动,则结果为True,否则为False;
根据业务规则,排除不可能连续的行动,如5、6为同一个订单的取餐和送餐,则5还没发生,6必然不可能发生,故1 6、2 6等等都是不可能的,排除;(背单上限后不能再取餐、订单还没开始等都是不合理的)
按上一个行动分组,如果后续可选择动作只有1个,故没有比较的参考价值,排除;
同理,预测集中已完成的行动也可用同样的方法生成训练集;
而预测集中需要预测的那一个节点,用同样的过滤方法生成预测集;
提取特征
行为类型、距离、新老骑手、骑士速度、背单能力、天气、
离期望时间(预计取餐时间或送达时间)相差时间 即剩余时间、
离开始时间(分配时间或取餐时间)相差时间 即已开始时间、
及在所有待选择行动里的相对距离和相对剩余时间
(还可以考虑更多如:背单数等)
带入模型
用五折lgb分类模型预测待选择行动中概率最高的一个为下一个行为
提取所有正样本用五折lgb回归模型预测这个行为所需要消耗的时间,加上上一个行动时间即为预测时间
复赛目标:合理安排骑手,平均配送时长尽可能短、超时运单数尽可能少;思路:优先满足尽可能多的运单准时送达;策略:先分配能准时送达的运单,再分配无法准时送达的运单。
遍历所有骑手与未分配运单,通过穷举所有行动方式判断该骑手增加该运单后,能否准时送达;
最优先运单:能准时送达的骑手数最少;
在能准时送达的骑手里随机挑选一个;
重新计算分配的骑手能否完成之前可以准时送达的运单;
不能准时送达的放在行动链最后面;
将在行动开始时间在下一个调度周期前的行动记录下来,若是最后一轮,则全部行动记录下来,准备发送给服务器;只有当运单的相关行为被记录下来,才认为该运单已分配;
穷举路径
每个骑手分配的运单不能过多,过多的运单将导致复杂度激增;
只需要找到一条可行的路线,则终止穷举返回;
尽早的发现路线的不可行,每进行一步,都需要判断
取了餐的运单 -> 当前时间 小于 送达时间
未取餐的运单 -> 当前时间 小于 送达时间 减 取餐到送餐所需要花费的时间
未超出背单上限;大量重复的数据可提前算好,如送餐所需时间等;
记录骑手无法完成的运单,以免重复计算;
到店行为和取餐行为可以放在一起;
初赛骑手在面临行为决策时,存在多个待取订单和多个待送订单,我们团队将骑手行为预测问题分为两个阶段进行解决。
阶段一:骑手决策时,先考虑从多个需要取的订单中选出最有可能取的订单,和从多个需要送的订单中选出最有可能送的订单,称之为“选单阶段”
阶段二:骑手在经过阶段一的选单后,进行取单还是送单的决策,确定最终的行为,称之为“决策阶段”
比赛完整分享,请访问http://coggle.club
或点击阅读原文,直达分享链接!
本文分享自微信公众号 - 从数据分析到人工智能(close_3232479263)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4593033/blog/4436454