电梯为何总不来?算法背后的真相
Elevators

每次按下按钮却迟迟等不到电梯,你是否想过这背后复杂的算法博弈?文章深入解析了从基础的 SCAN 和 LOOK 算法到 Otis 公司的 RSR 智能调度系统。通过模拟早高峰和不同流量场景,我们发现看似高级的 Destination Dispatch 目的地调度系统,在多数情况下反而不如传统的上下按钮灵活。因为系统每 5 秒的重新优化机制,让保留灵活性比获取额外信息更重要。下次等待时,请理解电梯并非故意忽视你,它只是在处理海量数据。
下次你被困在等待电梯时,试着别往心里去,电梯确实听到了你的召唤,只是它需要思考的事情太多了。
HN 评论区
387- dsego
“电梯其实听到了你的呼叫,只是它有很多事要思考”
没想到我这一天竟然以在高层写字楼里等电梯时,对电梯的困境产生共鸣和同情作为首尾。
我之前按过呼叫面板,但看着太阳开始西斜,30 秒内世界似乎真的发生了巨大变化。
- peterldowns
高中时,模拟不同的电梯算法是我在 CS 课上实现的项目之一。这并非课程要求——AP CS 并不要求真正的编程——但这确实是个有趣的项目。
一个有趣的联系是:旋转磁盘硬盘(HDD)实际上就像一部非常长的电梯,只是绕着主轴卷起来,而不是垂直排列。SCAN 算法实际上就是一种磁盘调度算法!
- pavlov
> 目的地选层系统 [...] 通常表现更差
我怀疑这是否是因为作者使用了随机目的地造成的。我曾在一栋使用目的地选层系统的楼里工作,常见的出行模式似乎是:
- 不在一楼的人通常都想去一楼。
- 在一楼的人通常是大群人前往同一个目的地。
这是因为同一楼层工作的人往往在同一时间离开去吃午饭,并在同一时间返回同一楼层。在这种情况下,目的地选层系统很有帮助,因为它将前往同一目的地的大批人员进行了批处理。
- omoikane
对于从未见过电梯调度游戏的朋友们:https://play.elevatorsaga.com/
祝你们享受这个兔子洞 :D
- woeh
我只想知道为什么该死的不能取消我误按的按钮。这应该很简单。按一次开启按钮,再按一次关闭按钮。
或者,如果你担心人们会混淆,也可以长按来关闭之类的,但我真的觉得没必要。我们都知道开关(toggle)是怎么工作的。按钮亮起时就表示已开启。
- brandonpelfrey
哈哈,在开发 Sky Lobby 这款关于控制和自动化电梯的移动端游戏(iOS / Android)时,我深入思考过这个问题。
在游戏中,部分电梯是自动化的,我想选择一个最符合玩家对电梯行为预期的算法。最终我采用了接近 LOOK 的算法,正如文章所说,这基本符合人们的预期。不过在出现歧义时,我会优先处理等待时间更长的楼层,以改善 p90 指标,这对游戏来说很重要。
但现在,加入这些挑战:
- 双层轿厢(相连的轿厢同时覆盖两层楼)
- 不同井道之间的换乘层
- 直达井道
那么,最佳(或至少最符合预期)的算法就变得不那么明显了!我就留给读者去找出最好的方案吧。
幸运的是,我负责的是游戏,而不是真实的电梯系统,所以我只需要找到一个“足够好”的启发式算法,并且可以调整规则,让玩家在不喜欢电梯计划时手动覆盖。这似乎让大多数玩家满意了。
- sorz
我在电梯上遇到的最大问题从来不是算法,而是人们似乎无法理解根据要去的方向按下“上行”或“下行”呼叫按钮这一概念。几乎每次我都会看到有人两个按钮都按,理由是“这样电梯来得更快”。完全忽略了这样做导致电梯有一半几率先往反方向开,并且给已经在里面的人增加了一次不必要的停靠。理解这个概念有这么难吗?..
- hermanschaaf
用 TLA+ 模拟电梯是个很有趣的练习。
https://github.com/tlaplus/Examples/blob/master/specificatio...
另一个有趣但被低估的例子:酒店钥匙。