都说每一个理工脑袋在等待电梯的时候都会观察并脑补电梯的调度算法。尤其当多部电梯和多个按钮互相联动、还分单双层的时候,这个问题变得尤为复杂。此时,不管是在脑海中展开一场精采绝伦的工业设计工作坊,还是需要消化颅内精妙的构想与现实无趣的实现而形成的喜剧性反差,此思绪游走的过程都能完美地帮助我们消耗掉电梯徐徐到来前的那几分钟。
直到——
在我搬出校外住的这一年,终于偶遇了那部梦中情梯,一个以严密到不被大部分居民所理解的逻辑而掌控单双数联动电梯的系统。我曾以为这种调度逻辑仅存在于大家的想象之中——虽然是一个但凡脑补电梯调度系统至少一年的人都能想到的方案——我竟从未期待能在现实世界与它邂逅,亲自用手指按压它那背后充满智慧的上行按钮。至此,专程以一篇博客来记录它,便显得合理至极了。
梦中情梯是日本的 Fujitec 牌子,部署于香港宝琳的新都城二期居民楼中。每一栋楼有一部单数电梯、一部双数电梯、以及两部全楼层电梯。
当用户在楼栋 G 层按下双数梯的按钮时(单数梯同理),只有该双数梯的按钮会亮起,但是所有电梯都会参与计算,最近的那个会下降迎接用户。如果最近的是一部全楼层梯更近,那么下来的就是它,双数梯和其他电梯都不动。
它的思路应该是:用户明确了自己要去双数层,那所有能去双数层的电梯都应该响应用户。而按钮灯的作用是反映电梯目前的状态,尤其是给后面抵达电梯间的人看。那既然电梯正在处理的是一个“我要去双数层”的需求,并且有哪些电梯正在下行是不能实时追踪的,所以全楼层梯的指示灯并不会亮起。这样万一之后有“单数层”或者“任意层”需求的用户到达电梯间,则知道当前电梯不保证会相应他们的需求,所以他们需要按下额外的按钮来确保电梯接受到他们的需求。
当用户在 G 层按下全楼层梯的按钮时,也只有该按钮亮起,且只有两部全楼层梯参与调度。此时逻辑应该也类似:既然用户说的是“我要去任意楼层”,那系统猜不出来用户想去单数还是双数楼层,所以单双数电梯不会参与调度,同时状态灯也不会亮起。
电梯运行时和到达的时候也会有一些特别的逻辑。如果正在前往 G 层服务“双数”需求的是全楼层梯,而此时又有用户加按了全楼层梯的按钮,则此时不会再有新的电梯下行了。当全楼层梯到达 G 层之后,会消灭所有亮起的灯——包括全楼层梯的灯、单数梯的灯、双数梯的灯,因为这部电梯的确可以满足所有需求。反之亦然,当双数梯或单数梯到达 G 层之后,只会消灭自己的灯,不会消灭全楼层梯的灯。
唯一遗憾的地方是住户层只有下行没有上行,不过在这么复杂的逻辑加持下再给没一层楼都加上行,就有一点太夸张了。因为住户层只可能下行,所以这套系统采用最直白的调度模式,按下任意一个下键所有按钮都会亮起,所有电梯都参与调度。
从逻辑上看,这套系统简直堪称完美——噢不,简直就是艺术品。但只可惜——香港人口持续高龄化,把这一套完美且严谨的逻辑交给爷爷奶奶们,结果就是他们不懂为什么按了一个按钮之后有的电梯不动,有的灯不亮,然后每次在电梯间都要把几乎所有的按钮都按一遍。