如何将数据库日志中的数据写入任何逻辑的输出?



我正在运行一个类比,我会知道代理在延迟块上花费的总时间。在数据集日志中运行单个模拟时,我可以在flowchart_stats_time_in_state_log下访问数据

https://i.stack.imgur.com/BAn1r.jpg

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

https://i.stack.imgur.com/4pXd6.jpg

我猜值 reffence 应该看起来像下面的表达式。但是它不起作用,因此如果有人可以帮助我或建议获取数据的替代解决方案,我会非常感激。

flowchart_stats_time_in_state_log.总秒数.喷涂;

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

基于对所有处理时间求和的目标,你可以用数学方法解决它。 将输出设置为等于 block.statsT利用率.mean() * 容量 * time() 在模拟结束时计算。

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

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

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

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

相关内容

最新更新