【问题标题】:how to write data from Database Log to an output in anylogic?如何将数据库日志中的数据写入anylogic中的输出?
【发布时间】:2019-09-15 23:13:18
【问题描述】:

我正在运行一个模拟,我想知道代理在延迟块中花费的总时间。在流程图_stats_time_in_state_log 下的数据集日志中运行单个模拟时,我可以访问数据

https://imgur.com/R5DG51a

但是,我想将块 5(喷涂)中的数据写入输出,以便在运行多个模拟时存储数据。

https://imgur.com/MwPBvO8

我猜测值引用应该类似于下面的表达式。但是它不起作用,所以如果有人可以帮助我或提出获取数据的替代解决方案,我会非常感激。

流程图_stats_time_in_state_log.total_seconds.spraying;

顺便说一句。时间测量不适用于这种情况,因为我需要知道在 12 小时轮班后在一个街区中花费的总时间。通过时间测量,当模拟结束时,我没有从仍然在块中的代理获得数据。

【问题讨论】:

  • 您是在寻找每个代理的时间(即每个代理的最小/平均/最大),还是只是该块处理的总时间?我不会为此使用数据库,但如果您能澄清您感兴趣的指标,我相信社区可以为您提供一些很好的建议。
  • 感谢您的回复。我正在寻找所有代理在街区内花费的总时间。所以所有处理时间的总和,包括那些在 12 小时后模拟结束时留在块中的时间

标签: anylogic


【解决方案1】:

基于对所有处理时间求和的目标,您可以用数学方法求解。设置输出等于 block.statsUtilization.mean() * capacity * time() 在模拟结束时计算。

例如,如果您的容量为 1,运行时间为 100 分钟,那么如果您的利用率为 50%;这意味着你在街区里有一个特工 50 分钟。利用率=繁忙时间/总时间。由于这种关系,我们可以计算出代理在区块中的实际停留时间。

【讨论】:

  • 非常感谢您的帮助!
【解决方案2】:

另一种选择是有一个变量来跟踪块中的时间,当代理离开时递增。在运行结束时,您需要调用一个函数来迭代仍然在块中的代理以添加它们的时间。 AnyLogic 允许您非常轻松地遍历队列、延迟或任何包含代理的内容:

for( MyAgent agent : delayBlockName ){
   variable += time() - agent.enterBlockTime;
}

要实施此解决方案,您需要创建自己的代理(将其命名为比 MyAgent 更好的名称),并在代理进入块时使用变量。然后,您需要标记每个代理进入区块的时间。

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多