电梯算法

3

假设在一座24层的建筑物里有一台电梯位于底层。

一个人在7楼按下下降按钮,要求电梯下行。

因此,电梯会一直显示上升箭头直到第7层,然后变为下降箭头,因为它需要从那里开始往下走。

如果一个人在2楼按上升箭头(电梯刚开始往上移动并且还没有越过2楼),电梯/升降机是否会在2楼停下?

如果是,那么如果2楼的人按下前往20楼的按钮会怎样呢?

电梯的路径会是怎样的呢(例如 G -> G+2 -> ...)?

我非常困惑电梯/升降机到底是如何处理这些情况的!


1
这个问题与C++有什么关系? - bfontaine
这正是为什么许多现代建筑都有一个选择目标楼层的面板,而不仅仅是选择你想要前往的方向的原因... - StoryTeller - Unslander Monica
更适合于https://cs.stackexchange.com/。 - Elazar
很抱歉,我不知道该打什么标签!所以就打了C ++。说到印度,在IT科技园区,电梯上只有两个按钮,向上和向下箭头。一旦你进入电梯,你就可以选择你想要去的楼层。在这种情况下,你能告诉我会发生什么吗? - Pranav Sinha
3
电梯专家道格拉斯·亚当斯:https://www.goodreads.com/quotes/144863-not-unnaturally-many-elevators-imbued-with-intelligence-and-precognition-became - Mörre
显示剩余5条评论
1个回答

2
作为一个程序员,你会使用统计和建模(最好的情况)或基于你自己主观经验的虚构假设。
在你的例子中,程序员会使用这样的假设(或统计数据):大多数想要下楼的人都想一直下到地面或停车场。再加上这样的假设:如果建筑物很高,想要在2楼进入电梯的人想要上去。
因此,在达到电梯乘客输入的最低楼层之前,你不会停下来。


基本上,一般的答案是使用运动的统计数据。这些数据因建筑物而异。如果建筑物是新的,没有数据,你可以看看楼层上有什么,并尝试预测人们的移动方式。基本上,你要创建一个人们移动的模型。然后,你尝试创建一个优化函数,例如最小化等待时间、队列长度或能源消耗。
你还可以考虑到一天中的时间。例如,在商务大楼中,你可能会在早高峰期优化上行,而在下午晚些时候/傍晚优化下行。
建模、模拟和统计是在这种情况下找到好算法的关键。
此外,还要考虑条件。例如,你可以设置优化的条件,即没有人应该等待超过20秒,即使整体效率会降低。例如,如果所有交通都在较低的楼层,只有一个人在第50层。忽略他/她一小时可能是最有效的,但这是不可接受的。或者,感知到满载的电梯可能不会停在除了乘客选择的楼层之外的其他楼层上。


您可以在互联网上找到关于如何进行建模的课程,例如在edX等教育网站上。这里有一个例子(该课程已关闭但仍可访问):"数学建模基础--使用数学创建模型解决实际问题。"

这是一篇关于如何对电梯进行建模的论文的例子(有很多!):"用彩色Petri网建模电梯系统"(PDF)

为了展示这种建模方法确实在实践中被使用,这里有一个软件(Oasys MassMotion)的例子,以及它如何被用来建模电梯:"Oasys Software Blog: Modelling Lifts"



这是计算机科学毕业生的做法。在实践中,几乎同样有效且需要更少的技能和知识的方法是,你可以根据自己的感觉(做出合理的假设),如果有人(负责人)抱怨,你可以调整算法 :-)

你也可以了解建筑物内人们的行为。虽然我猜大多数电梯并不会这样做。 - Elazar
@Elazar 不错的观点,另一个维度有其自身的利弊:在哪里放置智能,是否提前完成所有工作或将其放入对象中并允许它们进行适应。麦当劳店是提前规划的例子,施乐帕克则是后者,可以看作人类组织的一个例子。 - Mörre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接