能否在NetLogo同一let过程中结合min-one-of与in-cone/in-radius使用?
解决NetLogo中蝙蝠追踪视野内最近虫子的问题
你的代码问题出在min-one-of的用法和in-cone的调用方式上——in-cone是以当前海龟为中心的视角检测,不能全局直接用在bugs主体集上;同时min-one-of需要明确指定“按什么数值取最小”,也就是距离。
正确的做法是给每只蝙蝠单独处理视野内的猎物,代码如下:
ask bats [ ; 筛选当前蝙蝠视野锥内的虫子,取距离最近的那只 let prey min-one-of bugs in-cone vision-radius vision-angle [distance myself] ; 只有找到猎物时才移动,避免空值报错 if prey != nobody [move-to prey] ]
代码解释:
bugs in-cone vision-radius vision-angle:会自动以当前执行命令的蝙蝠为中心,筛选出视野锥范围内的虫子主体集[distance myself]:告诉min-one-of,以“虫子到当前蝙蝠的距离”为依据,选出距离最小的那只虫子if prey != nobody:防止蝙蝠视野里没有虫子时,move-to命令因目标为空报错
如果要改用in-radius(全向视野),只需把in-cone换成in-radius即可:
ask bats [ let prey min-one-of bugs in-radius vision-radius [distance myself] if prey != nobody [move-to prey] ]
内容的提问来源于stack exchange,提问作者Rosie Duenas
相关产品推荐
相关产品推荐

