在 AnyLogic 中测量批处理在系统中花费的时间

Measuring the time spent by batches in a system in AnyLogic

在一个批次被取消批处理的过程中,然后在保持批次大小的同时再次批处理几次,您如何衡量该批次在某个流程图中花费的时间。使用“timeMeasureStart/End”是行不通的,因为当代理被取消批处理和批处理时,就像从头开始创建一个新代理一样。 还尝试为批处理代理类型添加开始和结束时间变量不起作用,因为在取消批处理然后再次批处理后,变量将重新初始化。为了证明这一点,我在下面添加了四张图片。

Flow Chart

Batch Properties

Batch1 Properties

Outcome

这里是模型下载linkhttps://wetransfer.com/downloads/a7550e58151c3ee38b16ceb27281c48220200713170914/2e6da6

只需使用您使用的 BatchUnbatch 元素内的代码块。

在你的代理中创建一个变量batched/unbatched,比如totalTime。也是一个变量,用于测量它在操作中花费的个人时间,如 currentTimeBatching

然后,根据需要单独添加它们,例如:

(具体取决于您的模型设置,这是执行此操作的一般方法)

我终于找到了解决问题的方法。由于每次取消批次时,变量都会重新初始化为 0,因此解决方案是将开始时间继承给未批次的代理。因此在下图中,批处理和元素代理类型都有一个名为“start”的变量。批处理类型还有一个名为“end”的变量。

Process Image

因此,需要以下代码:

  • 退出时阻止“批处理”:batch.start = time();
  • 退出时阻止“取消批处理”:agent.start = batch.start; (元素从批次开始继承)
  • 添加时阻止“batch1”:batch.start = agent.start; (与上一个块不同,该批次继承了元素的开始时间)
  • 退出时阻止“batch1”:batch.end = time();

这样我们就可以在流程中获得批处理的开始时间和结束时间,这样我们就可以计算该批处理在系统中的持续时间,而无需在每次取消批处理时都重置其变量。