2

我正在为我的离散事件模拟开发一个时钟类。我已经在 PriorityQueue 中举行了一些活动,因此根据哪个活动具有最近的活动时间进行排序。但是,有一件事我无法理解。在我读过的关于离散事件模拟的论文中,明确指出时钟从一个事件跳到另一个事件,因此没有必要有一个“滴答”的时钟。

但是这将如何工作,我有一个 EventScheduler 类,它将事件保存在 PriorityQueue 中。因此,在确定下一个事件发生的时间之后,我是否可以在时钟中调用一个“setTime”方法,EventScheduler 在下一个事件的给定时间调用该方法?但是,它永远不会真正像时钟一样运行,它只会一直跳到下一个事件?

我在想时钟运行(滴答声),然后它知道 EventScheduler 何时会发生事件,当时钟到达该时间时,它会处理事件,更新系统状态并可能生成输出事件。

抱歉有点不清楚,但我只是对有关时钟如何工作的任何提示感兴趣,它是否会滴答作响,然后仅在事件发生时“做”事情,或者它只是从一个事件跳到另一个事件?

还有你建议我可以使用的java中的任何内置功能吗?例如定时器类

4

2 回答 2

5

这个想法是,如果不进入您的事件队列,什么都不会发生。想一想:在“滴答”的时候,你的时钟在做什么,但没有事件?没有什么。那么,为什么要处理这些时间呢?

所以是的,您只需在队列中从一个事件到另一个事件。确实,离散事件中的“时钟”几乎正是您所构建的:按“时间”顺序排序的优先级队列和某种“现在”感,即队列中的位置。

如果你从头队列中弹出,那么“现在”可能只是队列的头,你就完成了。通常,更复杂的模型可能具有更多特征,例如能够检测何时尝试在“现在”之前安排事件 - 例如,这表明模型响应太慢:在现实世界中,它总是会“迟到”并赶上整个模拟中发生的事情。

例如,如果您有一个需要每秒更新的模型,那么您必须将这些事件放入队列中,否则它们不会发生。通常,对于非常适合离散事件仿真模型的问题(在我的职业生涯中,这是基于物理的建模),这不是问题:您的模型通常在没有事件时“空闲”,并且可以计算它们的状态在未来任何特定时间,当没有事件改变其状态时。

如果您的模型不是这样,那么离散事件建模可能并不适合您的问题域。

于 2012-11-01T23:44:29.393 回答
1

java.util.concurrent 包(从 Java 5 开始可用)有助于构建可以从多核系统和 DES 应用程序中受益的并发应用程序。这是为此类应用程序设计的项目列表。 http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html

于 2015-06-24T20:30:52.517 回答