【问题标题】:Netlogo random patches setup without them touching at allNetlogo 随机补丁设置,完全没有接触
【发布时间】:2018-07-30 05:35:06
【问题描述】:

我正在尝试设置完全没有角接触的随机补丁,并且这些补丁的颜色是不同的绿色(以直观地表示每个补丁在我的模型中具有随机质量值)。我如何做到这一点的概念性想法是让我的“ifelse”语句的“错误”部分基本上告诉程序如果它有另一个补丁触及它的任何部分,则继续尝试将补丁分配一个不同的位置,直到所有补丁有一个没有其他补丁接触它的地方(包括角落)。我只是不知道这是否可能或什么代码可以做到这一点。是否有等效于“直到”的 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

【问题讨论】:

  • 请不要使用文字处理器来复制编程代码,它会做大写单词和引入空行之类的事情。此外,当您将标签附加到您的问题时,请检查您看到的定义,以确保标签(如“补丁”)以您的意思使用。我已经清理了你的问题。

标签: netlogo


【解决方案1】:

查看 NetLogo 字典中的原语 whileneighbors。我并不完全清楚您想要在代码中使用的顺序,因此我无法提供完整的答案。但是,你想要这样的东西:

 while any? neighbors [(however you define the ones you don't want to touch]
 [(try again)
 ]

请注意,patches 总是与其他patches 接触,因为世界是由patches 构成的网格。因此,您可能希望 patches 在特定条件下(例如高质量值)不相互接触。

【讨论】:

    【解决方案2】:

    正如 JenB 所说,补丁总是接触其他补丁,所以我假设问题是“我怎样才能生成 number-of-patches 个不接触任何其他绿色补丁的绿色补丁?”。然后我会这样做:

    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
    

    基本上,虽然绿色斑块的数量少于所需的绿色斑块数量,请选择不是绿色且没有任何绿色邻居的斑块之一。然后把它变成绿色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      相关资源
      最近更新 更多