我正在尝试设计一个离散事件模拟,其中事件的执行与时间无关。选择接下来发生什么事件仅取决于模型的条件(在我的例子中是一个人),并且一次执行一个。
我在那里找到了几个设计:
事件调度 - 保留事件队列,在每个事件执行期间,安排新事件或取消旧事件。
活动扫描——在每个周期中,所有事件都被迭代,如果人的当前状态满足事件的执行条件,则执行该事件。
事件图 - 有一个事件图,并让每条边代表转换的条件。
我对每种方法的考虑如下:
事件调度 - 应该添加什么事件的逻辑分布在事件中,因此很难跟踪。此外,队列会发生很大变化,并且由于它不是基于时间的,因此每次要进行更改以查找要删除的事件时,您都必须遍历整个队列(例如,如果您想要在两个事件 A 之前删除事件 B)。
活动扫描 - 它的性能可能很差,特别是如果它必须遍历许多事件以在每个周期中找到下一个要执行的事件。
事件图 - 如果图非常大,初始化它并设置所有边可能会变得很麻烦。
我想请您就哪种方法可能最合适提出意见,如果合适,我可以通过哪些方式解决上述考虑。也许完全不同的设计可能是合适的。