Events 离散事件模拟中的事件出列

Events 离散事件模拟中的事件出列,events,simulation,modeling,priority-queue,Events,Simulation,Modeling,Priority Queue,我有一个关于离散事件模拟期间的出列机制的问题 大多数实现都使用某种优先级队列,可用于快速检索具有最早时间戳的事件。如果由于(比如)需要资源才能运行而无法安排此类事件,会发生什么情况 队列中可能存在另一个事件,其时间戳大于资源上被阻止的事件的时间戳 例如,假设我们正在建模一个杂货店,它有单独的结账行,每行有一个出纳。购物者进入结账队列是一个事件。我们根据购物者进入结账队列的时间将此事件排队。然而,我们的模拟执行两个此类事件的顺序不一定是他们进入结账行的时间顺序,因为出纳员可能会以不同的顺序释放 在

我有一个关于离散事件模拟期间的出列机制的问题

大多数实现都使用某种优先级队列,可用于快速检索具有最早时间戳的事件。如果由于(比如)需要资源才能运行而无法安排此类事件,会发生什么情况

队列中可能存在另一个事件,其时间戳大于资源上被阻止的事件的时间戳

例如,假设我们正在建模一个杂货店,它有单独的结账行,每行有一个出纳。购物者进入结账队列是一个事件。我们根据购物者进入结账队列的时间将此事件排队。然而,我们的模拟执行两个此类事件的顺序不一定是他们进入结账行的时间顺序,因为出纳员可能会以不同的顺序释放


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

如果客户身份在模拟中不重要,则每个出纳需要一个队列,或者至少需要等待客户的计数(例如,我会加入一个由三个人组成的队列,每个人有一件物品,而另一个人有一辆满载的手推车,因此,仅一个队列长度可能无法捕获合并该启发式所需的信息)

当客户加入队列时,排队的客户数量会增加,或者客户会被推到出纳队列上

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


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

正如Pete Kirkham所指出的,重要的是要知道队列(队列)客户等待的时间与用于确定事件顺序的优先级队列完全不同

在离散事件模拟中,事件是系统状态发生变化的时间点。当事件发生时,您可以根据状态确定下一步要做什么。加入客户线是一个事件,但符合服务条件也是一个事件。一旦客户符合服务条件,该事件的逻辑必须检查是否ice是否可行。如果可以,请为服务结束的时间安排一个新事件。如果存在资源限制,则不会安排任何活动,该客户处于等待状态。但是,在将来的某个时候,所需的资源将变为可用。这也是一个事件,该事件的逻辑应检查是否有客户n由于资源不足而挂起。如果没有,则不需要安排任何事情,但如果是这样,您现在可以为客户安排实际服务。您可以看到,队列中的客户延迟将随着资源限制而增加


要更全面地解释离散事件模拟是如何工作的,请看这个。

这意味着事件加入一个等待资源可用的队列,而不是时间戳排序的队列。