AnyLogic中如何根据Agent类型自定义配置Drop-off块
AnyLogic混合类型Agent的Drop-off配置解决方案
报错原因说明
你遇到的两类报错对应不同的根因:
- 选择
Myagent作为Drop-off块元素类型时报错:Drop-off块会对进入的Agent做类型校验,容器中混入的Myagent1不符合类型要求,触发类型不匹配错误 - 选择通用
Agent作为元素类型时报错:通用Agent类不存在你自定义的cc参数,代码中直接调用agent.cc时无法识别该参数,触发运行时/编译错误
可行解决方案
方案1:类型分流+分块处理(无需修改现有Agent结构)
适合不想调整现有Agent继承关系的场景
- 在Drop-off环节前新增
SelectOutput块,按Agent类型做分流:- SelectOutput的条件栏填写:
agent instanceof Myagent - 条件为真的出口连接对应处理
Myagent的Drop-off块,条件为假的出口连接对应处理Myagent1的Drop-off块
- SelectOutput的条件栏填写:
- 分别配置两个Drop-off块的元素类型:
- 处理
Myagent的块:元素类型选择Myagent - 处理
Myagent1的块:元素类型选择Myagent1
- 处理
- 若需要在逻辑中调用公共参数
cc,对Agent做类型强转即可,示例代码:((Myagent)agent).cc或者((Myagent1)agent).cc
方案2:定义公共父类(适合多类型Agent存在公共属性的场景)
适合后续还有多类型公共逻辑扩展的场景,代码复用性更高
- 新建自定义Agent类型(例如命名为
AgentWithCC),在该类型中定义公共参数cc - 修改
Myagent和Myagent1的继承配置,将二者的父类从默认的Agent改为你新建的AgentWithCC - 将Drop-off块的元素类型设置为
AgentWithCC,两种子类型Agent都可正常进入块,且可以直接调用cc参数无需强转
内容的提问来源于stack exchange,提问作者Luigi Aurilio
相关产品推荐
相关产品推荐

