【问题标题】:Clock in Discrete Event Simulation离散事件模拟中的时钟
【发布时间】:2012-10-22 15:13:52
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java timer scheduling simulation clock


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 非常感谢马特。这确实澄清了很多事情。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 2011-04-29
      • 2017-05-31
      • 1970-01-01
      • 2015-02-14
      • 2019-09-07
      • 2014-04-12
      • 1970-01-01
      • 2017-12-30
      相关资源
      最近更新 更多