我们正在Netlogo中设计一个教室,看起来像这样:
课堂
人代表在教室里走来走去的老师,灰色斑块代表空座位,绿色斑块代表学生集中的座位,红色斑块代表学生不集中的座位。我们希望将注意力不集中作为一种"疾病"传播"到邻近的绿色斑块。我们发现一些代码行几乎做到了我们想要的:
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 预期输入是 Turtle 代理集或修补程序代理集或 Turtle 或修补程序,但没有人。
你们中有谁知道如何解决这个问题吗?
您遇到的错误是因为您告诉绿色斑块将其颜色更改为红色的邻居之一,但并非所有绿色斑块都一定有红色邻居。在这种情况下,当你告诉一个绿色斑块"把你的颜色换成你的一个邻居是红色的"时,绿色斑块会说,"嗯,在我的邻居中,有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