在 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
只需使用您使用的 Batch
和 Unbatch
元素内的代码块。
在你的代理中创建一个变量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();
这样我们就可以在流程中获得批处理的开始时间和结束时间,这样我们就可以计算该批处理在系统中的持续时间,而无需在每次取消批处理时都重置其变量。
在一个批次被取消批处理的过程中,然后在保持批次大小的同时再次批处理几次,您如何衡量该批次在某个流程图中花费的时间。使用“timeMeasureStart/End”是行不通的,因为当代理被取消批处理和批处理时,就像从头开始创建一个新代理一样。 还尝试为批处理代理类型添加开始和结束时间变量不起作用,因为在取消批处理然后再次批处理后,变量将重新初始化。为了证明这一点,我在下面添加了四张图片。
Flow Chart
Batch Properties
Batch1 Properties
Outcome
这里是模型下载linkhttps://wetransfer.com/downloads/a7550e58151c3ee38b16ceb27281c48220200713170914/2e6da6
只需使用您使用的 Batch
和 Unbatch
元素内的代码块。
在你的代理中创建一个变量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();
这样我们就可以在流程中获得批处理的开始时间和结束时间,这样我们就可以计算该批处理在系统中的持续时间,而无需在每次取消批处理时都重置其变量。