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

Anylogic - Block and unblock based on condition

是否可以在 Hold 阻止条件中使用简单的 true/false 语句来在条件为真时阻止代理,在条件为假时解除阻止?如果不行,还有别的办法吗?

如果条件 resourcePool1.idle()==0 为真,我需要 Hold 块来阻止,否则我需要它解除阻止。我尝试了几种不同的语句,但其中 none 行得通。

保持块可能不会动态检查您的条件,但只会在开始时检查一次。您有责任将病情发生变化的情况告诉它。 (否则它需要不断检查,这是糟糕的设计并且计算量大)。

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

鉴于你的情况与资源有关,我推荐如下:

在占用和释放字段中,写入以下内容:

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

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

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