我们正在使用Netlogo设计一个教室,如下所示:
此人代表老师在教室里走来走去,灰色斑块代表空座位,绿色斑块代表学生集中的座位,红色斑块代表学生不集中的座位。我们希望将缺乏注意力的情况“扩散”为邻近的GREEN斑块的“疾病”。我们找到了几行几乎可以完成我们想要的代码:
ask patches with [pcolor = green] [set pcolor [pcolor] of one-of neighbors4]
但这最终会使所有补丁变成灰色,因此我们尝试将其更改为:
ask patches with [pcolor = green] [set pcolor [pcolor] of one-of neighbors4 with [pcolor = red]]
此行给出以下错误:'OF预期的输入是乌龟代理集或补丁代理集或乌龟或补丁,但代号为NOBODY。'
你们中有人知道如何解决此问题吗?
答案 0 :(得分:1)
出现错误是因为您告诉绿色补丁将其颜色更改为红色的邻居之一,但并非所有绿色补丁都必须具有红色邻居。在这种情况下,当您告诉一个绿色色块“将您的颜色更改为红色的邻居”时,绿色色块就会出现,“好吧,我的邻居中有nobody
种颜色。”然后返回特殊的代理集nobody
,并且nobody
没有颜色可供原始绿色补丁访问!
我认为您可以通过采用另一种方式来解决此问题,即让红色斑点扩散。例如,使用以下示例设置:
to setup
ca
resize-world 0 25 0 25
ask patches [
set pcolor green
]
ask n-of 5 patches [ set pcolor red ]
reset-ticks
end
您的世界里有一群专心的学生和5位麻烦制造者。现在,如果让麻烦制造者检查它们附近是否有可能被破坏的补丁,那么集中注意力的缺乏就会以更快的速度向外扩散:
to colorswap
ask patches with [ pcolor = red ] [
; See if there is any possible neighbor patch
; to whom I can spread my lack of concentration
let target one-of neighbors4 with [ pcolor = green ]
; if the target exists, have them change their color
if target != nobody [
ask target [
set pcolor red
]
]
]
end