转载自 我猜,每个程序员对着电梯都想过调度算法吧

传统电梯调度算法

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

算法基础阅读:8 种排序算法:从原理到改进,再到代码兑现透彻解析

电梯调度高水平研究

以上两结介绍了几种简单的电梯调度算法。

但是并不是说目前电梯调度只发展到这个层次。目前电梯的控制技术已经进入了电梯群控的时代。

随着微机在电梯系统中的应用和人工智能技术的发展,智能群控技术得以迅速发展起来。

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

电梯问题的需求分析

4.1 电梯的初始状态

本人设置的电梯的初始状态,是对住宅楼的电梯的设置。

(1)建筑共有21层,其中含有地下一层(地下一层为停车场)。

(2)建筑内部设有两部电梯,编号分别为A梯、B梯。

(3)电梯内部有23个按钮,其中包括开门按钮、关门按钮和楼层按钮,编号为-1,1,2,3,4……20。

(4)电梯外部含有两个按钮,即向上运行按钮和向下运行按钮。建筑顶层与地下一层例外,建筑顶层只设置有向下运行按钮,地下一层只设置有向上运行按钮。

(5)电梯开关门完成时间设定为1秒。电梯到达每层后上下人的时间设定为8秒。电梯从静止开始运行到下一层的时间设置为2秒,而运行中通过一层的时间为1秒。

(6)在凌晨2:00——4:30之间,如若没有请求信号,A梯自动停在14层,B梯自动停在6层。

(7)当电梯下到-1层后,如果没有请求信号,电梯自动回到1层。

4.2 电梯基本功能

每一架电梯都有一个编号,以方便监控与维修。每一架电梯都有一实时监控器,负责监控电梯上下,向电梯升降盒发送启动、制动、加速、减速、开关电梯门的信号。若电梯发生故障,还应向相应的电梯负责人发送求救信号。

4.3 电梯按钮功能

电梯内部的楼层按钮:电梯内部对应每一个楼层的按钮成为楼层按钮,即本章第一结提到的编号为 -1,1,2,3,4……20的按钮。当乘客进入电梯后按下楼层按钮,此按钮显示灰色,代表不可以用。

这样就表示乘客将要去往此层,电梯将开往相应层。当电梯到达该层后,按钮恢复可以使用状态。

电梯内部开门按钮:当电梯达到乘客想要去往的某楼层后,乘客需要准备离开电梯,当电梯停稳后,乘客可以按下开门按钮,电梯门将打开,让用户离开。

如若电梯到了乘客曾经按下的楼层,但是无乘客按开门按钮,电梯将自动在停稳后1秒后自动开门。

电梯内部关门按钮:当所有想要乘坐电梯的乘客都进入电梯以后,准备让电梯开始运行的时候,乘客需要按下关门按钮,让电梯门关闭,使电梯进入运行状态。设置电梯的自动关门时间为8秒。

电梯外部向上按钮:此按钮表示上楼请求,当按下此按钮时,如果电梯到达按下此按钮的楼层,且电梯运行方向是向上的,那么电梯响将停下,并在电梯停稳之后自动开门,此请求被响应后,取消此请求信号。

电梯外部向下按钮:此按钮表示下楼请求,当按下此按钮时,如果电梯到达按下此按钮的楼层,且电梯运行方向是向下的,那么电梯响将停下,并在电梯停稳之后自动开门,此请求被响应后,取消此请求信号。

