AnyLogic中Learner调用getMain()报错,如何实现dropout_count变量递增?
解决AnyLogic中
getMain()未定义的问题 报错原因
getMain()不是自定义智能体Learner的内置方法——AnyLogic只会给直接依附于Main模型的内置智能体自动生成这个方法,你自定义的Learner类默认没有这个方法,所以会触发报错。
三种可行解决方案
方案1:用
getRoot()强制转换访问主模型
所有AnyLogic智能体都自带getRoot()方法,能返回模型的根智能体(也就是你的Main),只需要强制转换成Main类型即可:((Main)getRoot()).dropout_count++;注意要保证Main里的
dropout_count变量是public权限(如果设为private,需要改成public或者添加public的操作方法)。方案2:给Learner添加主模型引用变量
- 在
Learner智能体中添加一个类型为Main的变量,命名为mainModel(权限设为public或默认即可); - 在Main模型中创建
Learner实例的地方(比如Source的On exit动作、Population的初始化逻辑),把当前Main实例赋值给这个变量:learner.mainModel = this; - 然后在Dropout状态的Entry action里直接调用:
mainModel.dropout_count++;
- 在
方案3:用封装方法更规范
如果不想直接暴露dropout_count变量,建议在Main模型里写一个public的增量方法:public void addDropout() { dropout_count++; }然后在Learner里通过
getRoot()调用这个方法:((Main)getRoot()).addDropout();
内容的提问来源于stack exchange,提问作者May
相关产品推荐
相关产品推荐

