微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Anylogic - 根据条件阻止和解除阻止

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

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

解决方法

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

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

,

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

enter image description here

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。