2

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

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

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

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

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

4

2 回答 2

1

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

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

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

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

于 2013-02-17T18:03:43.310 回答
1

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

在离散事件仿真中,事件是系统状态发生变化的时间点。当事件发生时,您会根据状态确定下一步该做什么。加入客户行列是一件大事,但获得服务的资格也是如此。一旦客户有资格获得服务,该事件的逻辑必须检查服务是否可能。如果是这样,请为服务结束时间安排一个新事件。如果存在资源限制,则不会安排任何内容,并且该客户处于等待状态。但是,在未来的某个时间点,所需的资源将变得可用。这也是一个事件,该事件的逻辑应该检查是否有客户由于缺乏资源而被搁置。如果没有,则无需安排任何事情,但如果是,您现在可以为客户安排实际服务。

有关离散事件模拟如何工作的更全面的解释,请查看这篇介绍性教程论文

于 2013-07-05T02:55:59.497 回答