时间独立离散事件模拟

时间:2011-02-04 22:01:41

标签: simulation event-driven

我正在尝试设计离散事件模拟,其中事件的执行与时间无关。选择接下来会发生什么事件仅取决于模型的条件(在我的情况下,一个人),并且它们一次只执行一次。

我在那里找到了几个设计:

  • 事件安排 - 保留事件队列,并在每次事件执行期间安排新事件或取消旧事件。

  • 活动扫描 - 在每个周期中,迭代所有事件,如果人的当前状态满足事件的执行条件,则执行该事件。

  • 事件图表 - 有一个事件图表,每个边缘代表过渡的条件。

我对每种方法的考虑如下:

  • 事件安排 - 应该添加什么事件的逻辑分布在各个事件中,这使得很难跟踪。此外,队列会发生很大变化,并且因为它不是基于时间的,所以每次要进行更改以查找要删除的事件时,您必须遍历整个队列(例如,如果您需要在前面有两个事件A的时候删除事件B.)

  • 活动扫描 - 它的性能可能很差,特别是如果它必须遍历许多事件以找到每个周期中要执行的下一个事件。

  • 事件图表 - 如果图表非常大,初始化图表并设置所有边缘可能会变得很麻烦。

我希望您对哪种方法最适合您的意见,如果是,我可以通过哪些方式解决所述的问题。也许完全不同的设计可能是合适的。

3 个答案:

答案 0 :(得分:2)

您可以在http://www.simjs.com尝试Javascript离散事件模拟库。它支持事件调度和离散时间流。您可以为将来安排“事件”或让他们等待某个谓词,并注册回调函数,这些函数将在(模拟)时间到达截止日期或谓词满足时调用。

答案 1 :(得分:0)

你的问题对我来说不是很清楚,但我认为你可以使用离散事件模拟系统并忽略时间组件。您可以“立即”安排所有活动,并且它应该独立于时域工作。我正在使用SimPy http://simpy.sourceforge.net/和IMO它有能力。

答案 2 :(得分:0)

我建议调查Petri网。它们广泛用于业务流程建模,并且不需要时间。如果需要,有色Petri网也可以代表时间。随机Petri网也可以解决随机性和时间问题。 这是对它们是什么以及它们能做什么的明确介绍。

http://www2.ing.unipi.it/~a009435/issw/extra/murata.pdf

他们有不同语言的大量软件包,您可以使用他们的代数方法开发自己的软件包,以便快速实现。