电梯使用哪种算法来找到最短的下单路径?


27

我一直在尝试模拟一个电梯,就像往常一样,我一次只做一个简单的命令就非常简单,然后以队列的形式向电梯添加内存,以便按压下的顺序移动地板,这显然不是最佳方法。

因此,目前我使用的是一种非常简单且“近视”的逻辑,即对于当前楼层,找到离我最近的楼层并将其设置为我的下一个目的地,然后循环直到列表中没有更多的楼层。

但这并不总是有效,例如,电梯位于5层建筑的3层,并获得订单4,5,2,最短路径为2-> 4-> 5,花费4层,但是使用此逻辑根据代码的不同,花费5的4-> 5-> 2有相同的机会被选中。

如何找到最短的路径并使电梯更高效?



6
我想邀请您到我的办公室,弄清楚电梯在那使用的算法。因为我绝对不能。
gnasher729

1
@ gnasher729哦,即使我不认识你,我也可以,因为它肯定和我办公室里的一样:永远不要停在我所在的地板上,除非已经有很多人。我对吗?
Andres F.

2
不完全的。有四部电梯。按下按钮,很长时间没有任何动作。如果有人移动,它会停在您的地板前,等待一段时间,直到被超过您的地板然后掉下来的另一物体超越。在到达地面的路上,它至少停了三下,没有人进入。
gnasher729

2
相关的编程游戏/挑战:play.elevatorsaga.com
dwikle

Answers:


30

“效率”不是最重要的功能,最重要的是确保遵循每个命令,没有饥饿。如果有人按下100,而人们持续按下1和2,则在这些楼层之间继续走动可能会比较有效,但是在某个时候访问100会很好。

认为(从我感兴趣的时候的个人观察),他们大多数人这样做:

  1. 开始朝第一个按下按钮的方向前进,跟踪我们往哪个方向前进
  2. 当到达地板并按下该按钮时,停止并打开门,将此地板的按钮标记为不再按下。
    • 如果还有更多我们需要访问的楼层处于同一方向,请继续朝该方向前进
    • 如果不是,并且仍然需要访问某些楼层,请朝该方向移动。
    • 如果没有,那么我们就完成了,当再次按下一个按钮时,它将从1开始。

请注意,许多电梯在门旁都设有按钮“我要上去”和“我要下山”,而不是一个按钮。该算法只需要进行很小的更改:在2中,如果针对该楼层按下的唯一按钮是门旁边的按钮之一,则只有在朝该方向前进时才停止并打开门。如果由于电梯内的某个按钮被按下而导致门开着并且方向错误,则可能会保持按下该按钮的状态。

您无需找出完整的路径,只需下一步即可。


这完全跳过了我的脑海,我是如此专注于效率,却忘记了其他重要的事情。从2-> 100再回到1仍然是无效的,只是因为它是在同一方向,但至少可以确保没有饥饿。并且,完全脱离主题,这也许就是为什么通常会使用这种逻辑找到两部电梯?这使我想知道在任何给定时间找到反向运行的电梯是否更常见。无论如何,我仍然对如何找到最短的完整路径感到好奇,但这确实很好地回答了我的问题,谢谢
Raed Tabani

7
请注意,一旦到达具有100层的建筑物,通常您将拥有仅服务特定楼层范围的电梯(例如0-19、20-39,...)以及仅能长距离行走的特快电梯(例如0到50、0到100、50到100,但两者之间没有楼层),因此您可能必须更换电梯才能到达目的地。您可能还需要为每个竖井配备多个电梯,这些电梯显然无法相互通过。完全题外话:IIRC,用户体验网站上的那些向上和向下箭头按钮的效率存在疑问,这使阅读非常有趣。
约尔格W¯¯米塔格

谢谢,我不知道。如果一部分没有破坏整个系统并且分散负载(对于机械磨损很重要),那么细分似乎是一个好策略。我想知道这些快速电梯是否是由于Knuth电梯算法的逻辑缺陷所致。
Raed Tabani

我要补充的唯一一件事是,他们经常会在不使用时返回“家用”地板,这对于不同的电梯可能会有所不同,甚至可能会根据一天中的时间和预期的使用方式而有所不同
jk 。

无论我实际上是朝哪个方向行驶,我都倾向于半随机地按上/下按钮。就我而言,我只有一个目的地,因此无论我选择向上还是向下,电梯都会将我带到该位置下。我怀疑如果我按下向下按钮,选择我上方的地板,然后在电梯开始移动之前选择我下方的地板,它将带我到我下方的地板,而不是我首先按下的地板。我可能是错的,下次我发现自己在电梯里时,一定会进行测试。
Ucenna

13

另一个答案正确地给出了标准的电梯算法,该算法基本上是“尽可能长时间地朝同一方向行驶,并在途中使每个必要的停车”。

还有其他电梯算法。例如,考虑一栋公寓楼,当您上楼时,公寓的价格会更高。建筑物的所有者可能会选择将电梯算法修改为“尽可能长时间朝同一方向行驶,但只能在下降的路上停下来”。这样,如果您的电梯中的人在大厅中,分别要到达2、5和10,则电梯先到达10,然后是5,然后是2,然后按支付的租金的顺序将人们送下车。但是,当然,当10 岁以下的人离开公寓时,他们通常不得不等待更长的时间才能到达大厅。

如果您正在寻找一种有效的解决方案,请提出一个成本指标,并实施一系列不同的算法,然后运行仿真。请记住,不仅要衡量平均成本,还要衡量诸如服务任何一个请求所需的最长时间之类的指标。针对较低的平均值进行优化有时会取消优化最坏的情况,这是不好的。


1
似乎很少见(其他
病史

10

请注意,电梯使用与某些硬盘驱动器控制器相同的调度算法。标准的SCAN算法甚至被称为电梯算法。我认为在实践中,LOOK算法更为常见,因为它比SCAN效率更高。


当您这样说的时候,您是否有实施电梯法规的专业经验?特别是较新的电梯系统?我很好奇,如果在纽约9/11之后,将旅客送下床而不是将其送上更高的优先级。
约翰·扎布罗斯基
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.