AnyLogic中Assembler模块‘New Agent’配置问题求助
解决AnyLogic Assembler模块生成同类型Agent的问题
嘿,很高兴能帮到你!这个需求其实在AnyLogic里有挺直接的实现方式,我来一步步给你说清楚:
第一步:设置动态的新Agent类型
打开Assembler模块的属性面板,找到「New agent type」选项,不要直接选择固定的Product1/2/3,而是点击旁边的表达式按钮(小fx图标),在弹出的表达式编辑器里输入:input1.getType()这样不管Input1传入的是哪一种Product,新生成的Agent都会和它完全同类型。
第二步:继承Input1的ID标识
接下来处理ID的继承,在Assembler的「Actions」或者「Advanced」标签下(不同版本位置略有差异),找到「On new agent created」或者「New agent initialization」的代码框,添加初始化代码:
如果你用的是变量存储ID(比如Agent里有个id变量):newAgent.id = input1.id;如果你是通过
getId()方法获取ID的:newAgent.setId(input1.getId());这样新生成的Agent就会继承输入Product的ID标识啦。
额外小提示
如果你的Product1/2/3都是从同一个父类(比如BaseProduct)继承来的,建议把Assembler的Input1端口的类型设置为这个父类,这样三个Product都能顺利进入端口,不会出现类型不匹配的报错。
你可以运行模型测试一下,当Product2和Raw Material进入Assembler后,生成的新Agent应该就是Product2类型,并且ID和输入的Product2完全一致~
内容的提问来源于stack exchange,提问作者DonScholzer
相关产品推荐
相关产品推荐

