一、Guice注入配置
這裏的Guice注入主要指DefaultDispatcherModule類的配置,具體的Guice用法不去詳細講解,主要介紹這個類注入了什麼東西,明白了注入內容,相對更容易理解OpenTCS調度算法是基於哪些因素考慮的調度。
過濾器相關的注入
- CompositeParkVehicleSelectionFilter 停車地點過濾器
- CompositeReparkVehicleSelectionFilter 重新規劃停車過濾器
- CompositeRechargeVehicleSelectionFilter 車輛充電過濾器
- CompositeTransportOrderSelectionFilter 訂單過濾器
- CompositeVehicleSelectionFilter 車輛過濾器
- CompositeAssignmentCandidateSelectionFilter 候選過濾器
- DefaultDispatcherConfiguration 讀取配置策略 在kernel配置文件配置
- OrderReservationPool 訂單預定池
- ParkingPositionSupplier 停車地點
- RechargePositionSupplier 充電地點
車輛選擇算法的注入
- VehicleComparatorByEnergyLevel 按電量比較車輛
- VehicleComparatorByName 按名稱比較車輛
- VehicleComparatorIdleFirst 按車輛空閒度比較
訂單選擇算法的注入
- TransportOrderComparatorByAge 按運輸訂單時間比較
- TransportOrderComparatorByDeadline 按運輸訂單按截止日期比較
- TransportOrderComparatorByName 按運輸訂單名稱比較
路由選擇算法的注入
- CandidateComparatorByCompleteRoutingCosts 比較完成時間的路由成本
- CandidateComparatorByDeadline 按截至日期比較候選
- CandidateComparatorByEnergyLevel 按電池電量比較候選
- CandidateComparatorByInitialRoutingCosts 比較初始路由成本
- CandidateComparatorByOrderAge 按訂單時間
- CandidateComparatorByOrderName 按訂單名稱
- CandidateComparatorByVehicleName 按車輛名稱
- CandidateComparatorIdleFirst 按空閒度
二、算法入口
DefaultDispatcher的dispatch()方法是調度算法的入口,到目前爲止,我瞭解的調用入口有4個,或許還有別處會調用,但是有些不確定,詳情可以全局搜索dispatch()方法。
- 訂單生成
- 車輛空閒,狀態爲IDEL
- 電量下降
- 定時任務
三、算法簡介
調度算法的入口是dispatch()方法,但具體執行是在這個FullDispatchTask線程的run()方法裏,這個run()方法大概做了七件事。
- checkNewOrdersPhase.run();
檢查新訂單階段 —> 檢查仍處於原始狀態RAW的運輸訂單,並嘗試爲分配做準備。 - finishWithdrawalsPhase.run();
檢查過程中涉及的車輛應該做什麼。 - assignNextDriveOrdersPhase.run();
分配下一個驅動器訂單階段 - assignSequenceSuccessorsPhase.run();
在訂單序列繼續指派階段 - assignOrders();
檢查尚未處理的車輛應該做什麼 - rechargeVehicles();
找出需要充電的車 創建充電的訂單 - parkVehicles();
尋找最佳的泊車位
四、文章小結
上面簡單介紹了調度算法做了哪些事情,但是具體怎麼做,還未進行總結,如果有興趣相互溝通學習的,敬請留言。