作为程序员,今天你决定翘掉晚上的加班,约女朋友看电影。
电影是 20:00 开始。
虽然翘掉了加班,但你从公司出来,就已经 19:00 了。
公司在望京 SOHO,约会地点在朝阳大悦城。
(这点时间,祝你好运吧)
也许你运气真的很好,19:50 就赶到商场了。
心里想:“还有10分钟才开始,电影院在 F8,乘个直梯,两分钟就到,今天真美好。”
你按了上行按钮,并行的 3 部电梯,一部正从 F2 升 F3,一部刚刚打算从 F8 降下来,另一部刚降到 F3
竟然
又升上去了!
(理论上讲,一部电梯,如果从 F8 以自由落体的方式下来,不超过 3s;如果正常运行下来,大概 105s;)
可是......
你到达电影院时,已经 20:10 了
你的女朋友也等得不耐烦了......
不管你是在北上广还是在港澳台,甚至三四线城市,凡是有规模的地区,高楼比比皆是。
不管是写字楼,还是大型商城,让你最头痛的就是乘电梯,尤其是在赶时间的时候。
每天早上,那些差5分钟就迟到的程序员,在等电梯时,一般会做两件事:
第一,在心里骂电梯慢;
第二,在心里暗算着电梯调度如何优化;
前者可能是写字楼里上班族惯有的精神类疾病,但后者肯定是程序员的职业病。
本文对“骂电梯”不给予任何指导性建议。
但说起电梯调度算法,我觉得还是可以给大家科普一下,好为大家在等电梯之余,打发时间而做出一点贡献。
(
电梯调度算法可以参考各种硬盘换道算法,下面内容整理自网络
)
1.1 先来先服务算法(FCFS)
先来先服务(FCFS-First Come First Serve)算法,是一种随即服务算法,它不仅仅没有对寻找楼层进行优化,也没有实时性的特征,它是一种最简单的电梯调度算法。
它根据乘客请求乘坐电梯的先后次序进行调度。此算法的优点是公平、简单,且每个乘客的请求都能依次地得到处理,不会出现某一乘客的请求长期得不到满足的情况。
这种方法在载荷较轻松的环境下,性能尚可接受,但是在载荷较大的情况下,这种算法的性能就会严重下降,甚至恶化。
人们之所以研究这种在载荷较大的情况下几乎不可用的算法,有两个原因:
1.2 最短寻找楼层时间优先算法(SSTF)
最短寻找楼层时间优先(SSTF-Shortest Seek Time First)算法,它注重电梯寻找楼层的优化。
最短寻找楼层时间优先算法选择下一个服务对象的原则是最短寻找楼层的时间。
这样请求队列中距当前能够最先到达的楼层的请求信号就是下一个服务对象。
在重载荷的情况下,最短寻找楼层时间优先算法的平均响应时间较短,但响应时间的方差较大,原因是队列中的某些请求可能长时间得不到响应,出现所谓的“饿死”现象。
1.3 扫描算法(SCAN)
扫描算法(SCAN) 是一种按照楼层顺序依次服务请求,它让电梯在最底层和最顶层之间连续往返运行,在运行过程中响应处在于电梯运行方向相同的各楼层上的请求。
它进行寻找楼层的优化,效率比较高,但它是一个非实时算法。扫描算法较好地解决了电梯移动的问题,在这个算法中,每个电梯响应乘客请求使乘客获得服务的次序是由其发出请求的乘客的位置与当前电梯位置之间的距离来决定的。
所有的与电梯运行方向相同的乘客的请求在一次电向上运行或向下运行的过程中完成,免去了电梯频繁的来回移动。
扫描算法的平均响应时间比最短寻找楼层时间优先算法长,但是响应时间方差比最短寻找楼层时间优先算法小,从统计学角度来讲,扫描算法要比最短寻找楼层时间优先算法稳定。
1.4 LOOK 算法
LOOK 算法是扫描算法(SCAN)的一种改进。对LOOK算法而言,电梯同样在最底层和最顶层之间运行。
但当 LOOK 算法发现电梯所移动的方向上不再有请求时立即改变运行方向,而扫描算法则需要移动到最底层或者最顶层时才改变运行方向。
1.5 SATF 算法
SATF(Shortest Access Time First)算法与 SSTF 算法的思想类似,唯一的区别就是 SATF 算法将 SSTF 算法中的寻找楼层时间改成了访问时间。
这是因为电梯技术发展到今天,寻找楼层的时间已经有了很大地改进,但是电梯的运行当中等待乘客上梯时间却不是人为可以控制。
SATF 算法考虑到了电梯运行过程中乘客上梯时间的影响。
2.1 最早截止期优先调度算法
最早截止期优先(EDF-Earliest Deadline First)调度算法是最简单的实时电梯调度算法,它的缺点就是造成电梯任意地寻找楼层,导致极低的电梯吞吐率。
它与 FCFS 调度算法类似,EDF 算法是电梯实时调度算法中最简单的调度算法。
它响应请求队列中时限最早的请求,是其它实时电梯调度算法性能衡量的基准和特例。
2.2 SCAN-EDF 算法
SCAN-EDF 算法是 SCAN 算法和 EDF 算法相结合的产物。SCAN-EDF 算法先按照 EDF 算法选择请求列队中哪一个是下一个服务对象,而对于具有相同时限的请求,则按照 SCAN 算法服务每一个请求。它的效率取决于有相同 deadline 的数目,因而效率是有限的。
2.3 PI 算法
PI(Priority Inversion)算法将请求队列中的请求分成两个优先级,它首先保证高优先级队列中的请求得到及时响应,再搞优先级队列为空的情况下在相应地优先级队列中的请求。
2.4 FD-SCAN 算法
FD-SCAN(Feasible Deadline SCAN)算法首先从请求队列中找出时限最早、从当前位置开始移动又可以买足其时限要求的请求,作为下一次 SCAN 的方向。
并在电梯所在楼层向该请求信号运行的过程中响应处在与电梯运行方向相同且电梯可以经过的请求信号。
这种算法忽略了用 SCAN 算法相应其它请求的开销,因此并不能确保服务对象时限最终得到满足。
以上两结介绍了几种简单的电梯调度算法。
但是并不是说目前电梯调度只发展到这个层次。目前电梯的控制技术已经进入了电梯群控的时代。
随着微机在电梯系统中的应用和人工智能技术的发展,智能群控技术得以迅速发展起来。
由此,电梯的群控方面陆续发展出了一批新方法,包括:基于专家系统的电梯群控方法、基于模糊逻辑的电梯群控方法、基于遗产算法的电梯群控方法、基于胜景网络的电梯群控方法和基于模糊神经网络的电梯群控方法。
4.1 电梯的初始状态
本人设置的电梯的初始状态,是对住宅楼的电梯的设置。