项目设计
1. 多电梯调度算法
要求:
- 你设计的模块和接口是什么,并给出参数。
- 定义的一系列核心问题以及输入输出,
- 设计的算法是什么,论述算法的优势,并对给出的算法进行优化。
解决:
-
需求:总的就是实现对一个高层的多电梯进行调度和控制。送客
思考一下:电梯有召唤按钮、目的地按钮,楼层传感器,报警按钮、电梯马达控制(上、下、停)、目标机**(实现电梯的调度和控制)也就是中央cpu。以及各种指示灯。
-
发现对象
- 到达事件:识别电梯是否到达了某一楼层。这个对象类封装了到达事件所需的相应服务(方法),以及向其他对象类报告这些事件的服务。
- 到达面板:在电梯到达某一楼时更新到达面板。封装了响应从到达事件发送来的消息所需的各项服务。
- 目的地事件:识别目的地请求事件。负责将该事件向其他的对象报告。
- 目的地面板:在收到目的地请求后,更新目的地面板,并报告所要去的目的地。
- 电梯:电梯对象执行电梯的控制和报告功能。
- 电梯马达:他的用途是控制电梯马达。它所封装的服务用于响应由电梯发送来的消息。
- 楼层:它的用途是管理电梯的分派与到达,并管理有关召唤请求的信息。
- 超载传感器:识别电梯的超载状态。
- 召唤事件:识别召唤请求事件的发生
- 召唤面板:当某一楼层产生一个召唤请求后,由它更新召唤面板,并报告这个召唤请求。
-
属性描述
- 到达事件:到达楼层、到达电梯id、唯一标识类的某一个实例的标识。
- 到达面板:唯一标识类的某一个实例的标识、电梯id(唯一标识 电梯 类的某一实例的标识,在 到达面板 的某一实例发送出来的消息中用到)。
- 电梯:当前运行方向、最近一次到达的楼层、当前电梯状态、电梯id、即将运行方向(与楼层的进行通信时用到。它表明电梯被分配后所应运行的方向)。
- 目的地事件:目的地楼层、目的地id(某一实例的标识)、电梯id(生成目的地事件的电梯)
- 目的地面板:目的地楼层状态、电梯id
- 召唤面板:电梯id、召唤面板id、向上召唤请求、向下召唤请求
- 楼层:电梯id、楼层id
- 电梯马达:电梯马达实例id
- 超载传感器:传感器id、最近一次传感器状态
- 召唤事件:召唤事件发生楼层、召唤方向、召唤id
-
服务定义
-
电梯马达:控制电梯马达服务(根据接收到的控制消息,将请求命令发送到硬件接口,促使电梯马达根据给定的命令移动)
接口及参数:
-
输出:电梯(控制信息)、硬件口(执行信息)
-
输入:楼层cpu(请求命令)
-
-
电梯:
- 控制电梯服务(控制电梯的运动,设置属性当前运行方向,运行状态,返回给电梯马达一个消息)
- 电梯是否就绪:检测超重(超载传感器发送的消息,并将状态发送给 楼层)
- 电梯现在位置:将现在电梯的位置返回给消息发送者(到达事件、楼层等)(到达事件需要显示电梯位置给人)
- 电梯运动方向:将电梯当前运动方向发送给消息发送者(楼层)
- 接口及参数:
- 输出:电梯马达、楼层(超重信息、电梯位置、运动方向)、到达事件(电梯位置)
- 输入:电梯马达(控制信息)、超载传感器(超载信息)、到达事件(电梯位置更新)
-
楼层:
- 接客运动:选择(算法)哪一台电梯去响应召唤事件(根据目的地面板中的楼层信息、召唤事件中的发生楼层、召唤方向、电梯的运行位置、运行方向去选择)
- 楼层到达服务:当电梯到达某个楼层之后更新相应的信息(电梯位置和方向、目的地面板信息更新、召唤面板更新)
- 接口及参数:
- 输出:电梯(响应召唤之后的位置和方向更新)、电梯马达(控制信息该不该停)、目的地面板(到达之后更新面板)、召唤面板更新(响应之后更新面板)
- 输入:电梯(电梯的当前位置、方向、超载信息)、召唤事件(召唤事件发生的楼层及方向)、目的地面板(还要去的楼层信息)
-
召唤面板、目的地面板、到达楼层。。。
-