如何在Julia Agents中每隔指定步数收集仿真数据
如何在Julia Agents中每隔指定步数收集仿真数据
嘿,我懂你刚接触Julia Agents时摸不着头绪的感觉!其实不用费劲去改框架内部逻辑,这个需求框架本身就有现成的解决方案~
你现在用的ensemblerun!函数支持一个叫when的关键字参数,专门用来控制什么时候收集adata里的数据,默认是每一步都收集,咱们只要给它传一个判断条件就行:
方法一:自定义判断函数
先写一个函数来判断当前步数是否是50的倍数,再把它传给when参数:# 定义判断逻辑:当步数是50的倍数时返回true collect_every_50(step) = step % 50 == 0 # 把when参数加入调用中 ensemblerun!(models, agent_step!, dummystep, 1000; adata, parallel = true, when = collect_every_50);方法二:用匿名函数更简洁
如果不想单独定义函数,直接写匿名函数也可以,代码更紧凑:ensemblerun!(models, agent_step!, dummystep, 1000; adata, parallel = true, when = s -> s % 50 == 0);
额外补充:如果之后你需要更复杂的收集条件(比如结合模型状态判断),when函数还可以接收模型对象和步数两个参数,比如:
# 不仅要求步数是50的倍数,还要模型的某个状态满足条件才收集 collect_condition(model, step) = step % 50 == 0 && model.some_state > 100 ensemblerun!(models, agent_step!, dummystep, 1000; adata, parallel = true, when = collect_condition);
这样就不用再纠结怎么插入steps mod 50 == 0的条件啦,框架已经帮咱们预留好这个控制入口了~
备注:内容来源于stack exchange,提问作者Simone Gabbriellini
相关产品推荐
相关产品推荐

