【问题标题】:Measuring the time spent by batches in a system in AnyLogic在 AnyLogic 中测量系统中批次所花费的时间
【发布时间】:2020-07-19 15:31:03
【问题描述】:

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

Flow Chart

Batch Properties

Batch1 Properties

Outcome

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

【问题讨论】:

    标签: anylogic


    【解决方案1】:

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

    在您的代理中创建一个变量进行批处理/取消批处理,例如totalTime。也是一个变量,衡量它在操作中花费的个人时间,例如currentTimeBatching

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

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

    【讨论】:

    • 谢谢本。但是问题一旦取消批处理并再次批处理,代理(批处理)变量就会被重置。所以“batch.batchBegins”值会在批处理取消批处理后变为 0。还是我做错了什么导致了这个?
    • 有一个设置用于禁用使批次永久化。因此,取消批处理会返回已批处理的原始代理。确保为这些使用自定义代理类型,他们应该记住:)
    • 我所做的正是以下内容: 1. 处理:源 > 批处理 > 延迟 > 取消批处理 > 延迟 > 批处理 > 接收器(永久批处理未勾选) 2. 代理类型:X 与“开始”和"end" 作为代理变量 3. 在第一批退出时 "batch.start = time()" 和第二批块退出时 "batch.end = time()" 另外 4. 我在 main 中添加了变量跟踪值 5. start = 0.663; end = 1.532,但 agent.end - agent.start = end 之间的差异,因此忽略了起始值。我知道起始值,因为我在 main 中添加了一个名为 start 的变量,它采用相同的值
    • 不再关注,您能否重新表述您的原始问题并链接到一些屏幕截图?显示在哪里,出了什么问题,你已经尝试过什么......否则太混乱了:)
    • 抱歉让您感到困惑。我用图片更新了问题,希望问题现在更清楚了。
    【解决方案2】:

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

    Process Image

    因此需要以下代码:

    • 退出时阻止“batch”:batch.start = time();
    • 在退出时阻止“unbatch”:agent.start = batch.start; (元素从批次继承开始)
    • 在添加时阻止“batch1”:batch.start = agent.start; (与前一个块不同,批次是从元素继承开始时间)
    • 退出时阻止“batch1”:batch.end = time();

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-03
      • 2018-12-22
      • 2021-11-08
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多