NetLogo 6.2中turtle变量为整数但patch变量为单元素列表问题咨询
NetLogo 6.2 patch变量类型异常问题解答
现象合法性说明
该现象属于NetLogo的预期正常行为,核心原因如下:
turtles-here的返回值是当前patch上所有turtle组成的agentset(代理集合),即使当前patch上仅有1个turtle,它的本质仍然是集合类型而非单个代理- NetLogo语法规则中,
[属性名] of 代理集合的返回值永远是对应属性值组成的列表,只有当of后跟随单个代理实例时,才会返回单个属性值
代码调整方案
根据你的业务场景可以选择对应修改方式:
场景1:业务规则限定每个patch最多只会存在1个turtle
使用first关键字取出单元素列表的首个元素即可,为了避免patch上没有turtle时触发运行报错,建议补充代理存在性判断:
ask patches [ if any? turtles-here [ set energy-of-my-agent first [energy-collected] of turtles-here ] ]
也可以用one-of直接提取单个代理后再取属性,效果一致:
ask patches [ if any? turtles-here [ set energy-of-my-agent [energy-collected] of one-of turtles-here ] ]
场景2:允许单个patch上存在多个turtle
根据业务需求对列表做聚合计算即可,常用聚合方案如下:
- 取所有turtle的
energy-collected总和:使用sum函数,该写法无需额外判断,patch无turtle时默认返回0set energy-of-my-agent sum [energy-collected] of turtles-here - 取多个turtle属性的平均值:使用
mean函数 - 取多个turtle属性的最大值:使用
max函数 - 取多个turtle属性的最小值:使用
min函数
内容的提问来源于stack exchange,提问作者Rafaela
相关产品推荐
相关产品推荐

