@ 2016.05.26 , 16:10
28

每天上下楼时想过这些吗:蠡析电梯背后的科学

你走向电梯口,按下了“up”按钮,接着在那里站了许久,像是等到天荒地老才等到令人安慰的“叮”的声音。它足以让你尖叫,在你看着电梯厢所处的位置并猜测为什么电梯还没有下来的时候尤为如此。

[-]

当你在酒店大堂里对着电梯咬牙切齿的时候,很容易忽视我们正在给电梯一个极其复杂之挑战的事实。你按下呼叫电梯的按钮之后,会发生很多事情:电梯系统必须决定该在何时让哪个电梯厢去接你。它必须决定在去大堂接你之前,是否应该先从它所在的5楼前往7楼去接别人。它还必须考虑哪些人等待的时间更长,哪些方法最有效并且能减少每个人的痛苦。电梯交通是一种复杂而又微妙的舞蹈,一旦你看见了它的步伐,就会忍不住对为它编舞的工程师们致敬。

电梯的路径其实并非总是这么复杂。最早的电动升降机由人类操作员控制,站在里面的员工会开着电梯上下,他会在看到等待之人的时候按停电梯。但人工操作电梯笨拙而又昂贵,20世纪50年代,电动开关取代了他们的工作。

[-]

电梯给自己导航的时候,工程师们不得不让它们弄明白何时何地等原则。最简单的方法是让电梯按照预定的时间间隔上下穿梭。这就像等待公交车一样,你需要等待着三点十分的电梯厢前往十楼,但这种方法效率非常低。在一天中忙碌的时候,这种电梯会浪费每个人的时间;而在空闲时候,这种电梯无意义地上下又很浪费。

等到1965年,每个人都知道这个方法很糟糕。因此电梯工程师们选定了我们都熟知且喜欢的模式:乘客按下按钮呼叫电梯,接着电梯对乘客的请求作出回复。问题的棘手之处也由此开始,一天之中会前往建筑中不同地方的上下请求并不确定,电梯面对如此多选择的时候该怎么办呢?

痛苦指数

试着描绘出你心目中最好的电梯系统。什么样的电梯系统才最棒?是那种为等待时间最长的人服务的电梯吗?还是总是对最近的呼叫做出反应的电梯?亦或者是那种既可保证快速服务又可节能的电梯?

这些正是电梯工程师们努力克服的问题,但没一个像它们表面看上去那么简单。比如最显然问题,电梯应该试着减少行程时间,但它怎样才能最优化你的时间呢?

电梯工程师们甚至不知道人们最基本的目标是什么。有时候,让一个人坐更久的电梯才是最佳选择。比如,某个电梯需要等十秒钟才会来,但它只需一分钟就能将你送到目的地;而另外一个电梯会在每层楼都停顿三十秒钟。许多人觉得等待是一件很痛苦的事情,所以他们宁愿选择前者,即便他们到达目的地的时间会晚十秒钟(当然那些有电梯幽闭症的人宁愿在电梯里面少待一会儿)。因此,某些电梯并不根据时间进行最优化,而是根据某个定制的“痛苦指数”最优化,在这种情况下电梯系统会权衡每次延迟令人不快的程度。

[-]
电梯井

电梯的操作受到许多限制这一点令情况更为复杂,比如它的速度有限,比如它的下一次移动方向有两个选择,它也不能让乘客不快(比如没有在乘客想去的楼层停下)。一个好的电梯系统需要平衡这些目标和担忧。

电梯调度算法

最早也最简单的电梯调度很常见,它被称作“集中控制”或者“电梯调度算法”,由两个规则组成:

1、只要电梯里面或前面有人,且他们想去的地方与电梯目前的方向一致,那么电梯可继续在这一方向前行。

2、一旦电梯完成它目前行驶方向的所有请求,那么它就可以变换行驶方向,应答另外一个方向的请求。否则,电梯需要停下等待着人们的呼叫。

这个算法简单直接,小的办公楼或者公寓不需要高效电梯,因此它们大多采用这种算法。而在大一点的建筑中,集中控制会出现问题。比如电梯每次经过中间楼层的时候,都可以提供服务,但它永远不会在前往7楼的时候停在地下室。因此,在高楼大厦的底层和顶层等待电梯是一个噩梦。

[-]

更重要的是,大厦中通常不止一部电梯。如果每部电梯都遵循电梯调度算法,那么在高峰时期电梯会开始跳过一些楼层。它们会在建筑中部聚成一团,甚至有可能两次为同一个呼叫服务。

