如何将数据库日志中的数据写入anylogic中的输出?

时间:2019-04-26 12:24:45

标签: anylogic

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

https://imgur.com/R5DG51a

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

https://imgur.com/MwPBvO8

我猜测值引用应该类似于以下表达式。但是它无法正常工作,因此如果有人可以帮助我或建议一种替代方法来获取数据,我将不胜感激。

flowchart_stats_time_in_state_log.total_seconds.spraying;

顺便说一句。时间测量不适用于这种情况,因为我需要知道12个小时轮班后在一个块中花费的总时间。随着时间的推移,我无法从模拟结束时仍在该块中的代理获取数据。

2 个答案:

答案 0 :(得分:0)

基于总结所有处理时间的目标,您可以用数学方法解决它。将输出设置为等于模拟端计算出的block.statsUtilization.mean()*容量* time()。

例如,如果容量为1,运行时间为100分钟,则利用率为50%;否则,为50%。这意味着您有50分钟的封锁时间。利用率=忙碌时间/总时间。由于这种关系,我们可以计算代理实际在该块中的时间。

答案 1 :(得分:0)

另一种选择是使用一个变量来跟踪块中的时间,并在代理离开时增加。运行结束时,您需要调用一个函数以迭代仍在块中的代理以增加其时间。 AnyLogic使您可以轻松地循环访问队列,延迟或任何保留代理的内容:

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

要实现此解决方案,您需要创建一个自己的代理(命名比MyAgent更好),并带有一个变量,以指示代理何时进入该块。然后,您需要标记每个代理进入该块的时间。