首页 > 解决方案 > 检查占用块中的代理

问题描述

我想知道如何通过检查队列(位于 Seize Block 中的 Main 中)是否包含具有特定特征的患者(p_contaminated,这里的布尔参数应该按顺序为真)来触发条件状态图转换(位于 agent,Patient 中)用于触发的过渡)。即,如果队列包含一个 p_contaminated = true 的 Patient,则该语句应该产生 true 以触发转换。

显示主图表和患者图表的图片。强调(用红色)提到的 Seize Block 和想要触发的条件转换

标签: anylogicagent-based-modelingstatechart

解决方案


永远不要使用条件转换。它们有一些怪癖(不是错误,但如果你没有破解,很容易以意想不到的方式工作)并且可能会大大降低你的模型性能。

您始终可以将它们替换为基于消息的转换。

在您的情况下,设置如下: 在此处输入图像描述

每 x 秒,离开Treatment超时转换。检查您的患者队列AnyPatientFound,如果为真,则移至GoToHallway,否则返回Treatment

AnyPatientFound应该调用一个布尔函数anyPatientContaimated,该函数循环遍历队列中的所有患者,如果有任何患者被污染,则返回 true,否则返回 false。


推荐阅读