Anylogic - 根据条件阻止和解除阻止

时间:2021-03-04 18:50:04

标签: java simulation anylogic

是否可以在 Hold 块的阻塞条件中使用简单的真/假语句来在条件为真时阻塞代理并在条件为假时解除阻塞?如果没有,还有其他方法吗?

如果条件 resourcePool1.idle()==0 为真,我需要 Hold 块来阻塞,否则我需要它来解除阻塞。我尝试了几种不同的语句,但都没有奏效。

2 个答案:

答案 0 :(得分:0)

保持块可能不会动态检查您的条件,而只会在开始时检查一次。您有责任告诉它病情发生了变化。 (否则它需要不断检查,这是糟糕的设计和计算成本高昂)。

因此,请重新设计您的模型,以便在出现这种情况时明确更新 Hold 模块(更改为“手动”模式)。在您的情况下,每当资源空闲时,它应该检查是否所有资源都空闲,然后手动更改 Hold 块。

答案 1 :(得分:0)

由于您的病情与资源有关,我建议您进行以下操作:

enter image description here

在 on seize 和 on release 字段中,写下以下内容:

if(resourcePool.idle() == 0)
    hold.setBlocked(true);
else
    hold.setBlocked(false);

请注意,由于您位于资源池本身中,因此您可以将其名称替换为 self

通过这种方式,您可以优化模型,因为只有在其结果可能发生变化时才评估块条件,即当资源被占用或释放时。其他时间无需检查条件。

相关问题