DoorDash如何使用ML和最佳化解決訂單派送的排程問題
DoorDash 每天交付數百萬個訂單,為了支援我們的平臺,我們需要解決“排程問題”:如何儘可能高效地透過 Dashers 將每個訂單從商店送到客戶手中。在這篇博文中,我們將討論排程問題的細節,我們如何使用機器學習和最佳化來解決問題,以及我們如何透過模擬和實驗不斷改進我們的解決方案。
訂單派送目標
讓我們首先定義我們在排程 Dashers 時要實現的目標。我們的目標有兩個:
- 儘可能高效地向 Dashers 提出報價,以便他們最大限度地提高賺錢機會。
- 快速準時交付訂單,讓消費者和商家對他們的體驗感到滿意。
實現這些目標需要克服許多挑戰。我們使用機器學習和最佳化解決方案應對每個挑戰,並使用模擬和實驗方法來構建該效能。
尋找最好的Dasher
要找到交付訂單的最佳 Dasher,我們需要考慮許多不同的因素。最重要的因素是Dashers 的地理位置。我們通常希望找到儘可能靠近商店的 Dasher,以儘量減少總派送時間。
我們考慮的第二個因素是確保 Dasher 會在正確的時間到達。如果我們過早派遣 Dasher,他們將不得不等待訂單準備就緒。如果我們發貨太晚,食物會放置太久並可能變冷,而商家和消費者會因為食物沒有儘快交付而感到不安。
另一個因素是批處理,透過尋找機會,儘可能有效地利用 Dasher,單個 Dasher 可以在同一家商店(或附近的一組商店)提取多個訂單。
考慮市場條件
還有其他我們無法控制的市場條件會影響我們選擇哪個 Dasher 的決定。最重要的是任何特定市場的供需平衡。雖然我們努力確保有足夠的 Dashers 來完成訂單,但有時我們可能沒有足夠的 Dashers 來處理所有訂單。在這些供不應求的情況下,我們必須權衡現在和以後接受哪些訂單。在這些情況下,如果單個 Dasher 能夠同時提取多個訂單,那麼尋找批處理機會也是有益的,消費者可以更快地獲得訂單。我們還需要檢視天氣和交通等條件,這些條件可能會影響交貨時間或導致 Dashers 以高於我們通常預期的速度拒絕訂單。
解決派送問題
處理如此複雜的問題是一個兩階段的過程:
首先,我們構建了一個複雜的排程服務,該服務利用許多 ML 和最佳化模型來了解市場狀態,並向 Dashers 提供最佳報價以滿足我們市場的需求。
第二階段是建立模擬和實驗平臺,使我們能夠不斷改進我們的排程服務。
這兩種方法都幫助我們實現目標,並每天繼續進步 1%。在以下部分中,我們將介紹我們的排程系統的架構以及它如何處理樣品交付。然後我們將描述我們如何利用我們的模擬和實驗平臺來改進我們的決策。
構建 DeepRed:我們的排程服務
在高層次上,排程引擎建立在兩組數學模型之上。第一組模型是 ML 模型,經過訓練可以估計如果我們將訂單提供給特定的 Dasher,訂單將如何展開。這些模型專注於對每個訂單、商店和 Dasher 進行預測。
一旦做出估計,它們就會被送入我們的第二個建模層,我們的混合整數最佳化模型。最佳化模型最終建議將哪些訂單提供給哪些 Dashers。ML 層專注於對每個訂單進行單獨估計,而最佳化層則專注於為整個市場做出系統範圍的決策。
總之,ML 模型和最佳化層從我們的市場中提取數百萬個資料點,形成一組排程決策,以確保將每個訂單提供給 Dasher,後者可以儘可能高效地將其從商店交付給消費者。
訂單的配送過程
理解我們如何解決排程問題的最好方法是考慮單個訂單如何透過 DeepRed 的複雜系統工作。我們將看看訂單如何透過 DeepRed 的多個層,從我們的報價候選生成器開始,繼續到我們的 ML 層,該層估計這些報價在現實世界中的表現,然後透過我們的最佳化層,得出最終建議。
構建潛在的報價
當新訂單到達我們的排程引擎時,我們首先更新我們對市場當前狀態的理解以及該訂單如何與 Dashers 和其他訂單互動。我們正在尋找附近有哪些 Dasher 可以領取新訂單。這些 Dashers 可能正在等待他們的下一個訂單,在這種情況下,我們可以立即為他們提供新訂單,或者他們可能正在完成另一個訂單,在這種情況下,我們可以計劃在他們完成訂單後立即向他們提供新訂單當前交貨。
我們在此階段的重點不僅限於哪些 Dashers 可用:我們還會檢視其他哪些訂單正在等待接收。如果在與我們的訂單相同的商店或同一街區有另一個訂單被提取,則將兩個訂單提供給同一個 Dasher 可能是有意義的。如果在我們的訂單需要交付的地方附近還有另一個交付需要下車,情況也是如此。
透過檢視可用的 Dasher 和其他訂單,我們能夠為我們的新訂單構建潛在的報價:該訂單可以提供給的一組 Dasher,以及可能由同一個 Dasher 提取的其他訂單。然後,這些潛在的報價被髮送到 ML 層,在那裡我們預測這些報價在現實世界中可能會發生什麼。
更多點選標題見原文
相關文章
- 【OracleEBS】 訂單暫掛問題sql解決OracleSQL
- DoorDash如何使用 Apache Kafka 和 Elasticsearch 構建更快的索引?ApacheKafkaElasticsearch索引
- 曠視科技提出ExFuse——最佳化解決語義分割特徵融合問題特徵
- 解決k8s排程不均衡問題K8S
- 電池監控和最佳化解決方案Wattagio
- SAP訂單編排和流程增強概述
- SchedulerX 如何幫助使用者解決分散式任務排程難題?分散式
- Uber 如何使用 ML 和線性規劃最佳化推送通知的時間
- PHP+Redis解決實際問題一:訂單限流PHPRedis
- 券系統設計及券和訂單號使用重複下單問題彙總
- Composer 使用過程中遇到的問題和解決方案
- Java如何解決同時出庫入庫訂單號自動獲取問題Java
- SAP 訂單模型的編排方式概述模型
- 企業分賬如何幫助使用者解決成本最佳化和預算分配的問題
- 多機器人協作排程問題機器人
- 錯排問題如何做?
- 如何快速最佳化幾千萬資料量的訂單表
- 如何解決表單提交的中文亂碼問題
- 詳解非同步任務 | 看 Serverless Task 如何解決任務排程&可觀測性中的問題非同步Server
- 化解SaaS安全問題的三大措施
- 以TiDB熱點問題來談Region的排程流程TiDB
- Youtube訂閱——解決在彈窗內使用Youtube訂閱按鈕高度顯示不全的問題
- thrift使用過程中的問題
- 解決 / 最佳化問題的切入點
- 解決庫存扣減及訂單建立時防止併發死鎖的問題
- Spark中資源排程和任務排程Spark
- 如何使用程式碼建立和讀取 SAP CRM 訂單的 Text 資料
- .NET Core Hangfire週期性作業排程問題
- 如何解決小程式使用率低的問題
- PMC如何透過排程最佳化降低工廠直接成本?
- 分散式任務排程平臺XXL-JOB本地配置可能遇到的問題和解決方案分散式
- ML.NET教程之計程車車費預測(迴歸問題)
- 基於PSO粒子群最佳化的車間排程問題求解matlab模擬,輸出甘特圖Matlab
- 教你如何使用PyTorch解決多分類問題PyTorch
- 【技術分享】如何使用FMEA解決問題?
- 使用Spring Boot排程WebSocket推送的教程和原始碼 - BaeldungSpring BootWeb原始碼
- 在群裡看到一段程式碼,是記憶體模型的問題還是協程排程的問題呢?記憶體模型
- 聊聊kube-scheduler如何完成排程和調整排程權重