【发布时间】:2021-09-05 17:40:15
【问题描述】:
我有一个名为“Docks”的资源,它的容量是 14,我想计算所有 14 个码头都忙的总时间?有什么办法吗,请帮忙。
【问题讨论】:
标签: simulation anylogic
我有一个名为“Docks”的资源,它的容量是 14,我想计算所有 14 个码头都忙的总时间?有什么办法吗,请帮忙。
【问题讨论】:
标签: simulation anylogic
我将提出一个可能不是最有效的解决方案。但是,它至少会引导您朝着正确的方向前进。一种方法是使用以下代码创建一个事件,注意 timeBusy 将是 double 类型的变量:
if( resourcePool.busy() == resourcePool.size() ) {
timeBusy++;
}
使事件类型循环。如果你让它每秒循环一次,timeBusy 变量会给你所有资源都忙的时间,以秒为单位。这种方法的问题是:
或者,更高级的解决方案是使用资源池的 On Seize 和 On Release 字段,您可以在其中添加代码来检查每次占用或释放资源时的繁忙单元数,并且不是每个循环时间。此方法的主要思想是使用三个变量:startTime 和 totalTime,类型为 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% 的准确性。
如果你的模型比较简单,我个人会选择第一种方法。
【讨论】: