NetLogo代码报错:patches执行turtle移动指令导致turtle无法移动
问题排查与修复方案
问题根因
报错核心是执行上下文混淆:move-potrero 过程是由 potreros 类的turtle调用的,但你在过程内部写了 ask neighbors in-radius 2 [ ... ],这就把代码块的执行主体切换成了邻格patch。你把原本要让turtle执行的facexy、fd、修改能量的代码写在了patch的执行块里,patch本身没有移动能力,自然会触发报错。同时你没有编写turtle改色的逻辑,所以turtle颜色不会变化。
具体修复点
1. 修正move-potrero过程
将turtle要执行的逻辑移出patch的执行块,修正后的代码如下(删除了原代码中多余的闭合括号):
to move-potrero ; 先判断自身所在2格范围内是否存在符合条件的patch let risky-patches neighbors in-radius 2 with [ temperatura >= 28.6 or temperatura <= 22.6 or dosel >= 5 or humedad <= 84 ] if any? risky-patches [ ; 让符合条件的patch改色 ask risky-patches [ set pcolor red ] ; turtle自身执行改色、移动、改能量逻辑,颜色可按需调整 set color red facexy random 30 random 60 fd 5 set energia energia - 10 descansar-potrero ] end
2. 坐标改为角落无负值
打开NetLogo界面的「设置」面板:
- 将原点(Origin)设置为左下角(Corner)
- 手动设置
min-pxcor = 0、min-pycor = 0,max-pxcor = 90、max-pycor = 60,即可完全消除负坐标
3. 取消setup按钮
在go过程的最开头加入初始化判断,第一次运行自动执行setup:
to go if ticks = 0 [ setup ] ; 后面保留你原来的go过程代码即可 end
设置完成后就可以删掉界面上的setup按钮,仅保留go按钮即可正常运行模型。
内容的提问来源于stack exchange,提问作者bksnlow
相关产品推荐
相关产品推荐

