Anylogic,根据特定条件从池中抢资源

Posted

技术标签:

【中文标题】Anylogic,根据特定条件从池中抢资源【英文标题】:Anylogic, seize resource from pool based on certain conditions 【发布时间】:2021-04-04 18:07:03 【问题描述】:

问题已经被问过和回答过,请参阅Anylogic - dynamic specification of resources to seize。但是***上的多个巨魔要求我再次问同样的问题,不管.. - 因为问它被视为“答案”而不是“问题”。

Anylogic 8.7.2. 我创建了一个资源池myworkers。 代理类型workers. 打开workers代理,添加变量offloadBay(或参数,无所谓),INT, default value 0。 在 main 中,我使用seize 块从该池中获取 4 个资源,但它们需要满足条件offloadBay == 0。 在抓住块中,我选择Customise resource choice == true ; Recource choice condition = (unit.offloadBay == 0)。 在运行项目时,我收到错误 - “offloadBay 无法解析或不是字段”。

似乎对关键字 unit 的引用实际上并未引用资源单元 - 在引用 unit. 时,没有一个 unit's 参数、变量、函数等可供调用

请指教我做错了什么?或者,如何根据资源的特定条件或属性从 ResourcePool 中选择资源? (可根据要求提供演示项目,请告知发送到哪里

【问题讨论】:

【参考方案1】:

尝试强制执行资源类型。发生这种情况是因为您在占用块中,并且当您使用“单元”时,您可能指的是不同的资源代理类型。并非所有人都可能具有“offloadBay”变量。所以,使用:

((工人)单位).offloadBay == 0

【讨论】:

埃米尔,这行不通。 Anylogic 现在响应两个错误:offloadBay cannot be resolved or is not a fieldIncompatible operand type Workers and int “==”两边的类型不同时出现“Workers and int操作数类型不兼容”的错误。这告诉你 0 是 int 类型,而另一边的任何东西都是 Workers 类型。您可以复制并粘贴您在资源选择条件中所写的内容吗? 我认为你写的是“Workers”而不是“Worker”。 请稍等一下-您对我有点快...不过,非常感谢您的响应速度!我有(Workers)unit.offloadBay - 似乎需要一组额外的括号?正在测试 就是这样!!需要额外的括号((Workers)unit).offloadBay - 多层次测试,完美运行!!谢谢你,埃米尔,你是明星!!

以上是关于Anylogic,根据特定条件从池中抢资源的主要内容,如果未能解决你的问题,请参考以下文章

无法从池中获取资源(SocketTimeoutException:)

Glassfish RAR5035:从池中销毁资源时出现意外异常

Anylogic中资源池中资源的维护

在 Anylogic 中编写停止条件

在 AnyLogic 中使用代理名称作为 selectOutput 的条件

ANYLOGIC 抢占资源