0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

每个程序员都有对电梯的调度算法的想法,你有没有中招?

算法与数据结构 来源:未知 作者:steve 2018-05-09 17:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

第一,在心里骂电梯慢;

第二,在心里暗算着电梯调度如何优化;

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

本文对“骂电梯”不给予任何指导性建议。

但说起电梯调度算法,我觉得还是可以给大家科普一下,好为大家在等电梯之余,打发时间而做出一点贡献。(电梯调度算法可以参考各种硬盘换道算法,下面内容整理自网络)

传统电梯调度算法

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秒。

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

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

结束语

你肯能意识到哪个算法都不是一个最佳方案,只是它确实解决了一定情况的问题。

但是对一个优秀的程序员而言,研究各种算法是无比快乐的。也许你下一次面试,就有关于调度算法的问题。

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、JavaPython、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电梯
    +关注

    关注

    3

    文章

    533

    浏览量

    24324
  • 调度算法
    +关注

    关注

    1

    文章

    68

    浏览量

    12243

原文标题:我猜,每个程序员对着电梯都想过调度算法吧!

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    堆栈的原理揭秘

    撑了,程序员也只会是选择来知乎摸鱼】 其实每个看起来很玄乎的计算机概念,都是程序员为了以后能更方便的解决问题(偷懒)而提出的。 言归正传,堆栈其实是为了减少程序内存(RAM)占用的的问
    发表于 01-23 07:08

    光纤收发器有没有正反?一文讲清配对使用要点,广州邮科专业解答!

    在工业通信、安防监控、智能楼宇等项目部署中, 光纤收发器 作为光电转换的核心设备,被广泛应用。但很多新手工程师或集成商常会疑惑:“ 光纤收发器 有没有正反? ”“能不能随便配对使用?”今天,我们
    的头像 发表于 01-15 10:40 321次阅读
    光纤收发器<b class='flag-5'>有没有</b>正反?一文讲清配对使用要点,广州邮科专业解答!

    一文说透了如何实现单片机的多任务并发!

    每个任务仅在分配到 CPU 时间片时才能执行。时间片轮转法可以保证所有任务都有机会被执行,是一种非常公平的调度算法。 2. 优先级调度
    发表于 01-06 06:46

    芯盾时代SDP助力企业应对核心机密泄露危机

    无论程序员、文案、财务,无论你想撸代码、出海报、做报表,各式各样的AI总能满足的需求,让的工作更加轻松。
    的头像 发表于 12-26 11:49 822次阅读

    大理的AI野心藏不住了——风花雪月中千名程序员探讨人工智能

    2025 年12月4日至6日第二届CCF程序员大会暨大理人工智能与应用国际开发者大会在大理圆满落幕。
    的头像 发表于 12-24 17:45 877次阅读
    大理的AI野心藏不住了——风花雪月中千名<b class='flag-5'>程序员</b>探讨人工智能

    深入Linux内核:进程调度的核心逻辑与实现细节

    在Linux系统中,进程调度就像一位精明的“CPU管理”——它决定着哪个进程能优先使用CPU,多久切换一次进程,如何平衡系统响应速度与资源利用率。小到桌面应用的流畅点击,大到服务器的多任务并发
    的头像 发表于 12-24 07:05 4558次阅读
    深入Linux内核:进程<b class='flag-5'>调度</b>的核心逻辑与实现细节

    程序员最常见谎言

    了。 28我已经测试过了,这个功能没问题,可以上线了。 29别担心,这个问题很快就能解决。 30代码快写完了,已经完成 90% 了 。 希望大家对程序员多一些容忍以及谅解! 各位程序员你们都被我说中了哪些?说说你们的观点
    发表于 12-10 08:24

    FreeRTOS任务调度及优先级问题

    都有容错,但是心里没底,想向大家了解一下实际工作中有没有遇到到类似的问题,如果有又是怎么解决的呢? 另外有前辈可以分享一下任务的优先级在实际项目中该基于什么原则来划分呢?
    发表于 11-06 02:18

    西格电力智慧能源管理平台——算法如何优化调度

    能源管理平台的核心,西格电力提供智慧能源管理平台,咨询服务:1.3.7-5.0.0.4-6.2.0.0。——优化调度算法算法通过精准预测、动态决策、多目标优化,将调度从 “被动应对”
    的头像 发表于 11-04 15:16 1247次阅读
    西格电力智慧能源管理平台——<b class='flag-5'>算法</b>如何优化<b class='flag-5'>调度</b>?

    奔赴热AI,码力全开!Talkweb House@1024程序员日系列活动圆满收官

    1024程序员日”系列活动至此划上了一个圆满句号。本届1024程序员节以“AI构建世界,智能引领未来”为主题,广邀技术大咖、产业领袖、企业代表与全球开发者齐聚星城
    的头像 发表于 10-27 18:59 935次阅读
    奔赴热AI,码力全开!Talkweb House@1024<b class='flag-5'>程序员</b>日系列活动圆满收官

    开鸿智谷“以赛促学、以赛选才”|1024程序员节暨开源鸿蒙构建大会圆满落幕!

    10月24日,由开鸿智谷联合主办的长沙1024程序员节暨开源鸿蒙构建大会在长沙圆满落幕。本次活动以“湘聚长沙,共赴热AI”为主题,通过技术分享与实战竞赛相结合的方式,着力培养“开源鸿蒙+AI”领域
    的头像 发表于 10-27 17:58 828次阅读
    开鸿智谷“以赛促学、以赛选才”|1024<b class='flag-5'>程序员</b>节暨开源鸿蒙构建大会圆满落幕!

    studio有没有通过更改下载算法,同时下载到内部flash和外部flash?

    我现在使用的stm32h750,内部flash很小,需要使用外部qspiflash来储存程序。 studio可以像mdk一样设置两个下载算法吗? 这样才能一个程序使用两个flash不用单独分boot
    发表于 09-26 07:04

    wsOtaUpgrade有没有办法指定MAC地址?

    cybt-353027 的 MAC 地址。 我可以制作一个软件实用程序,从连接的设备读取 MAC 地址,然后使用正确的 MAC 地址作为命令行参数启动 wsOTAupgrade,但我不知道 wsOTAUpgrade.exe 是否支持这样的命令行参数。 有没有办法做到这一
    发表于 06-27 06:19

    详解Kubernetes中的Pod调度亲和性

    在 Kubernetes(K8s)中,Pod 调度亲和性(Affinity) 是一种高级调度策略,用于控制 Pod 与节点(Node)或其他 Pod 之间的关联(亲和)或反关联(反亲和)关系。通过亲和性规则,管理可以更精细地控
    的头像 发表于 06-07 13:56 1083次阅读

    程序设计与数据结构

    的地址)出发,采用推导的方式,深入浅出的分析了广大C程序员学习和开发中遇到的难点。 2. 从方法论的高度对C语言在数据结构和算法方面的应用进行了深入讲解和阐述。 3. 讲解了绝大多数C程序员开发
    发表于 05-13 16:45