Netlogo随机补丁程序的设置,而他们一点也不动

时间:2018-07-30 05:35:07

标签: netlogo

我正在尝试建立完全没有角接触的随机色块,这些色块的颜色是绿色的不同颜色(以直观地表示模型中具有随机质量值的每个色块)。我关于如何执行此操作的概念性想法是让我的“ 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

2 个答案:

答案 0 :(得分:2)

看看NetLogo词典中的原语whileneighbors。对于您要在代码中排序的顺序,我还是不太清楚,因此我无法提供完整的答案。但是,您想要类似的东西:

 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

基本上,同时,绿色补丁的数量少于所需的绿色补丁的数量,请选择一个非绿色且没有绿色邻居的补丁。然后将其变为绿色。