Algorithm 在离散事件模拟中何时放弃事件

Algorithm 在离散事件模拟中何时放弃事件,algorithm,events,simulation,Algorithm,Events,Simulation,在大多数DES示例中,我看到一个事件触发状态更改,并可能在将来安排一些新事件。然而,如果我模拟台球游戏,这并不是全部 在这种情况下,感兴趣的事件是球之间以及与座垫之间的射击和碰撞。状态由每个球的位置和速度组成 碰撞或放炮后,我将首先重新计算一个新的状态,并从那里计算所有可能的未来(第一次)碰撞。奇怪的是,我将不得不放弃以前计划的所有事件,因为这些事件描述的是只有在状态改变之前才可能发生的碰撞 因此,似乎有两种方法可以实现DES 一种是,根据状态计算未来事件,并且随着每个状态的改变(如台球示例中

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

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

碰撞或放炮后,我将首先重新计算一个新的状态,并从那里计算所有可能的未来(第一次)碰撞。奇怪的是,我将不得不放弃以前计划的所有事件,因为这些事件描述的是只有在状态改变之前才可能发生的碰撞

因此,似乎有两种方法可以实现DES

  • 一种是,根据状态计算未来事件,并且随着每个状态的改变(如台球示例中),放弃过去安排的所有事件,以及
  • 另一种情况是,每个事件都会导致状态更改,并且可能会安排新事件,但旧事件永远不会被丢弃(正如我所看到的大多数示例中所示)
这令人难以置信

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

我想知道我的Billard示例是否与经典的DES不同。在任何情况下,我都在寻找对此类问题进行推理的正确方法,即

  • 我如何知道哪些事件将被丢弃?
  • 我如何知道在安排未来事件时要考虑哪些状态?
  • 是否有一种可能的“安全”或“万无一失”的方法来计算未来事件(以性能为代价)
一个显而易见的答案是“这一切都取决于你的问题领域”。如果能提供更准确的答案或参考文献,我们将不胜感激

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

一旦你做到这一点,你就需要为每个球添加旋转和旋转轴,因为正确使用旋转是职业选手和业余选手的区别

我将不得不放弃以前安排的所有活动

是的,那是真的,所以根本不用费心安排。见下文

因此,似乎有两种方法来进行DES(都涉及到 (活动日程安排)

事实上,还有第三条路。只需搜索问题空间以确定未来第一个事件的时间,然后跳到该时间。没有必要安排活动。你只关心最先发生的一件事

所有的球都需要考虑

是的,这是真的。首先考虑其中一个球并确定下一次碰撞的时间。这段时间为其他球的移动距离设定了上限。例如,假设第一个球将在0.1秒后碰撞。然后第二个球的问题是,“第二个球有可能在0.1秒内击中任何东西吗?”如果没有,那么移动到第三个球。如果是这样,则将时间限制减少到第二个球碰撞所需的时间,然后继续移动到第三个球

一个显而易见的答案是“这取决于你的问题领域”


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

您的示例与其他DES模型不唯一或不同

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

这些类型的事件调度、事件取消和参数化,以便您能够识别调度/取消应用于哪些实体,都可以用Lee Schruben创建的名为“事件图”的符号来描述。见“Schruben,李,1983年”。使用事件图进行仿真建模。ACM的通信。26:957-963'获取原稿,或在线免费获取

您可能还想看看这篇题为“”的论文,它出现在2005年冬季模拟会议上