为了处理这些问题,工程师们想了很多办法。比如让电梯彼此之间进行交流,如果1号电梯在上楼,那么2号电梯就可以开始处理大堂里的请求。另外,他们也会将电梯分配给特定楼层。你可能曾见过电梯等在大堂中,电梯门大开的场景。这被称作“停留”策略,即闲置的电梯会前往发出请求最多的楼层。感谢交通预测和实时监控,电梯可以在策略之间进行转换,以便适应高峰时期。

计算的复杂性

20世纪70年代,可重复编程的计算机面世的时候电梯程序又发生了变革。如果某人有了新的电梯路径策略,那么他们将不再需要等待电梯在大厦中的试验,只需在软件模拟中测试他们的想法即可。

那时涌现出了不少新算法,其中一个算法到如今依旧非常流行,它被称作“预估到达控制时间”。计算机会考虑所有电梯厢朝着某个请求移动的情况,并分配它认为最快的电梯厢执行任务。另外一个受欢迎的算法是永远让电梯厢处理最紧急的呼叫,创造出对乘客而言“最好的”结果:缩短时间、最节能或者其它设计师想要优化的东西。

如果你在纽约万豪酒店或者其它建立于20世纪90年代之后的摩天大楼中坐电梯,那么你就能感受到计算机化趋势的极端——“目的地调度”。在这些建筑中,比起简单地按上下按钮,你可以按下你想去的楼层按钮,接着它就会告诉你哪个电梯将会带着你前往你要去的楼层。

由于它们确切地知道你要去哪里,因此系统能够更有效率地工作。前往同一楼层的人聚集在一起,将电梯变成了快速列车。在这种情况下,也许你会等得更久一点,目的地调配系统常常会根据一天之中的时间来变化它们的优先选择。在早晨的高峰期,净载货量是关键,因此你必须等待更长时间以便让系统减少总体的运输时间。下午,当同时乘坐电梯的人较少的时候,它们可以更快地送你去想去的楼层,减少等待的痛苦。

[-]

在所有这些策略选择中,工程师们该如何选择最佳算法这个初始问题总在发生变化。老实说,最成功的方法之一是将一切交给计算机,让它来决定。工程师们可以利用计算机学习技术,告诉计算机什么是成功的算法并让控制器自行模拟实验。每次系统会先观察模拟电梯的状态、每个呼叫的参数,再决定该做什么并测量结果。最终软件会根据每种因素的结合采取不同的策略。有了这些复杂的策略,就连开发出软件的人通常都不明白为何它会做某些事。

电梯调度是一个错综复杂的平衡行为。每次你按下呼叫按钮的时候,你就成为了不确定因素的一部分。因此下次当你需要长时间等电梯的时候,可以花点时间赞美卑微电梯的复杂性。

当你看到电梯短距离赛跑背后的魔法时,就连电梯延迟也会变成一件令人开心的事。

本文译自 Popularmechanics,由译者 肌肉桃 基于创作共用协议(BY-NC)发布。


给这篇稿打赏,让译者更有动力
支付宝打赏 [x]
您的大名: 打赏金额:

4.6
赞一个 (17)

