如何衡量资源被完全占用的时间?

问题描述

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

解决方法

我将提出一种可能不是最有效的解决方案。但是,它至少会引导您朝着正确的方向前进。一种方法是使用以下代码创建事件,注意 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% 的准确性。

如果您的模型相对简单,我个人会选择第一种方法。