AnyLogic离散事件执行报错:Agent无法强制转换为Muelle类咨询
问题描述
本人为AnyLogic初学者,参考官方示例搭建配送中心仿真模型,结合自有产品、仓库场景做适配调整;因了解AnyLogic与原生Java编程存在一定差异,已逐一排查修复了前期运行时错误,修复后出现如下类强制转换报错,暂未定位到最后修改内容中的问题根源,若排查需要可补充提供更多代码。
运行报错信息
Exception during discrete event execution: class com.anylogic.engine.Agent cannot be cast to class cocacola3.Muelle (com.anylogic.engine.Agent and cocacola3.Muelle are in unnamed module of loader 'app') at cocacola3.Main._OcuparMuelleDescarga_onSeizeUnit_xjal(Main.java:4908)
对应出错代码段
agent.muelle = (Muelle) unit; agent.muelle.Ocupado = true; DescargaEspera.add(agent); verificarDescarga(); } private void _hold_onEnter_xjal( final com.anylogic.libraries.processmodeling.Hold<DescargaCamione> self, DescargaCamione agent ) { self.block(); DescargaEspera.remove(agent);
问题原因与修复方案
报错触发点是第一行强转逻辑agent.muelle = (Muelle) unit;,本质是Seize模块OcuparMuelleDescarga捕获到的资源单元unit是AnyLogic通用基础Agent类的实例,不是你自定义的Muelle(卸货月台)类实例,强转自然失败,按以下步骤排查即可:
- 打开流程中
OcuparMuelleDescarga(占用卸货月台)Seize模块的配置面板,找到资源选择配置项,确认你绑定的是存储Muelle类型智能体的资源池,没有误选成存储通用Agent的资源集合 - 检查Seize模块的「单元类型(Unit type)」参数,不要保留默认的
Agent选项,手动指定为你自定义的Muelle类型 - 配置完成后,
onSeizeUnit回调里的unit变量会自动识别为Muelle类型,此时不需要手动写强转逻辑,直接赋值agent.muelle = unit;即可正常运行 - 额外校验:确认
DescargaCamione(卸货卡车)智能体上自定义的muelle变量类型为Muelle,不存在类型不匹配;确认项目中没有重名的Muelle类导致类识别冲突。
内容的提问来源于stack exchange,提问作者user19422784
相关产品推荐
相关产品推荐