TOTAL COMMENTS: 28+1

  1. 3151679

    啥析?

    [21] XX [0] 回复 [0]
  2. 3151682

    @itit: 蠡,读厘

    [19] XX [1] 回复 [0]
  3. 3151683

    字一多就看不懂了

    [11] XX [1] 回复 [0]
  4. coldster
    @1 year ago
    3151684

    貌似至今这个电梯算法都是个课题吧

    [14] XX [1] 回复 [0]
  5. 3151691

    管他呢 反正偶尔电梯只有我自己的时候 我到了就会把所有楼层按一遍再跑掉

    [3] XX [65] 回复 [0]
  6. 3151697

    以前单位在5层,经常的按下楼以后眼看着三部白痴都路过不停车,或者到邻近一层就掉头。

  7. 无浪漫主义者
    @1 year ago
    3151700

    这是工程问题,不是科学问题…

  8. 3151707

    @TRTK: 哈哈哈,百度蠡析的意思结果百度第四个链接就是jandan的这篇文章

    [15] XX [1] 回复 [0]
  9. lucky毛毛
    @1 year ago
    3151745

    在中国,绝大多数电梯用的都是文中的简单控制方法,专业术语叫“集选”,即同向截停,反向不停,先响应内呼。但是很多写字楼为防止乘客在下班高峰期怕等不到电梯而“先坐上去再坐下去”,降低电梯使用效率,在高峰期时自动使用了屏蔽“上集选”的功能,下班高峰期上行按钮是无效的。

    [13] XX [1] 回复 [0]
  10. 69之王
    @1 year ago
    3151752

    @sky: 现在的电梯大都有防捣乱功能 当你按亮所有的楼层 而电梯检测到轿厢的重量没有发生变化 光幕检测到没有人进进出出 按钮会在下一个楼层全部灭掉

    [70] XX [0] 回复 [0]
  11. mty1111
    @1 year ago
    3151782

    怀疑这里用蠡是错误用法——把蠡测的测改成析,当作浅析的意思。实际上蠡是瓢的意思,蠡测中的蠡是说用瓢来测量海水,作谦辞的时候表示自己的一些浅见。蠡析的话就不知怎么解释了。这里用厘析应该稍微比蠡析妥当,不过不如浅析、简析。

    [25] XX [0] 回复 [0]
  12. 3151784

    @69之王: 还能让某些人感觉快乐,真不错。

  13. 3151812

    @mty1111:
    显然,“蠡析”这个词是硬造出来的,狗屁不通的东西。

  14. vuliao
    @1 year ago
    3151813

    有一个网页游戏叫 Elevator Saga,就是让玩家自己调用给定的js函数来编写电梯算法的,楼层和电梯数量会随着难度增加。对电梯算法没啥概念的可以去感受一下。

  15. 不喜欢吃鸭蛋
    @1 year ago
    3151818

    复旦附中自招题

  16. 碧蓝右耳
    @1 year ago
    3151821

    @Muche @mty1111 我更倾向于认为这个 “蠡析”就是“这是”的粤语读法“勒系”的卖萌谐音

  17. 3151832

    @Muche: 有时候写东西,脑海中会出现一些似曾相识的词语,想写下去又怕是自己造出来的。btw,你句末语气过重了。

  18. 3151888

    geek们也考虑下用户体验吧:最简单明了的算法,虽然效率可能不高,但人人能够理解,就算多等一会儿,大家也可以接受。如果明明按了电梯,却眼看着电梯经过而不停,真是非常糟糕的体验,因为搞不懂这电梯到底唱的哪出戏,甚至可能以为是管理人员在戏弄他。
    我的建议是,高峰期就用最煎蛋明了的算法。没人时就让电梯平均分布,比如4台电梯,就停在1楼、顶楼、1/3、2/3处。

  19. 小狼狼
    @1 year ago
    3151934

    @GGG: 电梯经过而不停,最大的可能就是已经满载了,就算停了你也上不去,于是屏蔽外层响应,赶紧把里面的人放下去先……

  20. 3151982

    最高效的算法肯定是乘客在乘电梯前就选好要去的楼层,电脑计算分配好之后,告诉乘客去等几号梯。我还真见过有大厦用这种电梯,坏处是很多人不晓得怎么用。

  21. CarShock
    @1 year ago
    3152180

    @mty1111: @Muche: @qler: 确实没有这个词,并且也没有近似的用法,字形相似的也没有。所以可以确定不是误用,就是生造词,还是在不知道语源的情况下生造——这种行为常见于装逼。

  22. monolomo
    @1 year ago
    3152339

    做电梯就是做公交车,上下跑的公交车

  23. 3152383

    说起来,煎蛋上面的标题链接,是左边上一条,右边下一跳,然后到了两侧的快捷指引,又变成了左边下一条,右边上一条。这是新颖的算法么?

  24. ss30mi
    @1 year ago
    3152386

    就是个模型算法问题。小区的电梯默认停在7楼,俺住6楼。每次下楼都要看到电梯下到1楼(有人)再返回7楼(无人)再下到6楼接我下楼。

  25. 3152489

    @小狼狼: 电梯外面显示了“满员”吗?如果没显示的话,那只是你自己的猜测而已。没准就是哪个geek想出的奇葩算法在折腾你呢

  26. 哲学大叔
    @1 year ago
    3152995

    还有种方法,电梯接力.貌似采用的不多.可以降低电梯的成本.不过前期投入加大了.但我觉得总体效益应该更高.首先单个电梯安装的成本下降了.电梯本身的设计要求也能降低不少.电梯冗余度自然而然加大.
    不足之处,比方30层大楼,你要从1楼去30楼,在15层或16层,换一部电梯.才能继续.

  27. 3153154

    能把3句话就说明白的事扯成这么长也是本事

  28. 我最可爱啦
    @1 year ago
    3153834

    @Cor: 你有时间可以随便找个希尔顿的酒店基本都是这样的 按按钮之后就会有其中一个电梯指示灯亮起来让你过去等 一般情况不出十秒就会到

发表评论


24H最赞