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()方法。
- 订单生成
- 车辆空闲,状态为IDEL
- 电量下降
- 定时任务
三、算法简介
调度算法的入口是dispatch()方法,但具体执行是在这个FullDispatchTask线程的run()方法里,这个run()方法大概做了七件事。
- checkNewOrdersPhase.run();
检查新订单阶段 —> 检查仍处于原始状态RAW的运输订单,并尝试为分配做准备。 - finishWithdrawalsPhase.run();
检查过程中涉及的车辆应该做什么。 - assignNextDriveOrdersPhase.run();
分配下一个驱动器订单阶段 - assignSequenceSuccessorsPhase.run();
在订单序列继续指派阶段 - assignOrders();
检查尚未处理的车辆应该做什么 - rechargeVehicles();
找出需要充电的车 创建充电的订单 - parkVehicles();
寻找最佳的泊车位
四、文章小结
上面简单介绍了调度算法做了哪些事情,但是具体怎么做,还未进行总结,如果有兴趣相互沟通学习的,敬请留言。
以上内容实属个人总结,有不正之处,欢迎指导。
OpenTCS 之 DefaultDispatcher 默认调度算法相关推荐
- haproxy各调度算法的实现方式及其应用场景
haproxy各调度算法的实现方式及其应用场景 1. haproxy 静态调度算法 1.1 static-rr 1.2 first 2. haproxy 动态调度算法 2.1 roundrobin(默 ...
- linux服务器lvs,Linux的企业-LVS(Linux虚拟服务器)及FULLNAT设置
一.Linux Virtual Server (linux虚拟服务) lvs工作于IOS七层模型的传输层,通过对TCP.UDP.SCTP.IPsec ESP.AH这些工作在四层的协议的支持,根据目标地 ...
- 构建负载均衡服务器之二 LVS详解及应用
在上一篇中介绍了负载均衡及集群的原理,本篇主要介绍下下实现负载均衡的软件之LVS的原理及应用. 一.LVS的介绍 1. LVS的定义 一般来说,LVS采用三层结构:负载调度器.服务器池.共享存储.工 ...
- 简述RHEL7新特性(一)
RHEL7目前支持架构: 1,64-bit AMD 2,64-bit Intel 3,IBM POWER 4,IBM System z 5,不再支持x86 32bit 安装界面: 1,全新的安装界面 ...
- Nginx的继续深入(日志轮询切割,重写,负载均衡等)
Nginx的访问日志轮询切割 通常什么情况Nginx会把所有的访问日志生成到一个制定的访问日志文件access.log里面,但时间一长,日志个头很大不利于日志的分析和处理. 有必要对Nginx日志进行 ...
- Nginx之反向代理与负载均衡实现动静分离实战
Nginx之反向代理与负载均衡实现动静分离实战 什么是反向代理与负载均衡 Nginx仅仅作为Nginx proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果. 负载均衡指的是 ...
- 从认证到调度,K8s 集群上运行的小程序到底经历了什么?
作者 | 声东 阿里云售后技术专家 导读:不知道大家有没有意识到一个现实:大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了. 前言 现在我们上微博.或者网购,操作的其实不是 ...
- 主nginx linux,Linux-实现双主模型的nginx的高可用
1 [root@234c17 ~]# for i in {1..4};do curl www.a.com;curl www.b.com;sleep 1;done 2 234.57 3 234.77 4 ...
- Kubernetes从懵圈到熟练:认证与调度
不知道大家有没有意识到一个现实,就是大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了.现在我们上微博.或者网购,操作的其实不是眼前这台设备,而是一个又一个集群. 通常,这样的 ...
- LVS nat 负载均衡实验
clint 本地物理机 192.168.0.196 (director)VIP 192.168.0.146 (director)DIP ...
最新文章
- id设置为10000开始
- MySQL不能查看表_mysql root用户登录后无法查看数据库全部表
- 17-Translation (XLAT) Tables Library
- SpringBoot中使用POI导出Excel时怎样循环数据库数据赋值
- 用Python制作酷炫的可视化报表。
- android跨进程事件注入(程序模拟用户输入)
- go利用反射实现任意类型切片删除元素
- python提取pdf表格信息
- 35岁遭遇互联网公司无情裁员,面试屡屡碰壁,原因竟是……
- 机器学习- 吴恩达Andrew Ng Coursera学习总结合集,编程作业技巧合集
- webgate 重构 工作进度计划
- Excel写入换行-JAVA
- openldap范例数据库mysql_用mysql作openldap的后台数据库
- storm java 例子_Storm 运行例子
- Cytoscape.js学习记录
- 群英传android,三国群英传官方网站-腾讯游戏-三国SLG手游新王者
- [渝粤教育] 西南科技大学 民事诉讼法学 在线考试复习资料
- win 下 使用工具 将苹果dgm镜像转为cdr镜像,供vm虚拟机安装使用
- 电脑dll文件缺失如何修复;DirectX修复工具,轻松搞定
- 舟山惠普服务器维修电话,【舟山HP(惠普)服务器配件】舟山HP(惠普)服务器配件报价及图片大全-列表版-ZOL中关村在线...