我猜,每个程序员对着电梯都想过调度算法吧相关推荐

  1. 我猜,每个程序员对着电梯都想过调度算法吧!

    作为程序员,今天你决定翘掉晚上的加班,约女朋友看电影. 电影是 20:00 开始. 虽然翘掉了加班,但你从公司出来,就已经 19:00 了. 公司在望京 SOHO,约会地点在朝阳大悦城. (这点时间, ...

  2. 35岁以上的程序员们,后来都干什么去了?

    摘要:对于多数程序员来说,40岁之前赚到别人60岁的钱是普遍目标,不过职业的进阶也印证着人生的进阶,所以何时开始思考未来的职业规划,都不算早. 知乎上有个话题叫做"程序员的悲哀是什么?&qu ...

  3. 为什么大学计算机老师不去大公司当程序员说出来你都很难敢相信

    大学中的老师,人们的印象一般都是学识渊博.谈吐优雅的儒士,其实他们也是为了名利奔波,忙忙碌碌的.既然是为了赚钱,大学里面的计算机老师为什么不去大公司去做一名程序员呢?这样的话,赚的钱一定会比大学那点工 ...

  4. 程序员们逢年过节初一十五都应该祭拜哪些神仙?

    程序员们逢年过节初一十五都应该祭拜哪些神仙? 发信人: RosejQue (苦人), 信区: Programming 标  题: 全球最杰出的14位程序员 发信站: 水木社区 (Thu Dec 18 ...

  5. 全世界的程序员们,为什么都不在意“穿衣”这档事?

    戳蓝字"CSDN云计算"关注我们哦! 十月份我去北京出差,来到后厂村走了一圈,想看看现实中的北京程序员是否真的像之前刷屏的<互联网公司时尚穿搭指南>中所述,存在&quo ...

  6. 哎呦,最近流行校内体哦--每个用 power shell 的程序员,上辈子都是折翼的天使

    话说最近流行这种校内体,请看: 每个用 power shell 的程序员,上辈子都是折翼的天使. 他们说,请珍惜用 awk 写脚本的程序员. 到处是 goto 的程序员,你伤不起! 长期在 Windo ...

  7. 招聘java是什么意思_java程序员,一般招聘都要求些啥

    原标题:java程序员,一般招聘都要求些啥 java程序员,一般招聘都要求些啥?某位企业领导说,他不能确认什么样的人一定是他想要的,因为优秀的程序员精通的点并不完全相同,项目也千差万别,但至少要有几个 ...

  8. OSChina 周五乱弹 ——程序员睡不着都在想啥

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2017)请戳(这里) [今日歌曲] @斑马_   :早早早,分享首歌曲给你们.南城. <南城>- ...

  9. 程序员讨厌领导又不想辞职,用一妙招让领导离职,网友:佩服

    作为员工,在职场中,除了想获得高薪福利以外,最大的希望也就是能遇到一位好的领导,他们不仅能给员工带去更多福利和回报,还能培养员工,帮助员工不断成长,学习更多职场技能. 但是如果你运气不好,遇到一位非常 ...

最新文章

  1. XXX语录,可以不信,但不能不看
  2. 超准中医体质测试 源码_心理测试:这几张心理测试图,一眼看透你的内心!不信你来试试!...
  3. BZOJ3945 : 无聊的邮递员
  4. 什么是原码、反码和补码?
  5. html语言中,定义文档中一个正在打开的链接的颜色的代码是,2017微软认证考试精选练习(附答案)...
  6. 关于论文检索的几点知识
  7. mysql集群搭建教程-mysql+windows篇
  8. perlin噪声函数
  9. 将 LDAP 目录用于 Samba 认证
  10. 【问题解决方案】The MathType Dll cannot be found 问题解决方案
  11. 华为交换机stp原理透析及实战
  12. 如何深入浅出地讲解麦克斯韦方程组
  13. MySQL 大表优化方案(长文)
  14. elasticsearch 中文API 索引(三)
  15. mysql 数据字典导出_MySQL导出数据字典
  16. AquaCrop_原理学习笔记06:土壤水分运动
  17. gnu nano显卡测试软件,显卡天梯图2018年9月最新版 秒懂桌面显卡性能排行
  18. Mysql查询不为null值和字段为null 阿星小栈
  19. 松滋历史(2)--高成县为什么这么高光?
  20. 陈安之励志演讲经典句子

热门文章

  1. [Spring5]IOC容器_Bean管理XML方式_外部属性文件
  2. [Spring5]Spring框架概述
  3. [mybatis]映射文件_参数处理_#取值时指定参数相关规则
  4. 洛谷 P2853 [USACO06DEC]Cow Picnic S-dfs
  5. Collecting Bugs POJ - 2096(基础概率dp+期望模板)
  6. Minimize the Permutation CodeForces - 1256(贪心)
  7. 非常实用的word文本括号匹配是否正确的code,可按照此思路扩展到python处理大批量文本文件的检错中,非常实用!!!
  8. math:线性代数之行列式
  9. 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,使其和等于 m
  10. 2019-03-14-算法-进化(移动零)