如何在Mathematica的NLDoReport中使用多Reporter采集多属性数据?
解决Mathematica调用NetLogo多属性采集问题
方法1:NetLogo端打包多属性为列表返回
直接修改NLDoReport的第二个参数,用NetLogo的list命令把多个属性打包成复合列表,这样每个tick会返回包含两个目标属性的子列表,Mathematica最终会收集成一个二维列表。
执行命令:
data = NLDoReport["go", "list ([house_price] of location 1) ([population] of location 1)", 200]
后续可拆分数据分别提取两个属性:
housePrices = data[[All, 1]] populations = data[[All, 2]]
方法2:手动循环采集并存储
如果不想在NetLogo端打包,也可以用NLDo配合Mathematica变量逐tick存储数据:
- 初始化空列表用于存储数据:
housePrices = {}; populations = {};
- 循环执行200次
go,每次采集后追加数据:
NLDo[ "go", AppendTo[housePrices, NLReport["[house_price] of location 1"]]; AppendTo[populations, NLReport["[population] of location 1"]], 200 ]
这种方式更灵活,适合后续扩展更多属性的场景。
注意事项
- 确保NetLogo中的
location 1是合法代理对象,避免因对象不存在报错。 - 若属性是全局变量而非代理属性,直接写变量名即可,无需
of语法。
内容的提问来源于stack exchange,提问作者dmp
相关产品推荐
相关产品推荐

