公众号旧文
当按下多部电梯的按钮后,电梯是怎么调度的
电梯调度是一个经典的调度算法问题。
现实中的系统很复杂,但最基础的算法就叫 Elevator Algorithm,它在计算机领域也叫 SCAN 算法,该算法最早用于磁盘调度。
现在用一个简单的方式解释当按下多部电梯按钮之后系统是怎么运行的。
一、先区分两种按钮
现实中电梯系统会区分两类请求:
1️⃣ 厅外按钮(Hall Call)
就是你在走廊按的:
↑ 上
↓ 下
系统只知道:
- 你在哪一层
- 你要上还是下
但不知道你要去几楼。
2️⃣ 轿厢按钮(Car Call)
进入电梯后按的:
3楼
10楼
20楼
算法系统知道具体目标楼层。
二、核心思想:像扫地一样来回扫
电梯算法的核心逻辑非常简单:
电梯保持一个方向,一路处理同方向的请求。
例如:
电梯正在向上运行:
1F → 3F → 5F → 8F → 10F
如果途中有人:
在 6F 按 ↑
在 7F 按 ↓
系统通常会这样处理:
| 楼层 | 请求 | 是否停 |
|---|---|---|
| 6楼 | ↑ | ✔ 停 |
| 7楼 | ↓ | ❌ 不停 |
因为方向不同。
电梯会先一路向上扫完:
1 → 3 → 5 → 6 → 8 → 10
然后再反向下来:
10 → 9 → 8 → 7 → 5 → 3 → 1
这就是 Elevator Algorithm(电梯算法)。
三、多部电梯时怎么分配
当你在1楼按按钮时,系统会选择最合适的一部电梯。
一般会考虑这些因素:
1、距离
哪部电梯离你最近。
例如:
电梯A 在 3楼
电梯B 在 12楼
你 在 5楼
通常 A 会来。
2、运行方向
如果电梯已经在移动,会优先选顺路的电梯。
例子:
电梯A 在 3楼 正在 ↑
电梯B 在 6楼 正在 ↓
你 在 5楼 按 ↑
系统通常选电梯 A,因为它顺路。
3、负载
现代电梯还会考虑:
- 电梯是否满员
- 已经有多少停靠
例如:
电梯A:已经停 8 层
电梯B:只停了 2 层
可能选择电梯 B。
4、预测流量
一些写字楼会用智能调度:
比如早上 8:30 大量人员 从1楼上楼。
系统会:
- 多部电梯停在 1楼
- 专门负责上行运输
这种叫:
Destination Control System(目的地楼层控制系统)
你在大厅先输入楼层:
18楼
系统会分配:
请乘坐C电梯
这样能减少停靠次数。
四、现实中的调度算法比想象复杂
真正的商业电梯会用类似这样的模型:
- SCAN(电梯算法)
- LOOK
- 动态优先队列
- 负载预测
- 人流预测
- 群控调度(Group Control)
大楼里常见 4 ~ 12 部电梯统一调度。
控制器会实时计算:
- 位置
- 方向
- 速度
- 等待时间
目标是优化平均等待时间 + 运输效率。
五、一个直观例子
假设 4 部电梯:
A 2F ↑
B 7F ↓
C 15F idle
D 20F ↓
你在:
5F 按 ↑
系统可能这样判断:
| 电梯 | 状态 | 适合度 |
|---|---|---|
| A | 正在上 | ⭐⭐⭐⭐ |
| B | 正在下 | ⭐ |
| C | 空闲 | ⭐⭐⭐ |
| D | 太远 | ⭐ |
最后选电梯 A。
六、一个有趣的事实
电梯算法后来被计算机借用。
操作系统磁盘调度里有:
- SCAN
- C-SCAN
它们的灵感就来自电梯上下扫描楼层。
扩展阅读: