Wait 在netlogo中使用面片颜色和while循环命令海龟移动
我对netlogo非常陌生,所以这可能是一个非常基本的问题,但我被卡住了。我想使用while循环(因此命令在整个运行过程中不断出现)和补丁颜色来指示海龟将如何移动 如果海龟不在红色区域,我希望它继续向最近的红色区域移动 如果它在红色补丁上,我希望它留在补丁上Wait 在netlogo中使用面片颜色和while循环命令海龟移动,wait,patch,netlogo,turtle-graphics,continue,Wait,Patch,Netlogo,Turtle Graphics,Continue,我对netlogo非常陌生,所以这可能是一个非常基本的问题,但我被卡住了。我想使用while循环(因此命令在整个运行过程中不断出现)和补丁颜色来指示海龟将如何移动 如果海龟不在红色区域,我希望它继续向最近的红色区域移动 如果它在红色补丁上,我希望它留在补丁上 while [pcolor] of patch-here != red [ face min-one-of patches with [pcolor = red ] [ distance myself ]
while [pcolor] of patch-here != red
[
face min-one-of patches with [pcolor = red ] [ distance myself ]
forward 1
]
while [pcolor] of patch-here = red
[
stop
]
当我运行此程序时,我得到一个错误(突出显示“[pcolor]of patch here!=red”),该错误表示“虽然预期此输入为真/假块,但得到的却是真/假块。”
有人能帮我吗?您只需围绕while循环的条件抛出
[]
,如下所示:
while [[pcolor] of patch-here != red]
[
face min-one-of patches with [pcolor = red ] [ distance myself ]
forward 1
]
另外,我认为您的第二个while循环不正确。首先,它只能运行一次(因为它只是
stop
s)因此,如果它是一个,那么它也可能是一个。其次,你知道你只是第一个while循环,所以你知道补丁是红色的。因此,条件总是正确的。下面是一个允许同时移动的最小但完整的示例(如OP评论中所要求的)。如果您创建一个新的NetLogo模型并将其复制到中,则可以看到它正在工作。您需要在界面中添加setup
和go
按钮,或者您可以在命令中心键入setup(一次),然后键入go(多次)以移动海龟
to setup
clear-all
ask n-of 20 patches [ set pcolor red ]
create-turtles 20 [ setxy random-xcor random-ycor ]
reset-ticks
end
to go
ask turtles with [ [pcolor] of patch-here != red ]
[ face min-one-of patches with [pcolor = red ] [ distance myself ]
forward 1
]
tick
end
这里的基本概念是每个tick
都是一个时间步。您的go
代码包含在同一个tick中发生的所有事情的说明,然后有tick
命令(在末尾)这对于理解如何以NetLogo的方式思考至关重要,我建议您看看模型库中的一些示例
向最近的红色补丁移动的实际代码是Bryan给你的。有完整的代码和while条件(对于像我这样的虚拟用户;)
您可能还存在一些概念上的混淆。您声明您正在使用while循环,以便在整个运行过程中不断执行命令。while循环意味着NetLogo将运行这组命令,直到海龟进入红色补丁。如果您有多只海龟,并且在一个ask海龟中有这些海龟……那么一只海龟将移动一直到一个红色的补丁,然后是下一个。在NetLogo中,更典型的是使用滴答计数器,让每只海龟在每个滴答声中移动一次,所以它们都同时移动。如果你想同时移动,那么说出来,我们会回答。@JenB我确实有多只海龟,这是在一个询问海龟中,我正在尝试实现同步就像你说的那样!抛出括号起作用了,谢谢!我尝试在while循环中实现if语句,如果[p color]of patch here=red][stop],但它不能正常工作
to setup
clear-all
ask n-of 20 patches [ set pcolor red ]
create-turtles 20 [ setxy random-xcor random-ycor ]
reset-ticks
end
to go
ask turtles
[while [[pcolor] of patch-here != red]
[
face min-one-of patches with [pcolor = red ] [ distance myself ]
forward 1
]
]
tick
end