【问题标题】:How to measure time for which resource is fully occupied?如何测量完全占用资源的时间?
【发布时间】:2021-09-05 17:40:15
【问题描述】:

我有一个名为“Docks”的资源,它的容量是 14,我想计算所有 14 个码头都忙的总时间?有什么办法吗,请帮忙。

【问题讨论】:

    标签: simulation anylogic


    【解决方案1】:

    我将提出一个可能不是最有效的解决方案。但是,它至少会引导您朝着正确的方向前进。一种方法是使用以下代码创建一个事件,注意 timeBusy 将是 double 类型的变量:

    if( resourcePool.busy() == resourcePool.size() ) {
    
        timeBusy++;
    }
    

    使事件类型循环。如果你让它每秒循环一次,timeBusy 变量会给你所有资源都忙的时间,以秒为单位。这种方法的问题是:

    1. 循环时间越短,模型就越慢(尽管这行代码可能不是问题)
    2. 循环时间越大,测量时间的精度越低。

    或者,更高级的解决方案是使用资源池的 On SeizeOn Release 字段,您可以在其中添加代码来检查每次占用或释放资源时的繁忙单元数,并且不是每个循环时间。此方法的主要思想是使用三个变量:startTimetotalTime,类型为 double 和 start,类型为布尔值,初始值为 false。所以On Seize 你会写:

    if( resourcePool.busy() == resourcePool.size() && !start ) {
    
        startTime = time();
        start = true;
    }
    

    还有On Release:

    if( resourcePool.busy() == resourcePool.size() - 1 && start ) {
    
        totalTime += time() - startTime;
        start = false;
    }
    

    您可能需要验证结果,但这至少应该让您朝着正确的方向前进。

    这种方法的唯一缺点是只有在资源被占用或释放时才会更新结果。因此,例如,如果您的所有资源都被占用了很长时间,您可能看不到变量的任何变化。

    根据您的模型,您可以判断哪种方法更适合您。

    最后一点是,您可以选择使用混合方法来确保实时更新和 100% 的准确性。

    如果你的模型比较简单,我个人会选择第一种方法。

    【讨论】:

      猜你喜欢
      • 2021-08-16
      • 2015-09-13
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多