一、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();
寻找最佳的泊车位
四、文章小结
上面简单介绍了调度算法做了哪些事情,但是具体怎么做,还未进行总结,如果有兴趣相互沟通学习的,敬请留言。