结对项目电梯调度--设计模拟
大家假设在这样的一个情境中:大楼有21层,从地面0 , 1 , ... 20 。地板0是地下停车场水平, 1楼是大堂的水平。大多数人都通过这些2层进出大楼。同时电梯的限制。
四部电梯,每部电梯有乘客人数限制和最高载重的限制。
电梯名称 |
停靠层数 |
乘客限制 |
重量限制 |
1 |
所有楼层 |
10 |
800 kg |
2 |
所有楼层 |
10 |
800 kg |
3 |
所有楼层 |
20 |
1600 kg |
4 |
所有楼层 |
20 |
2000 kg |
在这里假定正常情况下,电梯均停在0层,当有乘客请求电梯时,电梯运作,经过几次运作后,可能四部电梯在不同或相同的楼层,同时运行方向或相同或不同,此时,当有乘客请求电梯时,再选择一部最优电梯来满足乘客请求。当乘客进入电梯按下要到达楼层的按钮后,按照原来的运行方向进行运行,同时是每2 s楼层数改变1(假定是2秒,这里实际时还可以更改参数不论加减)。直到El_run_count[]所有值为0,电梯再下落到0层,并将状态改为停止状态。
那么正常的流程:
1.乘客按动外部按钮请求电梯。
2.经过调度算法,调派最合适的一部电梯到达客户的楼层。
3.用户进入电梯,选择要到达的目的楼层。
4.电梯载乘客到达指定楼层。
因此综合几项来看,首先要有一个电梯的类Elevator
{
Int El_no,电梯序号(1-4)
Int El_st_weight,电梯标准载重;
Boolean El_statues,电梯是否可运行(比较是否超重)
Int El_go_direction,电梯运行方向(1:上,-1:下,0:停止);
Int El_stay_floor,此时电梯所在楼层;
Int El_stay_time,电梯在各层停留时间;
Int El_run_time_one,电梯运行一层所需的时间
Int El_run_time,电梯总的在运动中的运行时间
Int El_run_count[21];记录乘客在电梯内部按下按钮的楼层,也是乘客要到达的楼层。
方法:
El_req_priority(Pe_stay_floor);电梯调派的选择,电梯“优先级”。
电梯运行的方法:El_run( );
}
同时在我们的设计想法中,还有一个关键变量:Pe_go_direction
即:乘客按动外部按钮请求电梯,外部的按钮中要记录乘客去往的方向。
两个比较量,电梯运行时间,电梯停留时间。
四种情况,之前要记录乘客在电梯外部按下按钮要请求的方向(是上楼还是下楼)。
1.电梯运行方向向上,乘客的请求楼层 > 电梯当前楼层
层数之差:Pe_stay_floor - El_stay_floor;
电梯可能停靠的层数是在count[a] ,El_stay_floor <= a <=Pe_stay_floor
2.电梯运行方向向上,乘客的请求楼层 < 电梯当前楼层
层数之差:40 - El_stay_floor - Pe_stay_floor
电梯可能停靠的楼层是count[a],a>= Pe_stay_floor
3.电梯运行方向向下,乘客的请求楼层 < 电梯当前楼层
层数之差:El_stay_floor - Pe_stay_floor
电梯可能停靠的楼层是count[a],Pe_stay_floor <=a<= El_stay_floor
4.电梯运行方向向下,乘客的请求楼层 > 电梯当前楼层
层数之差:El_stay_floor + Pe_stay_floor
电梯可能停靠的楼层是count[a], a<= Pe_stay_floor
未完待续……
时间记录(表格)
时间 |
3.03 |
16:10--17:34 |
3.05 |
16:20--17:45 |
3.07 |
16:15--18:00 |
3.08 |
9:45-11:35 |
3.09 |
10:23-11:30 |
汪洋 |
查找资料 |
实现调度的部分 |
查找资料 |
整合电梯模拟 |
撰写博客 |
|||||
辛垧 |
功能概括 |
查阅资料 |
对调度的修改 |
提出修改意见 |
撰写博客,并修改 |
结队成员:汪洋,辛垧