【问题标题】:How to log "model time elapsed" in Anylogic?如何在 Anylogic 中记录“模型时间已过”?
【发布时间】:2022-02-07 23:37:55
【问题描述】:

如何记录与模型运行时间相关的时间量,以便当我快进模型运行时,我打印的时间反映了这一点? 我试过了:

Timestamp timestamp = new Timestamp(System.currentTimeMillis());

还有:

time(MINUTE);

虽然第一个捕获系统时间,但当我提高运行速度时,第二个也不会按比例增加。 我假设,当我提高模型的运行速度时,模型会有效地开始模拟未来! 例如,当模型时间单位为分钟,我将模型运行速度提高到 50 倍,这意味着在现实世界中经过了 1 分钟,在模型世界中经过了 50 分钟。

【问题讨论】:

  • 您的意思是记录自模型启动以来经过的实际时间?你为什么需要那个,永远?如果您愿意,您可以在运行时在开发人员面板中直观地看到它。但是你为什么要把它作为你模型的一部分呢?
  • 我不需要真实世界的时间,我需要在模型世界中流逝的时间

标签: anylogic


【解决方案1】:

只需调用traceln(time()) 即可以模型时间单位获取经过的模型时间。

要以分钟等特定时间单位获取它,请致电traceln(time(MINUTE))

所做的是从您的计算机时钟调用真实世界时间,100% 独立于模型时间

要了解虚拟模型时间和真实世界时间之间的差异,请参阅help

【讨论】:

  • 这是我尝试过的,但是当我将模拟速度提高 25 或 50 倍时,我没有看到 traceln(time()) 反映这一点。如果我将模型运行速度加快 50 倍(我的模型时间单位为分钟),当实际经过的时间为 1 分钟时,我的日志不应该将经过的时间反映为 50 分钟吗?
  • 不,它是这样工作的:如果您将时间单位建模为分钟,则以 x1 运行它意味着每经过一个真实的 SECOND 1 虚拟 MINUTE。如果您将速度提高 50 倍,那么每真正的 SECOND,您将看到 50 个虚拟 MINUTES 通行证。这 100% 有效,我认为你误解了如果以 x1 运行,它会在每个真实 MINUTE 传递 1 个虚拟 MINUTE。事实并非如此!
  • 也许我将它记录在错误的块中,我将它记录在“源”块中。如果我想查看经过的时间,应该在哪里添加 tracel() 命令?
  • 是的,这是错误的。始终知道何时您的代码被执行。在您的情况下,这取决于您使用的 Source 块中的哪个代码字段。为什么不用代码创建一个按钮并在运行时单击它?你会看到它工作。然后,了解块中不同代码部分的实际作用和执行时间。 AnyLogic 帮助涵盖了很多内容。然后,请改进未来的问题以显示更多详细信息,请参阅benjamin-schumann.com/blog/2021/4/1/…
  • 最后,请对回复进行投票以表明它是正确的:) 见stackoverflow.com/help/why-vote
猜你喜欢
  • 2022-06-10
  • 1970-01-01
  • 2019-04-19
  • 2021-11-17
  • 2022-11-02
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2021-12-09
相关资源
最近更新 更多