何时丢弃离散事件模拟中的事件

时间:2014-05-20 07:52:10

标签: algorithm events simulation

在DES的大多数示例中,我看到一个事件触发状态更改,并可能在将来调度一些新事件。但是,如果我模拟一个台球游戏,这不是全部故事。

在这种情况下,感兴趣的事件是球和彼此之间以及与垫子的碰撞。状态由每个球的位置和速度组成。

在碰撞或射击之后,我将首先重新计算一个新状态,然后我会计算所有可能的未来(第一次)碰撞。奇怪的是,我将必须丢弃之前安排的所有事件,因为这些事件描述的冲突只有在状态改变之前才可能

所以似乎有两种做DES的方法。

  • 其中,未来事件是从State计算的,过去安排的所有事件都会随着每次状态更改而丢弃(如Billiard示例中所示),并且
  • 另一个,其中每个事件导致状态更改并可能调度新事件,但旧事件永远不会被丢弃(如我见过的大多数示例)。

这很难相信。

Billiard示例还具有令人恼火的属性,即未来事件是从系统的全局状态计算出来的。所有球都需要考虑,而不仅仅是参与碰撞或击球的球。

我想知道我的Billard示例是否与经典DES不同。无论如何,我正在寻找推理关于此类问题的正确方法,即

  • 如何知道要丢弃哪些事件?
  • 我如何知道在安排未来事件时要考虑的国家
  • 有可能以“安全”或“万无一失”的方式计算未来事件(以牺牲性能为代价)?

一个明显的答案是“这一切都取决于你的问题领域”。一个更精确的答案或指向文学的指针将非常感激

2 个答案:

答案 0 :(得分:2)

  

状态由每个球的位置和速度组成。

一旦你开始工作,你就需要为每个球添加旋转和旋转轴,因为正确使用旋转是专业人士与业余爱好者的区别。

  

我将不得不丢弃之前安排的所有活动

是的,这是真的,所以根本不打算安排它们。见下文。

  

所以似乎有两种方法可以做DES (两者都涉及到   事件安排)

实际上,还有第三种方式。只需搜索问题空间以确定第一个 future事件的时间,然后跳转到该时间。无需安排活动。您只关心将首先发生的一个事件。

  

所有球都需要考虑

是的,这是真的。首先考虑其中一个球并确定其下一次碰撞的时间。然后那个时间对其他球可以移动的距离设置上限。例如,假设第一个球在0.1秒后会发生碰撞。那么第二球的问题是,"第二球是否有可能在0.1秒内击中任何东西?"如果没有,那么继续前进到第三球。如果是这样,那么将时间限制减少到第二个球碰撞所需的时间,然后转到第三个球。

  

一个明显的答案是"这一切都取决于你的问题领域"

那是真的。我的评论仅适用于您的台球模拟示例。对于其他问题域,适用不同的规则。

答案 1 :(得分:2)

您的示例与其他DES模型不同,也不同。

您省略了第三个选项,即当某些事件发生时,将取消特定的其他事件。例如,在流行病模型中,您可以安排感染事件。每个感染事件随后安排1)患者的关键时间,超过该关键时间死亡变得不可避免,具有一定的概率和一些延迟,对应于患者的人口统计学,该人口统计的死亡率和疾病的进展速度;或2)患者的康复。如果医疗干预根据某种分类策略排队,则治疗可能会或可能不会在关键时间之前发生。如果没有,则计划死亡,否则取消关键时间事件并安排恢复事件。

这些类型的事件调度,事件取消和参数化,以便您可以识别调度/取消适用的实体都可以通过称为"事件图表的符号来描述,"由Lee Schruben创建。参见' Schruben,Lee 1983.使用事件图进行模拟建模。 ACM的通讯。 26:957-963'对于原始论文,或查看可在线免费获得的tutorial from the 1996 Winter Simulation Conference

您可能还想看一下2005年冬季模拟大会上出现的名为" Simple Movement and Detection in Discrete Event Simulation"的论文。