如何在特定时间后停止模拟运行 NOT tick

问题描述

全部。

无论我的模型做什么,我都想在运行特定时间(实际时钟时间)后停止模拟。例如,在 5 或 10 或 15 分钟后停止。我尝试在 5 分钟后使用 RunEnvironment.getInstance()endAt(double tick) 停止它,如下所示:

RunEnvironment.getInstance()endAt(5000)

它在 4 分 44 秒处停止。我遇到了 this answer,但这似乎不是我想要的(我可能错了)。有没有更好的方法来实现这一目标?我对 RePast 非常陌生,对 tick 概念有些困惑。

谢谢。

解决方法

这是最近一篇论文的引述。可能有帮助的刻度概念。

Repast 模拟中的事件由离散事件调度程序驱动。这些事件本身被安排在特定的滴答声中发生。刻度不一定代表时钟时间,而是其相关事件的优先级。刻度决定了事件相对于彼此发生的顺序。例如,如果事件 A 安排在第 3 个刻度,事件 B 在第 6 个刻度,则事件 A 将在事件 B 之前发生。假设在中间的刻度没有安排任何事件,A 将紧跟在 B 之后。 B 没有固有的概念在 3 个滴答的持续时间后发生。当然,通过模型实现,刻度可以并且经常被赋予一些时间意义。例如,流量模拟可能会将流量向前移动相当于每个滴答 30 秒的时间。

如果您想在经过一定时间(例如 5 分钟)后安排停止,您可以安排一个操作,在第一次调用时获取时间,然后检查是否经过了正确的时间量。此时,您可以调用 RunEnvironment.getInstance().endRun()。如何进行时间算术是一个 Java 问题,因此如果您在 google 上搜索“Java time elapsed”或类似的内容,您应该会得到答案。

至于安排操作,您需要创建一个实现 IAction (https://repast.github.io/docs/api/repast_simphony/repast/simphony/engine/schedule/IAction.html) 的类,并在任何合适的时间间隔安排它。