第四范式团队KDD Cup世界冠军方案详解:解密共享出行场景中的优化问题
機器之心專欄
作者:羅遠飛
近日,全球頂級數據挖掘競賽 KDD Cup 2020 已經正式畫上圓滿句號,KDD Cup 2020 RL Track 比賽結果也隨之出爐,第四范式羅遠飛與北京航空航天大學軟件開發環境國家重點實驗室童詠昕教授研究組組成的聯合團隊脫穎而出,斬獲 KDD Cup 2020 強化學習挑戰賽世界冠軍。
據主辦方滴滴介紹,本次注冊隊伍達到了 1007 支,其中不乏普渡大學、南京大學、中國科學技術大學、中山大學、東南大學等國際頂尖高等院校以及電商巨頭京東、出行巨頭 Lyft、 日本通信巨頭 NTT DOCOMO 的身影。
作為全球數據挖掘領域最有影響力的賽事,KDD Cup 比賽由 ACM 協會的國際頂級會議 SIGKDD 舉辦,自 1997 年以來每年舉辦一次。KDD Cup 多年來一直保持著很高的工業界參與度以及對解決實際問題的敏感度。與去年 KDD Cup 強化學習挑戰賽的分類問題以及過往多應用在體育競技類比賽性質不同,今年的強化學習賽道(RL Track)聚焦于更加真實且問題極為復雜的業務場景,旨在解決共享出行領域優化難題。在題目難度進一步增加的同時,也將強化學習的價值進一步放大。
以下內容為冠軍團隊在競賽中的技術分享。
聚焦共享出行,題目難在哪?
如今,按需出行(MoD)或網約車平臺已成為大眾不可或缺的出行方式,對于網約車平臺來說,高效率的按需出行系統可以為司機和乘客提供更好的用戶體驗:司機可以通過減少空轉時間獲得更高的收入,乘客等待時間會更短,滿意度也會更高。因此,如何更有效地利用空置車輛,更快、更高效地匹配乘客需求、提高司機收入成為了網約車平臺優化指標當中的重中之重。
按需出行系統的效率取決于時空中供需分布的協調程度。如果想要調整供給分布來更好地協調需求,從而優化運營效率,有兩個重要的問題:車輛調度(vehicle repositioning)和訂單分配(order dispatching)。訂單分配負責把空閑的車輛分配給等待中的出行訂單,并把乘客(和司機)運輸到訂單終點。車輛調度是一種更主動的策略,可以把閑置的車輛部署到預計未來會產生需求的特定位置。
因此,參賽者需要同時解決按需出行平臺上訂單分配(order dispatching)和車輛調度(vehicle repositioning)問題,通過主辦方提供的真實場景數據和模擬器,基于強化學習設計一個智能匹配與調度算法,以最大化平臺所有司機的平均日收入。
聯合團隊解釋了賽題中的一些挑戰:
真實場景,數據量大:歷史數據包含西南某省會城市一個月時間內幾百個 G 的數據記錄;線上亦基于若干天的真實數據來評測;
因素多:影響司機收益的因素很多,如接駕距離、天氣、路況信息、出行時間等,需要考慮復雜的環境因素;
實時性:在一天內,算法每 2 秒被調用一次,必須 2 秒內做出分配,且訂單和司機信息每次不同,不能預分配;
調參難:官方并未提供模擬器,且已有數據不足以在線下搭建出高質量的模擬器,需要開發的算法具有較強的魯棒性。
世界冠軍團隊如何破局?
為了最大化平臺上所有司機日均收入,在計算每個訂單的收益時,采用基于強化學習的方法,不僅能考慮當前時刻的收入,還能兼顧未來可能的收益。同時,結合剪枝與 C++ 實現的高效二分圖匹配算法,能夠在 2 秒的時限內,及時找到合適的訂單分配方案,從而取得了更好的效果。
其解決方案整體框架如下:
代碼地址:https://github.com/maybeluo/KDDCup2020-RL-1st-solution
問題定義
本賽題的優化目標是最大化平臺上司機一天內的平均總收益,因此在派單時,不僅要考慮最大化當前時間窗的收益,還必須考慮未來的可能收益。同時,當前的訂單分配會影響車輛的位置和收益,對未來產生影響,是一個序列決策問題,因此考慮通過強化學習解決。此情景下,環境 (Environment) 包括訂單、司機車輛信息位置等,而參賽者需要定義智能體 (Agent)的學習和預測策略,以最大化司機的收益。本問題中司機和車輛一一對應,下文中如未特殊強調,車輛和司機含義一般可以互換。狀態 (State)、動作(Action) 和獎勵 (Reward) 設計如下:
2.1.1?狀態
聯合團隊使用車輛的地理坐標經過離散化后對應的 ID,來表示車輛的狀態,而不考慮時間因素。具體的,團隊同時使用了多種離散化策略,使得每個地理坐標,對應多個不同粒度的狀態,如主辦方提供的六邊形格子劃分策略,還可以是多種不同大小的四邊形等。如下圖所示,對于圖中的坐標點(紅色圓點),離散化后,可以同時采用六邊形、不同大小的四邊形來標識該點對應的狀態。
2.1.2?動作
智能體執行派單程序后,會生成司機和訂單的匹配列表。在不考慮取消訂單的情況下,成功匹配的司機將會進入服務 (serving) 狀態: 司機會到達指定上車點,接到乘客,并運送到指定下車點,拿到相應的獎勵。而未能分配到訂單的司機,將會閑置(idle),不能拿到任何收益。
2.1.3?獎勵
每次派單成功后,司機會拿到相應訂單的收益,作為本次動作的獎勵。本次比賽的目標,即是最大化所有司機的平均收益。
算法設計
每次智能體被調用時,將接收到當前所有的候選訂單信息,并在 2 秒內做出司機和乘客的匹配。候選信息列表是候選訂單的集合,每個候選訂單主要包含如下信息:
oorder_id 和 driver_id: 訂單 ID 和司機 ID,用來唯一標識候選訂單和司機;
odriver_location: 司機在當前時刻所處的地理位置,本次比賽中地理位置信息均采用經緯度對來表示;該信息信息經過離散化后,得到訂單的起始狀態標識;
oorder_finish_location:訂單結束位置,即訂單的目的地;該信息經過離散化后,得到訂單的終點狀態標識;
oduration:訂單的預估時長;
oreward:訂單帶來的收益。
此外,還有當前時刻信息、訂單起始位置(order_start_location)、接駕距離(司機和乘客的距離 order_driver_distance)、預估接駕時長(pick_up_eta)等,可以根據此類信息推斷訂單取消概率。
本方案整體策略為通過時序差分算法(Temporal Difference)學習狀態值,并通過二分圖匹配算法最大化收益。具體的,智能體接受到候選訂單列表后,將依次執行以下三個步驟:
1) 構圖:通過候選訂單信息,將司機和乘客建模成二分圖;并根據起止點對應的狀態,計算邊權;
2) 匹配:通過二分圖匹配算法,將司機和乘客匹配,并派單;
3) 更新:根據匹配結果,通過時序差分算法的學習規則,更新涉及到的狀態對應的值。
下面詳細介紹每個步驟。
2.2.1 構圖
本文將訂單 ID 和司機 ID 作為圖的頂點,并根據候選訂單信息,連接相應的訂單和司機,得到對應的圖。因為訂單之間、司機之間均不存在連接關系,因此該圖是二分圖。另外,為了保證更快的得到匹配效果,加速后續匹配算法,將二分圖按如下策略剪枝:對于每個訂單,只保留接駕距離最小 K 個司機對應的邊;在比賽中,K 取 11。
不妨將司機位置(driver_location)和訂單終點(order_finish_location)對應的狀態分別記為 S?和?S^',其對應的狀態值分別為?V(S)?和?V(S^')?,則二分圖中的邊權 w 計算方式為:
其中,R 為訂單對應的收益,t 為離散化后的訂單時長,為折扣因子, p 為訂單的取消概率。
訂單取消概率和接駕距離、接駕時長等有關,可以通過對官方提供的歷史數據中訂單取消概率建模,得到對應的訂單取消概率預測模型,以便線上推斷每個訂單的取消概率。
2.2.2 匹配
構圖完成后,得到剪枝后的二分圖以及每條邊的權重,可以直接利用匈牙利算法進行匹配。在實際使用時,團隊發現 Scipy 提供的對應算法接口? (https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linear_sum_assignment.html) 效率較低,導致超時(不能在 2 秒的時間窗內做出匹配)。如果直接使用貪心算法(完全貪心或- greedy)分配訂單,則效果不佳。另外,司機和乘客數量一般不等,導致圖中二分圖頂點數目不均衡。綜合以上因素,我們使用 C++ 實現了高效的匈牙利算法(hungarian algorithm),并編譯成對應的 so 文件,通過 Python 直接調用,以解決容易超時的問題。
2.2.3 更新
當訂單分配完成后,需要根據分配的結果更新對應的狀態值。因官方未提供比賽環境對應的模擬器,不能線下調參,因此選擇從簡單模型入手。我們選取了單步在線策略更新的 SARSA 算法(state–action–reward–state–action)。對于每個訂單的起點和終點,它們均會同時激活多個不同粒度的狀態表示,記每個坐標位置離散化后的狀態個數為 k。
對于派單的車輛,目標狀態值為:
對于閑置的車輛,目標狀態值為:
計算得到狀態值后,對起點所對應的各狀態,按照如下公式更新:
其中,為學習率。
聯合團隊也曾嘗試基于深度強化學習的狀態學習和更新方法,但效果不佳;嘗試基于動態規劃、時序差分等方法,通過歷史數據在線下學習對應狀態值,作為線上狀態的初值,未能取得收益。也嘗試了一系列方法,以降低時序差分單步更新時可能引入的噪音,仍未能取得更好的效果。
因此,針對真實場景下的大規模訂單實時分配問題,將強化學習和二分圖匹配算法相結合,在最大化當前收益的同時,能夠有效兼顧未來可能的收益。相比基線模型或其他選手方案,本方案能夠取得更大的收益。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的第四范式团队KDD Cup世界冠军方案详解:解密共享出行场景中的优化问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 来伊份与第四范式宣布战略合作 携手打造智
- 下一篇: Java面试——Redis系列总结