结对项目开发-电梯调度
李帅--张硕
背景
试想一下,我们正在构建一个高大的办公楼,它有大约电梯配置如下:大厦有21层, 4部电梯,很多乘客使用这些电梯的日常(旅客重量:平均70公斤最大120公斤,最小45公斤)。其他常量数据:电梯速度,开/关门时间,乘客的时间要在/走出电梯。
电梯名称 |
停靠层数 |
乘客限制 |
重量限制 |
1 |
所有楼层 |
10 |
800 kg |
2 |
所有楼层 |
10 |
800 kg |
3 |
所有楼层 |
20 |
1600 kg |
4 |
所有楼层 |
20 |
2000 kg |
有关电梯调度的设计思路:
电梯分为内外两部,这就需要进行两个调度,分别是外部调度和内部调度。
外部调度进行的操作寻找合适的电梯,例如在某一楼层有人上楼或者下楼,在按下按钮后,外部算法会找到最快到达的电梯,将信息传递给内部电梯控制。在控制之下电梯会到达楼层。当电梯外部按下楼层上或下键时,相当于同时按下四部电梯,这个时候从四部电梯中调度一部进行响应,具体算法是,选择当前没有在运行,或者运行方向与按钮方向相同的并且要经过此楼层的电梯,如有一部,便调这个电梯,若有多部,那么就选择在满足上面条件下与所处楼层最接近的一部电梯,若没有,那么就将这个在楼层存放在等待队列中,等待资源。例如:四部电梯同时向下运行,而在15楼有人请求上楼这时就需要将这个请求放入队列,等待有电梯停下时,再进行调度,让电梯到达15层。这个例子中还有需要注意的是,在有人在15层请求上楼后,又有人在第8层请求上楼,这就需要再次对四部电梯进行选择,假如三部电梯依然向下,一部开始向15层上升,这就需要对上升的电梯进行判断,一种情况是还未到达第八层,这时就可以让电梯在8层先停,再上升至15层;另一种情况是已经超过8层,这时就应该将8加入队列,再次对电梯进行等候,然后再判断。对于电梯的上升下降过程,计划可以采用睡眠来代替,例如可以以2秒作为上升一层的时间。
内部调度是根据电梯内部人所需要到达的楼层设计,当电梯内部按下一个楼层按钮的时候,当电梯停止或者同向可以到达的时候,系统把这个楼层设置为要停靠楼层,并将它放入停靠队列中,当电梯此时不符合条件时,将它放入“将要执行队列中”,等到电梯到达此次终点目标时再执行这个任务。如电梯上到6楼,而目标是8楼,这个时候按下2楼,那么这个电梯就是先上到8楼然后再下去2楼。
最后一点就是人数及体重的限制了,对每个电梯设定一个特定的变量进行统计,然后比较,在将数据传入内部调度之中,进行电梯的操控。例如,如果电梯内的人数或者重量已将超过限制人数以及重量限制,那么电梯将不会在有人按下按钮的那一楼层停留。如果某一层内人数较多超过人数限制,电梯将自动报警,发出已超载的提示。
这是最初的设计思路,考虑的问题可能并不全面,在代码的实现过程中可能会进行诸多修改。
时间日志:
时间 |
2014.3.7 |
2014.3.8 |
2014.3.9 |
|
李帅 |
16:20-17:30 18:45-19:20 网上查阅资料,总结思考 比较了几种算法 |
08:37-10:20我们两人在学院楼107自习室进行了商讨,对电梯调度算法有了初步的设计,并对各种情况进行了设想以及讨论。
|
10:30—11:10 李帅同志整理了一下文档,我与坐在后排的汪洋同志交流了心得,11:15-11:54 我们三个人坐在一起对我们各两组各自的想法以及算法进行了交流。
|
15:57-16:15 我们两人对设计镜像最后敲定,并撰写博客。 |
张硕 |
19:30-20:37 上网查阅资料,查看了一些前人写的算法。 |