在离散事件模拟期间出列事件

时间:2013-02-10 11:52:07

标签: events simulation modeling priority-queue

我对离散事件模拟期间的出队机制有疑问。

大多数实现使用某种优先级队列,可用于快速检索具有最早时间戳的事件。当无法安排此类事件时会发生什么,因为它需要一个能够运行的资源。

队列中可能还有另一个事件,其时间戳大于资源上阻止的事件的时间戳。

例如,我们假设我们正在为一家杂货店建模,其中包括单独的结账行和每行收银员。进入结账线的购物者是一个事件。我们根据购物者进入结账行的时间将此事件排入队列。但是,我们的模拟应该执行两个这样的事件的顺序,不一定是他们进入结账行的时间顺序,因为收银员可能以不同的顺序释放。

在这种情况下,如何仅使用基于时间戳的优先级队列 - 并且独立于资源可用性 - 如何解决?

2 个答案:

答案 0 :(得分:1)

如果客户身份在您的模拟中并不重要,那么每个收银员都需要一个队列,或者至少需要一个等待客户的队列(例如,我会加入三个人的队列,每个队列中有一个项目,一个人有一个人完整的小车,所以只是一个队列长度可能无法捕获合并该启发式所需的信息)。

当客户加入队列时,排队客户的数量会增加,或者客户被推到收银员的队列中。

当收银员准备好服务时,第一个客户会从收银员的队列中弹出。因此,客户服务事件不取决于客户到达的时间,而是取决于收银员何时准备好。

这些队列或计数器独立于事件的调度机制 - 调度的事件操纵这些队列,它们不依赖于它们进行调度。

答案 1 :(得分:1)

正如Pete Kirkham指出的那样,重要的是要注意客户等待的行(队列)与用于确定事件排序的优先级队列是完全不同的。

在离散事件模拟中,事件是系统状态发生变化的时间点。当一个事件发生时,你会根据状态找出下一步该做什么。加入客户群是一件大事,但也有资格获得服务。一旦客户有资格获得服务,该事件的逻辑就必须检查服务是否可行。如果是,请为服务结束时安排新事件。如果存在资源限制,则不会调度任何内容并且该客户处于暂停状态。但是,在将来的某个时刻,所需的资源将变得可用。这也是一个事件,该事件的逻辑应检查是否由于缺乏资源而暂停客户。如果没有,则无需安排任何事情,但如果是,您现在可以为客户安排实际服务。您可以看到队列中的客户延迟会随着资源限制而增加。

有关离散事件模拟如何工作的更完整的解释,请查看此introductory tutorial paper