一栋 20 层 的楼、一部电梯、三位乘客。同一批呼梯请求,换一种调度策略,停靠顺序、跑的楼层、来回掉头的次数全都不一样。玩懂电梯背后那个真实的 AI 问题:怎样安排顺序最划算。
电梯初始停在 1 层。每位乘客在某一刻按下呼梯键;电梯停到他所在楼层时,才知道他要去几层。
📏 规则 上 / 下一层用 1 秒,停靠不计时;每掉头一次产生 1 个单位「额外损耗」。
电梯收到一堆「要去哪层」的请求,却只能一层层地跑。先响应谁、后响应谁,就是一道调度题。课本里也常用磁盘读写来讲同一件事——它们用的是同一族算法:
谁先按谁先送,完全按请求到达的先后,一个一个做完。最公平、最好懂,但电梯常常刚上去又被拉下来,来回掉头多、跑的楼层也多。
每次都先去离当前最近的那一层。看着很「聪明」,总跑得比 FCFS 少;但它只看眼前,容易在中间反复横跳,掉头不一定少,远处的请求还可能被一直插队、迟迟轮不到(饿死)。
电梯朝一个方向一路扫到底,顺路的请求统统捎上,到顶(或没有更远的请求了)再掉头扫回来。掉头次数被压到最少,整体最稳——这正是现实中电梯和硬盘真正在用的策略。
| 策略 | 停靠顺序 | 跑楼层(秒) | 掉头(损耗) |
|---|---|---|---|
| 先来先服务 | 13→10→6→18→20→8 | 45 | 3 |
| 最近优先 | 6→13→10→18→20→8 | 37 | 3 |
| 方向一致 ✅ | 6→18→20→13→10→8 | 31 | 1 |
看出来了吗?方向一致(电梯算法)又跑得最少、又掉头最少——这就是它被真正的电梯采用的原因。
每一关随机生成一批乘客和一种策略。三步全答对算通关,看看你能连过几关!规则:1 层 = 1 秒,每掉头一次 = 1 单位额外损耗。