一个程序员的基本修养—论如何成功搭上电梯

Posted xioacd99

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个程序员的基本修养—论如何成功搭上电梯相关的知识,希望对你有一定的参考价值。

心里没有嘀咕过电梯调度算法的程序员不是好调库侠。

闹钟响了,嗯,还可以睡30分钟。到时候直接拿东西走就ok了。不幸往往睡过头了,结果只剩下5分钟。害,还以为什么大事呢?刚好可以掐着点签到,nice。于是你不紧不慢地来到了电梯前,温柔地按下了下降的按钮,两部电梯,一部不动,另一部刚刚降到10竟然又升上去了!哦豁,洗白了,这下玩完了。

好不容易电梯停在了你这一层,你发现,人满了…

或者说,你在底层,按下了向上的箭头,但这些电梯大爷动都不动。为什么呢?
电梯的上下箭头是为了告诉电梯你想上去或者下去,而不是让电梯向上或者向下。

百度在2019年还举办过一个电梯调度算法大赛,https://aistudio.baidu.com/aistudio/competition/detail/11
可以看到,这是一个深入人心的痛。

所以,我接下来要干什么呢?讲算法?no no no,讲算法是不可能的,这篇文章从头到尾都不会讲算法的。只有好好水文章才能获得阅读量的这个样子(不讲算法我又写啥呢?Doge

当然,本着诚实守信的原则,这篇文章是不会讲具体的算法的。只是简单提一下各个算法的设计思想。

  1. First Come First Serve(FCFS)Algorithm
    大白话:谁先按下电梯按钮就先往谁所在的楼层跑。所以你需要可能需要一个机器人来帮助你,就像这种(把它粘在电梯旁)

  1. Short Seek Time First(SSTF) Algorithm
    大白话:谁离我近我就去谁那儿。“近水楼台先得月,向阳花木早逢春”

  2. SCAN Algorithm
    类似托马车小火斯,在始发站和终点站一直循环着跑(可以把轨道想象成是圆形闭合的)。途中碰到人就勉为其难的载一下

  3. LOOK Algorithm
    这个算法是在 SCAN 基础上的改进,改进思想就是小火斯跑着跑着,连续过了好几站都发现没人。等得不耐烦了,于是就掉头了,oh my god,火车掉头。

  4. Shortest Access Time First(SATF)Algorithm
    这个算法是在 SSTF 的基础上的改进,增加考虑了大家上电梯时间对于调度的影响。

  5. Earliest Deadline First(EDF) Algorithm
    这个属于实时调度算法,怎么说了,我也不知道它是怎么预估 Deadline。就假设它知道接每个楼层的人需要多少时间,然后它就先挑时间短的,有点类似贪心。

  1. SCAN + EDF
    这名字一看就知道是 SCAN 和 EDF 的改进。那这又怎么结合呢?这处理的是一种特殊情况,算法主体还是采用 EDF 来处理。但是对于完成时间相同的,就依次处理(SCAN 的思想)(这种算法改进思想是不是很平常)

  1. Priority Inversion Algorithm
    有一天,连电梯都只搭载它喜欢的人了。哦豁,那人群就被分为了两类,高优先级的和低优先级的。电梯只在高优先级为空的情况下才处理低优先级的人…

  1. Feasible Deadline SCAN Algorithm
    电梯自身有一个小本本,记录了它能接受的最长服务时间。(为什么是小本本呢?因为随着它的长大,我们等的时间比它最长能接受的时间还长)只要是满足这个限制的,那么电梯就向这个方向采取 SCAN 的思想依次服务。

就先介绍9个算法,因为我喜欢9这个数字(逃)

还有什么多梯梯内调度、梯外调度、单梯梯外调度、多梯梯外调度、分布式电梯群控系统多目标调度算法、基于CMAC网络强化学习的电梯群控调度等等。想想就头大,这里就不再介绍了。

在实际生活中,有用RSR算法的,如奥的斯,其逻辑原则是平均侯梯时间最短。当然,我们身边的大多数电梯都才刚刚成年,20多岁的电梯小年轻怎么会在意这些呢?

所以,最有效的方法就是,当你在顶层时,全部电梯按往下;当你在底层时,全部电梯按往上;中间的情况上下全按。高峰期可以先上再下。Oh耶,妈妈再也不用担心我挤不上电梯了。

那再不行,就走楼梯吧。还能锻炼身体…

以上是关于一个程序员的基本修养—论如何成功搭上电梯的主要内容,如果未能解决你的问题,请参考以下文章

论一个程序员的自我修养

论一个“程序猿”的自我修养;

如何成为CI/CD的理想型?论Kubernetes七大自我修养

论程序员的自我修养

功能测试--电梯测试项

从你的全世界路过-论演员的自我修养