DSF*_*DSF 2 java simulation scheduling timer clock
我正在为我的离散事件模拟开发一个时钟类.我已经在PriorityQueue中保存了事件,因此根据哪个事件具有最近的事件时间进行排序.然而,有一件事我无法理解.在我读过的关于离散事件模拟的论文中,明确指出时钟从事件跳转到事件,因此没有必要有一个"滴答"的时钟.
但是如何工作,我有一个EventScheduler类,它将事件保存在PriorityQueue中.所以在确定下一个事件的时间之后,我可以在Clock中调用一个"setTime"方法,EventScheduler会在下一个事件的给定时间内调用它吗?但那么它永远不会真正作为一个时钟运行它只会继续跳到下一个事件?
我认为时钟运行(滴答),然后它知道EventScheduler何时发生事件,当时钟到达那个时间时,它处理事件,更新系统状态并可能生成输出事件.
很抱歉有点不清楚,但我只是对时钟如何工作的任何提示感兴趣,它是否记录,然后只在事件发生时"做"事情或者只是从事件跳到事件?
你也建议我可以使用java中的任何内置功能吗?例如Timer类
这个想法是没有进入你的事件队列就没有任何事情发生.想一想:在"滴答"的时候,你的时钟是做什么的,但是没有事件?没有.那么为什么要处理这些时间呢?
所以是的,你只是从队列中的事件转到事件.实际上,离散事件中的"时钟"几乎就是你构建的:一个按"按时间顺序"顺序排序的优先级队列,以及一些"现在"的意思,即队列中的位置.
如果你弹出头部队列,那么"now"就可以成为队列的头部了,你就完成了.通常,更复杂的模型可能具有其他功能,例如能够检测何时尝试在"现在"之前安排事件 - 例如,这表示模型响应太慢:在现实世界中,它永远都会"迟到"并赶上整个模拟过程中发生的事情.
如果您有一个需要每秒更新的模型,那么您必须将这些事件放入队列中,否则它们不会发生.通常,对于适合离散事件仿真模型的问题(在我的职业生涯中,这是基于物理的建模),这不是问题:当没有事件时,您的模型通常"空闲",并且可以计算其状态在任何特定时间,当没有事件改变他们的状态.
如果您的模型不是这样,那么离散事件建模可能并不适合您的问题域.