算法高级(39)-坐电梯时情不自禁想起的电梯调度算法实现原理

一、引言

现代社会中,不管你是在北上广、北海道、新加坡,或者是三四五六七八线的小城市,凡是有点规模的地方,高楼大厦都是比比皆是的。而在上下楼的时候,不可避免的会跟电梯打交道。而一般情况你也很少能心平气和地等电梯,尤其是在赶时间的时候。

每天早上,那些还差5分钟就要迟到的程序员朋友们,在等电梯时,一般都会做两件事:

  1. 在心里不停骂电梯慢。
  2. 在心里暗算着电梯调度该如何优化。

前者可能是写字楼里上班族惯有的精神类疾病,但后者肯定是程序员的职业病。

说起电梯调度算法,我觉得还是可以给大家科普一下,好为大家在等电梯之余,打发时间而做出一点贡献。

二、概念

电梯调度算法,是一种计算电梯使用的方法。在工程上,电梯调度算法也指磁盘的扫描调度算法,是计算机磁盘驱动调度的一种方法。本文所指的电梯调度算法均参考各种硬盘换道算法(操作系统原理见)。

电梯按钮功能分析

电梯(升降盒)上下来回地运动,电梯内部有一些按钮,每一个按钮代表一层楼,当按下按钮时,按钮的灯亮。电梯沿某一方向运动,在将要到达某一层楼时,实时监控器判断电梯内是否有乘客要在此层楼下电梯,若有,则发送信号给电梯升降架,让其减速,同时让电梯在此层楼的电梯入口处平稳地停下,电梯停下后,实时监控器让电梯内相应的按钮灯灭,让乘客出电梯,然后关闭电梯门,而且继续朝原方向运动,直至到达当前运动方向上,有乘客要求到达的最后一层楼为止(即如:若该建筑物有50层,电梯当前正向上运动,若有乘客要求到达的最高楼层为30层,则电梯运动到30层之后,若30层以上没有乘客发出请求,则电梯可根据电梯内是否“有人”而向下运动或停止)。

除底层和顶层只有一个按钮外,每个楼层有两个按钮,分别指示上楼和下楼请求,当按下后,按钮灯亮,并向实时监控器发送请求,实时监控程序负责判断乘客的上下楼请求是否与电梯的当前运动方向一致,若不一致,则暂不受理此请求,此时按钮灯继续亮;若一致,则实时监控器将相应的上下请求按钮灯熄灭,并让电梯平稳地停在此层楼的电梯入口处,让相应的乘客入电梯,而后继续朝原方向运动。若同时有两层或两层以上的楼发出请求,产生了冲突,则实时监控器调用冲突处理器进行抉择,受理其中的一个请求,并负责将各请求上下楼的按钮灯熄灭。

三、基本的电梯调度算法

1.传统电梯调度算法

1.1 先来先服务算法(FCFS)

先来先服务(FCFS-First Come First Serve)算法,是一种随即服务算法,它不仅仅没有对寻找楼层进行优化,也没有实时性的特征,它是一种最简单的电梯调度算法。

它根据乘客请求乘坐电梯的先后次序进行调度。此算法的优点是公平、简单,且每个乘客的请求都能依次地得到处理,不会出现某一乘客的请求长期得不到满足的情况。

这种方法在载荷较轻松的环境下,性能尚可接受,但是在载荷较大的情况下,这种算法的性能就会严重下降,甚至恶化。

人们之所以研究这种在载荷较大的情况下几乎不可用的算法,有两个原因:

  • 任何调度算法在请求队列长度为1时,请求速率极低或相邻请求的间隔为无穷大时使用先来先服务算法既对调度效率不会产生影响,而且实现这种算法极其简单。

  • 先来先服务算法可以作为衡量其他算法的标准。

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.实时电梯调度算法

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 算法相应其它请求的开销,因此并不能确保服务对象时限最终得到满足。

四、电梯调度算法进阶及优化

但是并不是说目前电梯调度只发展到这个层次。目前电梯的控制技术已经进入了电梯群控的时代。随着微机在电梯系统中的应用和人工智能技术的发展,智能群控技术得以迅速发展起来。

由此,电梯的群控方面陆续发展出了一批新方法,包括:基于专家系统的电梯群控方法、基于模糊逻辑的电梯群控方法、基于遗产算法的电梯群控方法、基于胜景网络的电梯群控方法和基于模糊神经网络的电梯群控方法。

甚至于我在知网还找到一篇研究电梯调度算法的硕士论文:新一代电梯的调度算法研究。看看人家写一篇电梯算法就研究生毕业了哦。

一些优化:

这两年,我发现电梯还是越来越智能了,也有了一些更骚的操作,分享如下:

  1. 电梯分奇偶数楼层停。
  2. 不同的电梯分高低层停。
  3. 业主、酒店刷卡到自己楼层。不刷卡还按不了按钮呢!

经过我的体验,以上几种优化,电梯的运行效率还是提升了很多的呢。还能防火防盗防隔壁老王,一举多得。

当然,真正的人工智能AI电梯控制算法,需要人脸识别:识别领导等电梯。那就非我等凡人能触及的了。再说大部分时候,领导都是走专梯的,平时你也碰不到。

五、一道面试题

有一个写字楼有 28 层,每层有 4 个区,每个区有 8 个办公室,有 7 个电梯,每天早高峰有 1 万人上班。怎么做能以最快的速度将早高峰的人送到他们的楼层?(20 分) 1.请做出一些假设 2.请描述你的算法 3.请仿真并实现你的算法 4.请计算出需要的时间。

还来一道生活小常识:住在一楼的住户要不要交电梯维护费呢?此题与编程无关,纯粹考你生活常识。

据说电梯程序完全搞懂 可以做到码农顶尖了,够硬核!


我的微信公众号:架构真经(关注领取免费资源)

参考文章

  1. https://blog.csdn.net/gitchat/article/details/80202416
  2. https://blog.csdn.net/li4951/article/details/7486092
  3. https://baike.baidu.com/item/%E7%94%B5%E6%A2%AF%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95/1046772
  4. http://xuewen.cnki.net/CMFD-2010187172.nh.html
  5. http://d.old.wanfangdata.com.cn/Periodical/dzgcs199908008
  6. https://exp.newsmth.net/topic/70ca4df7e734b5f422bdd768978e3ca0
  7. https://www.v2ex.com/t/383855
  • 11
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十步杀一人_千里不留行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值