我正在模拟,我想知道代理在延迟块中花费的总时间。在流程图_stats_time_in_state_log下的数据集日志中运行单个模拟时,我可以访问数据
但是,我想将块5(喷涂)中的数据写入输出,以便在运行多个模拟时存储数据。
我猜测值引用应该类似于以下表达式。但是它无法正常工作,因此如果有人可以帮助我或建议一种替代方法来获取数据,我将不胜感激。
flowchart_stats_time_in_state_log.total_seconds.spraying;
顺便说一句。时间测量不适用于这种情况,因为我需要知道12个小时轮班后在一个块中花费的总时间。随着时间的推移,我无法从模拟结束时仍在该块中的代理获取数据。
答案 0 :(得分:0)
基于总结所有处理时间的目标,您可以用数学方法解决它。将输出设置为等于模拟端计算出的block.statsUtilization.mean()*容量* time()。
例如,如果容量为1,运行时间为100分钟,则利用率为50%;否则,为50%。这意味着您有50分钟的封锁时间。利用率=忙碌时间/总时间。由于这种关系,我们可以计算代理实际在该块中的时间。
答案 1 :(得分:0)
另一种选择是使用一个变量来跟踪块中的时间,并在代理离开时增加。运行结束时,您需要调用一个函数以迭代仍在块中的代理以增加其时间。 AnyLogic使您可以轻松地循环访问队列,延迟或任何保留代理的内容:
for( MyAgent agent : delayBlockName ){
variable += time() - agent.enterBlockTime;
}
要实现此解决方案,您需要创建一个自己的代理(命名比MyAgent更好),并带有一个变量,以指示代理何时进入该块。然后,您需要标记每个代理进入该块的时间。