创建补丁集群而不更改发生

时间:2016-08-05 13:12:39

标签: netlogo

我正在编写一个仅涉及补丁的Netlogo模型。我根据概率设法创建了一个由6种不同颜色的斑块组成的景观(每个颜色代表我项目中的不同植被)。因此红色斑块在每个斑块上的概率为10%,黄色为5%,棕色为20%,依此类推。

我的代码示例,其中设置了此概率:

    let i random-float 1
    ifelse i + random-float 0.1 <= 0.8 ;random 0.1 threshold for environmental noise
      [ set pcolor green ]
      [ ifelse i + random-float 0.1 <= 0.9
        [ set pcolor yellow ]
        [ set pcolor blue ] ]

但是,这会为每种颜色创建一个随机模式。但我想为其中一个创建一个聚类空间模式。具体来说,在我的风景中,我希望棕色斑块的比例为50%。但是如果我为每个补丁设置50%的概率,棕色补丁将随机分布。如何让它占据我50%的风景,但以聚集模式出现?

我尝试使用Moore邻域创建聚类模式,但这显然会改变棕色补丁的比例。

我希望这有点清楚。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你可以根据你的体重种子,然后在种子周围生长。这是一种不同的方法:根据您的权重为所有补丁着色,然后对颜色进行聚类。

extensions [rnd]    ;use the rnd extension
globals [threshold]

to setup
  ca
  set threshold 2
  let _cw [[red 10] [yellow 20] [blue 70]]   ;colors with weights
  ask patches [set pcolor first rnd:weighted-one-of-list _cw [last ?]]
  repeat 20 [cluster]  ;adjust to taste
end

to cluster
  ask patches [
    if unhappy? [
      swap-pcolor
    ]
  ]
end


to swap-pcolor
  let _c pcolor
  let _p one-of neighbors with [pcolor != [pcolor] of myself]
  set pcolor [pcolor] of _p
  ask _p [set pcolor _c]
end

to-report unhappy?
  let _ct count neighbors with [pcolor = [pcolor] of myself]
  report (_ct < threshold)
end