AnyLogic技术问题:如何在Agent Container中查找Agent?
AnyLogic Agent Container中查找特定类型Agent的解决方法
你之前的写法无效,核心原因是agent.contents()返回的是Agent集合(Collectionk1类型做instanceof比较逻辑不成立。针对你托盘仅承载单个零件的需求,提供以下几种可行方案:
方案1:取集合首个元素判断(最适配你的场景)
在SelectOutput模块的条件输入框中,针对k1类型零件的路径,写入:
!agent.contents().isEmpty() && agent.contents().get(0) instanceof k1
逻辑说明:先判断托盘不为空,再取集合中第一个元素(因仅放单个零件,即为目标零件),判断其是否为k1类型。同理,k2、k3的路径条件只需将k1替换为对应Agent类型即可。
方案2:用AnyLogic内置方法简化代码
AnyLogic为集合提供了first()方法可直接获取首个元素,条件可简化为:
agent.contents().first() != null && agent.contents().first() instanceof k1
方案3:遍历集合检查(适配多零件场景)
若后续需求变更为托盘可放置多个零件,需判断是否存在某类型零件时,可使用流式遍历:
agent.contents().stream().anyMatch(a -> a instanceof k1)
该表达式会检查托盘内是否存在至少一个k1类型的Agent。
注意事项
- 确保Agent类型名称完全匹配:
k1、k2、k3需与你在AnyLogic中创建的Agent类型名称完全一致(大小写敏感)。 - 必须先判空:无论哪种方案,都要先确认托盘内存在Agent,避免空指针异常导致模型报错。
内容的提问来源于stack exchange,提问作者D. Y.
相关产品推荐
相关产品推荐

