OpenTCS 之 DefaultDispatcher 默認調度算法

一、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()方法。
  1. 訂單生成
  2. 車輛空閒,狀態爲IDEL
  3. 電量下降
  4. 定時任務

三、算法簡介

  調度算法的入口是dispatch()方法,但具體執行是在這個FullDispatchTask線程的run()方法裏,這個run()方法大概做了七件事。
  1. checkNewOrdersPhase.run();
    檢查新訂單階段 —> 檢查仍處於原始狀態RAW的運輸訂單,並嘗試爲分配做準備。
  2. finishWithdrawalsPhase.run();
    檢查過程中涉及的車輛應該做什麼。
  3. assignNextDriveOrdersPhase.run();
    分配下一個驅動器訂單階段
  4. assignSequenceSuccessorsPhase.run();
    在訂單序列繼續指派階段
  5. assignOrders();
    檢查尚未處理的車輛應該做什麼
  6. rechargeVehicles();
    找出需要充電的車 創建充電的訂單
  7. parkVehicles();
    尋找最佳的泊車位

四、文章小結

  上面簡單介紹了調度算法做了哪些事情,但是具體怎麼做,還未進行總結,如果有興趣相互溝通學習的,敬請留言。

 
 

  以上內容實屬個人總結,有不正之處,歡迎指導。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章