软工老师出了一道题目,关于电梯调度问题,假设一幢大厦有21层, 4部电梯,很多乘客使用这些电梯(旅客重量:平均70公斤最大120公斤,最小45公斤)。其他常量数据:电梯速度,开/关门时间,乘客要进出电梯的时间。具体设计一个电梯调度算法,实现合理调度。
在搞清该用什么算法之前,先搞清电梯是怎么运行的。
那么电梯是如何运行的?(以下是我们的想法和设计)
假设分两种信号,外部信号与内部信号,外部信号就是电梯外乘客的请求信号,内部信号就是电梯内乘客所请求的目的地信号。
首先,假设电梯内部没人,就没有内部信号,当有乘客发出外部信号时,电梯就会以首先到来的信号作为方向信号(上或者下),然后以自己楼层作为出发点,向这个方向进行动态遍历,电梯就开始运行,同时将遍历到的最远端作为终极停靠信号,并且在运行时不断检测,只要有本楼层到终极楼层之间的信号(无论内外),电梯就会停靠,若此时有不同方向的外部请求信号,电梯也会先到终极信号后再折回来。
举个例子,假设电梯在第9层,有人在第12层发出请求,电梯就把上方作为遍历的方向,在从9运行到12的过程中,检测到了第14层,第18层,第5层的信号,电梯就会将18作为终极信号(假如没检测任何信号,那么12就是终极信号),假设进入到电梯的乘客此时发出了内部信号,有第15层,第7层,而15显然属于12到18之间的,电梯向上运行,依次在14,15,18停靠,然后方向改变,向下遍历信号,已经有第5层的外部信号和第7层的内部信号,5比7小,电梯就会将5作为终极停靠信号,然后在向下运行的同时继续遍历,只要出现小于5的信号,就将此信号作为终极信号,并且在从本楼层到终极楼层之间,只要检测到信号,无论内外,都会停靠。到了终极楼层5之后,电梯等待方向信号,然后继续以上式方式运行。当然,当电梯停靠在某一楼层后,若无输入信号,电梯则不会运行,一直在此楼层保持待机状态,等待信号输入。
以上就是我们的想法,具体的数据结构及实现还有待商榷。
开发日志
3月5号 21:00—22:00 网上查阅资料
3月7号 15:00—17:00 结合资料分析题目
3月8号 9:00—11:30 具体分析电梯运行模式
3月8号 15:00—17:00 继续分析电梯运行模式
3月9号 10:00—11:30 撰写博客并完善细节
开发人员:闫立新 苏海岩
原文:http://www.cnblogs.com/suhaiyan/p/3590637.html