我正在编写一个仅涉及补丁的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邻域创建聚类模式,但这显然会改变棕色补丁的比例。
我希望这有点清楚。在此先感谢您的帮助。
答案 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