我正在尝试建立完全没有角接触的随机色块,这些色块的颜色是绿色的不同颜色(以直观地表示模型中具有随机质量值的每个色块)。我关于如何执行此操作的概念性想法是让我的“ ifelse”语句的“ false”部分基本上告诉程序,如果它有另一个补丁接触到该补丁的任何部分,则继续尝试将补丁分配到另一个位置,直到所有补丁有一个地方,没有其他补丁可以触及所有地方(包括角落)。我只是不知道这是否可行或者什么代码可以做到。是否有一个相当于“ until”的netlogo原语?任何帮助或想法,将不胜感激! 这是我的代码的一部分:
patches-own [ quality ]
to setup
clear-all
setup-patches
setup-turtles
reset-ticks
end
to setup-patches
ask n-of number-of-patches patches
[ ifelse sum [ pcolor ] of neighbors = 0
[ set quality random (2 + random 8)
set pcolor scale-color green quality 0 10
]
[ set pcolor black ; this is the line I need to change
]
]
end
答案 0 :(得分:2)
看看NetLogo词典中的原语while
和neighbors
。对于您要在代码中排序的顺序,我还是不太清楚,因此我无法提供完整的答案。但是,您想要类似的东西:
while any? neighbors [(however you define the ones you don't want to touch]
[(try again)
]
请注意,patches
总是与其他patches
接触,因为世界是由patches
的网格构成的。因此,您大概希望patches
在特定条件下(例如较高的质量值)不要互相接触。
答案 1 :(得分:1)
正如JenB所说,补丁总是与其他补丁打交道,所以我假设问题是“如何生成不涉及其他任何绿色补丁的数量个绿色补丁?”。然后我会这样做:
to setup-patches
while [ count patches with [ shade-of? green pcolor ] < number-of-patches ]
[ ask one-of patches with [ quality = 0 and count neighbors with [ shade-of? green pcolor ] = 0 ]
[ set quality random (2 + random 8)
set pcolor scale-color green quality 0 10 ] ]
end
基本上,同时,绿色补丁的数量少于所需的绿色补丁的数量,请选择一个非绿色且没有绿色邻居的补丁。然后将其变为绿色。