## CROWDDELIVER: Planning City-Wide Package Delivery Paths Leveraging the Crowd of Taxis [crowddeliver: Planning City-Wide Package Delivery Paths Leveraging the Crowd of Taxis ](https://ieeexplore.ieee.org/abstract/document/7575702) ## Abstract 快遞需求量提升,本文提出經濟的快遞服務: **CROWDDELIVER** 。 設計分為兩階段,第一階段:透過**歷史計程車軌跡數據**來識別給定起終點的最短包裹傳遞路徑並估計時間。第二階段:開發**即時調度算法**,根據實時請求找出最佳路徑。 ## Introduction 隨著快遞需求量提升,__減少遞送時間__、__降低遞送成本__,為首要目標,透過 **包裹與計程車乘客共乘** 的方式,在不提升成本的前提下,最大化計程車載客與送貨效益。 透過以上方法將有以下優點: 1. **遞送機會豐富**:計程車為目前城市主流的交通方式。 1. **全時段營業**:計程車在深夜等非尖峰時段仍會營業,因此這項遞送服務可以全天候不間斷運行。 1. **符合環保效益**:只需透過原在城市中的計程車進行遞送,不須額外指派車輛,造成跟多污染排放以及更多環境負擔。 **問題與挑戰** : 因為計程車載客的距離有限,無法達成遠距離的包裹遞送,因此需要多輛計程車進行多輛中繼傳遞,因此產生以下兩項問題與挑戰。 1. 中繼遞送的**時間估計**問題。 1. 乘客起始目的路線與包裹遞送的**路徑規劃調度**。 本文主要貢獻 : 1. 利用計程車之間 **非刻意** 合作達成遞送目標POI減少建設包裹儲存站之需求。註:(POI)熱門景點,如餐廳、商場、體育館等。 1. 透過 __CROWDDELIVER兩階段__ 路線規劃找出最佳路徑 * **階段一**:透過歷史計程車路線以及(NHPP)模型預測最短路徑與估計時間 * **階段二**:透過實時的叫車需求演算法(AdaPlan)所預估時間來與第一階段之時間做比較和優化。 ## Assumptions * **Assumptions 1** 計程車以載送乘客為主要目標,計程車尖峰時段不能被用以遞送包裹需求。 * **Assumptions 2** 假定在某種適當的激勵下,計程車司機都會願意接下遞送需求的訂單。 * **Assumptions 3** 所有包裹都經過追蹤與管理確保包裹損壞或遺失之問題能夠被解決。 ## Problem Statement **給定條件** 1. 道路網路 G(N,E) 和 包裹寄放站集合CS 1. 計程車歷史軌跡集合 Tr 1. 即時計程車訂單TOR、即時包裹訂單PR ==**目標 : 最小化包裹交付時間**== **限制條件** 1. tor.tt > pr.tp 包裹訂單請求時間需早於計程車訂單請求時間。 2. 計程車須在完成當下包裹遞送任務後才能繼續接受遞送請求。 ## Overview of CROWDDELIVER System 1. **Data Pre-processing** 對POIs進行篩選,先選擇**靠近道路兩側的POI**,並對於路網上的邊**每一個行駛方向只選擇一個POI**。將行駛軌跡轉換為一系列邊,並定義起始與目標邊以及行程開始結束之時間。 1. **Offline Trajectory Data Mining** 分析過去數據,乘客乘坐計程車的時段以及路徑來規劃包裹形成。選擇**適當的POI**作為中繼站最小化包裹遞送時程。 1. **Online Package Routing1** 透過**歷史資訊**與**即時數據**相互比較計算得出最佳路徑與時間。 ## TWO-PHASE APPROACH ### **Phase I** : Offline Tragectory Data Mining 根據**歷史軌跡**做遞送路線規劃,首先先將一整天24h分成不同的time-slot,再根據不同的時段進行計算。 * **Step1 : 過濾出可遞送的歷史乘客軌跡** <font color=#800000>*Ddist(Tri.o, loc(csi)) < δ (1)* *Ddist(Tri.d, loc(csj)) < δ (2)*</font> 找出所有Csi-Csj之間的軌跡透過以上兩個方程式來**確保Csi、Csj和乘客的起終點不會過遠**。 * **Step2 : 計算Csi、Csj之間的權重(等待時間+寄送時間)** 篩選出可遞送的乘客軌跡後透過軌跡計算各Cs間權重。 <font color=#800000>*tc = WaitingTime + DrivingTime*</font> WaitingTime由 **頻率倒數(1/λ)** 來表示平均等待時間。另外DrivingTime由**每一次兩站遞送時間做平均**來計算得。 將WaitingTime 和 DrivingTime 分開維度做圖表觀察,**等待時間低於一小時的行程只占總形成的7%**,然而**行車時間低於一小時的行程約佔總行程的70%**。 表示每段行程很大的比例花在**等待時間**。 #### Time-Dependent Routing Table Building: 有些車流量小甚至沒有車流量的區域可能會有Cs之間邊界權值有無限大的可能,因此可能需要透過其他 **熱門路線(hot-line)** 來達成,形成 **Virtual hot-line** 。 :::success ⛳**形成 Virtual hot-line 條件** 1. **Spatially Close** 若需要中繼站來進行轉送,兩個中繼站之間的距離要小於β。 1. **Move forward** 中繼站必須更接近目的地點。 1. **Limited number of transshipment** 中繼站的轉寄次數不能超過某常數C。 1. **Minimum time cost on virtual hot-line** 必須從所有virtual hot-line中選出邊界權值最小的一條。找到所有hot-line or Virtual hot-line之後透過 **Simple Top-K Algo**. 來規畫路徑。 ::: 接著需要透過演算法(B. C. Dean, Continuous-time dynamic shortest path algorithms, M.S.thesis, Dept. Comput. Sci., MIT, Cambridge, MA, USA, 1999.) 製作 **Time-Dependent Routing Table** 來紀錄每一個包裹中繼站之間的**最短距離**, 因為並不是每條包裹遞送路徑都靠近Cs且能在**Time-Dependent Routing Table**查詢,因此需要**Simple Top-K Algo**。 **Simple Top-K Algo** * **Step1** : 找出與包裹寄送點與目的點最近的K個中繼站。並將與**寄送點最近的前K個中繼站設為Set1**,與**目的點最近的前K個中繼站設為Set2**。 * **Step2** : 透過**All-Pairs Shortest path**最短路徑算法找到兩set中每個元素之間路徑,形成集合Path。 * **Step3** : 若path屬於空集合,則無路徑,若有**擇其最短路徑**。 ### **Phase ll : Online Package Routing** 根據歷史行車軌跡以及上述演算法,我們可以依照路徑並等待叫車機會對貨物進行遞送,然而這樣的方法是**根據統計資料所得出的結果**,需要搭配**即時的叫車計畫來提高效率**。 **AdaPlan** * **Step1**:在開始前會先依據PhaseI所安排的路線進行等待,若出現某即時行程之 **DrivingTime + 此行程目的地到包裹目的的RoutingTable預估時間** < **包裹從出發地到目的地之RoutingTable預估時間**,則將包裹安排於此行程。 * **Step2**:當此行程結束後,將包裹安置於**行程目的地附近的中繼站**,並將**包裹請求時間設為安置時間**,另外包裹之**出發地設為該中繼站**。 * **Step3**:最後重新**計算並更新RoutingTable**。 總結來說此演算法透過**過去乘客軌跡資訊**來建立基礎的路徑規劃及時間預測演算法,**根據基本預測動態的調整路徑規劃**來指引報果遞送路徑並達到更好的效果 ## EVALUATION 為了評估Crowddeliver算法之效率,對案例進行研究並展示。 ### Experimental Setup 1. **實驗數據** 對真實世界數據進行統計,統計中國杭州市7614台計程車的軌跡數據,以及確立POI包裹交換站與道路網絡等訊息。將資料分為測試集和訓練集以模擬實際計程車請求,測試AdaPlan效能。 3. **模擬** 在上述所蒐集的數據中並不包含**包裹交付訂單**和**計程車訂單請求**的資訊,因此本文透過一些方式來進行模擬。 在**包裹交付**的部分,透**過隨機生成起始與目的點的方式**來模擬訂單,此外產生後的模擬定待會替除掉**短距離訂單( short-distance OD pairs)**,因為這比較少出現也不符合效益。 另外在**即時叫車訂單**部分,因為所掌握的資料只有軌跡路徑,沒有實際叫車訂單資訊,因此透過*replay-and-sample*來做模擬。 Replay : 在測試時間內 Replay 所有計程車軌跡。 Sample : 以固定比例採樣認其軌跡為線上叫車訂單。 7. **測試指標** 本文設定兩個指標來評估AdaPlan algorithm * **Success Rate** Formula : <font color=#800000>AdaPlan完成的包裹訂單中 (**運送時間<要求遞送時間** 之**訂單數量**) / (總包裹數量)。</font> 當 Success Rate 數值越高 AdaPlan效能越好。 * **Number of Transshipments** 表包裹中繼轉運的次數,越低的次數可能可以帶來較低的成本與風險。 Formula : <font color=#800000>Numtrans = Numrelays = Nump_taxis − 1.</font> (計程車載送次數 - 1) ### Baseline Algorithms 透過與 **FCFS** 以及 **DesCloser**兩種算法來比較並呈現CROWDDELIVER的性能表現。 * **FCFS** 如出現靠近包裹的計程車叫車訂單,就立刻把包裹分派過去。(未考慮靠近或遠離包裹目的地) * **DesCloser** 如出現靠近包裹的計程車叫車訂單且**叫車目的能夠更加靠近包裹遞送目的**,則將包裹分派過去。 ### Experimental Objectives * Q1 : 遞送一個包裹需要多少運算資源(Computational Resource)? * Q2 : 成功遞送率(**Success Rate**)為多少? * Q3 : 轉送次數(**Number of Transshipments**)為多少? * Q4 : CROWDDELIVER 和最佳解 (**optimal Sol.**)差距為多少? * Q5 : 此系統一小時能夠遞送多少包裹 (Per Hours) ### Experimental Results #### Results of Response Time 對於三種方法(FCFS、DesCloser、AdaPlan)之響應時間計算做以下分別討論。 * **FCFS** : 只需要符合 Ddist(tor.o, pr.o) < δ和Ddist(tor.d, {CS}) < δ 的 **第一輛** 車即可,因此運算較簡易。 * **DesCloser** : 除符合 Ddist(tor.o, pr.o) < δ和Ddist(tor.d, {CS}) < δ 外,還須計算 CS 是否**更加接近目的地**。 * **AdaPlan** : 需要在每個CS做**反覆的比較、查找並更新**,因此運算最為複雜。 ![](https://hackmd.io/_uploads/rJcGCQ8sh.png) ▲在**不同採樣率**下不同演算法包裹遞送過程之**累計響應時間**統計圖。 由圖可簡單觀察,**Sampling Rate越高,Response Time越大**,原因很直觀,採樣率越高表越多計程車是透過叫車系統來載客,系統需花費更多時間來計算並篩選計程車是否符合條件,因此花費時間越多。 另一方面來看,在不同演算法的響應時間比較中可以觀察到FCFS雖看似計算最為基礎但所花費的總響應時間最多,作者猜測很可能是因為**FCFS需要更多的轉遞送次數(transshipments)**造成**計算次數增加**,進而**累積更長的響應時間**。 #### Results of Success Rate * **Success Rate w.r.t Sampling Rate** ![](https://hackmd.io/_uploads/BJyWPHLs2.png) ▲ **Success Rate 在 DesCloser 和 AdaPlan 算法下和Sampling Rate呈正相關**。FCFS則和Sampling Rate較無關聯。由此現象可推測原因為,**越多的叫車訂單能使等待時間降低**,進而提高 Success Rate,然而在**FCFS情況下,包裹可能會被遞送至遠離目的CS,造成更多轉運次數**而影響Success Rate。 ##### **Success Rate w.r.t Region** ![](https://hackmd.io/_uploads/Bky9wrPsn.png) 實驗前首先根據包裹**起始地區**與**目的地區**將不同訂單分為三大類別 : ![](https://hackmd.io/_uploads/HyQPABDih.png) **▲ Category I :** 由**熱門地區**送至**熱門地區** ![](https://hackmd.io/_uploads/rk3YCBvo3.png) **▲ Category II :** 由**非熱門地區**送至**熱門地區** or 由**熱門地區**送至**非熱門地區** ![](https://hackmd.io/_uploads/BktcCHDsh.png) **▲ Category III:** 由**非熱門地區**送至**非熱門地區** AdaPlan無論是任何Category下都表現最好的,即便是CategoryIII,都有六成的貨物能在六小時內送達。 * **Success Rate w.r.t Time** ![](https://hackmd.io/_uploads/Bkl83wwih.png) ▲在 **:sunny:DayTime** **Work Day相較於Rest Day有更短的平均遞送時間和更高的成功率** 相反的**在 :first_quarter_moon_with_face: NightTime Rest Day相較於Work Day有更短的平均遞送時間和更高的成功率**。 * **Number of Transshipments** ![](https://hackmd.io/_uploads/BJzdfuDo3.png) 實驗結果顯示AdaPlan在不同地區條件下遞送貨物**皆有著最少的轉運次數**。另外在**夜晚遞送的轉運次數稍微較白天多一些**,平均皆在**四次**左右。 * **AdaPlan v.s. Optimal** ![](https://hackmd.io/_uploads/HkaF1Ywjh.png) **Optimal 比較** 假設所有計程車與乘客資訊都是已知,計算所有包裹可到達路線從中選出最優解。 最優解的計算選擇過程平均需要**花費14280.9秒**,計算出可送達時間為**1.164小時**,相比之下**AdaPlan**只**需要0.8秒**即可計算完成,所規畫出來的平均遞送時間為**2.337小時**。 雖然使用AdaPlan所花費的**平均遞送時間為最佳規劃的兩倍**,但相比Optimal Sol.,AdaPlan計算所花的**響應時間非常微小**。 * **Transport Capacity** 系統的運輸能力(運輸量)是實際執行時的必要考量因素。 ![](https://hackmd.io/_uploads/H1aNDYPi3.png) ▲ 每小時產生包裹數量**小於1000**時,成功投遞的包裹數量和產生數量**呈正比**(約成功投遞9成),然而每小時產生包裹超過1000時,能夠成功投遞的數量**逐漸趨緩**,**不再成正比增加**,說明了此系統一小時內在實驗假設情況下的運輸能力約為**每小時985個包裹**。 ![](https://hackmd.io/_uploads/HyrbiYPo2.png) ▲ **包裹轉運站數量**也相當程度的**影響著系統的運輸能力**。實驗將每小時包裹請求遞送數量設為定量**1200**可觀察到在**轉運站數量為50**的情況下,**運輸能力十分低落**,在大約700個轉運站能夠讓每小時運輸容量提升到約900個包裹。 實驗中隨機選取轉運站地點,雖然**轉運站地點的選擇也會影響運輸容量**,但無論如何選取,趨勢皆為 : **轉運站越多運輸容量越大。** ## Discussion 尚未解決的問題。 * **Package Delivery Request** 此研究專注於在**任何包裹遞送路徑**的情況下,尋求近似最佳路徑規劃,因此透過**隨機模擬**的方式產生遞送包裹來做實驗,可能會與現實有偏差,未來需要透過更多**實際數據來計算實際的包裹流向分布**且須透過更多**真實的包裹遞送請求數據**整合到整個系統架構中。 * **Real-time Taxi Ordering Request** 1. 關於計程車**訂單問題**,此研究並沒有收集到**手機叫車應用程式的相關資訊**,此資訊對於此系統極為重要,未來將蒐集更多關於**應用程式叫車訂單**相關的資訊。 2. 此外,未來可朝著**不須事先知道目的地**也可達成遞送任務的目標演算法前進。 3. 最後,由實驗可得知**AdaPlan和Optimal sol.的遞送時間仍有一段差距**,應可更優化算法來達成更好的效率。 * **Issues Regarding Data Sources** 系統所蒐集的數據包含**POI**、**道路網絡**、**車輛軌跡**都需要不斷**更新**,才能應對當下的遞送規劃。 * **Others** **包裹大小**,**司機的獎勵機制**、**包裹容器**等都是其他需要考量的因素。