检查占用块中的代理

Posted

技术标签:

【中文标题】检查占用块中的代理【英文标题】:Checking agents in a Seize Block 【发布时间】:2020-12-02 09:17:28 【问题描述】:

我想知道如何通过检查队列(位于 Seize Block 中的 Main 中)是否包含具有某种特征的患者(p_contaminated,这里的布尔参数应该是true 以便触发转换)。即,如果队列包含一个 p_contaminated = true 的患者,则该语句应为 true 以触发转换。

Picture showing the Main chart and the Patient chart. Emphasizing (with red) the mentioned Seize Block and the conditional transition that is wanted to be triggered

【问题讨论】:

【参考方案1】:

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

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

在您的情况下,设置如下:

每隔 x 秒,让 Treatment 有一个超时转换。检查AnyPatientFound 中的患者队列,如果为真,请移至GoToHallway,否则返回Treatment

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

【讨论】:

我很难确切知道我应该在我的问题中提供多少上下文,对不起。这里的一个问题是,您提供的优雅解决方案是我尝试效仿的策略具有三个标准;其中上述是其中之一。此外,需要检查患者没有被污染,并且没有其他闲置的治疗室。 IE。我的条件转换现在包含: !this.p_contaminated & main.TreatmentRooms.idle() == 0 & (is-there-a-contaminated-patient-in-the-queue?) 然后我将如何将这两项检查添加到您的建议的解决方案? 关于“AnyPatientFound 应该调用一个布尔函数 anyPatientContaimated 循环遍历队列中的所有患者,如果有任何患者被污染则返回 true,否则返回 false。”是的!!这绝对是我想要做的,但我找不到一种方法来访问和循环通过队列中的代理以进行此检查。你能在路上帮我吗? 您好,最好单独提出新问题,以保持此处整洁。看看这个地方是如何运作的以及如何提出好的问题。你已经做得很好了,但新的细节或要求代码应该按照本指南单独完成:***.com/help/how-to-ask。另外,请在此处了解要排除/包含的内容:***.com/help/minimal-reproducible-example。最后,如果这有帮助,请将此答案推荐为“有用”(答案旁边的向上箭头),以帮助其他用户将来也能找到它。请参阅***.com/help/why-vote 了解更多信息 :) 欢迎来到 SOF 感谢本杰明的指导性反馈!一旦我的声望达到 15,就会激活几个点赞。

以上是关于检查占用块中的代理的主要内容,如果未能解决你的问题,请参考以下文章

检查oracle表单多记录块中的重复值

Anylogic:避免在占用块中不必要地执行进程

WCF 客户端创建问题

如何检查线程代码是不是在 try-catch 块中运行

如何在完成处理程序块中检查 NSURLSessionDownloadTask 的状态?

如何在 try except 块中检查某种类型的 OSError?