在给定指定区域的情况下构建具有对称形状的补丁簇

时间:2014-03-05 20:58:07

标签: netlogo

为了构建具有给定对称形状的补丁簇,我使用了以下代码:

to make-cluster
let Forest-size 60000
let patch-area 10
let forest-patch-number Forest-size / patch-area
let patch-number 1
let increment-patch 1
let random-patch one-of patches with [pcolor = black]
let cluster[] 

while [patch-number <= forest-patch-number] [

ask random-patch [set cluster patches in-radius increment-patch]

ifelse all? cluster [pcolor = black] [ 
ask cluster [set pcolor green] 
set patch-number count patches with [pcolor = green] 
set increment-patch increment-patch + 1 ] 

[set random-patch one-of patches with [pcolor = black]
set increment-patch 1] ]
end 

to create-forests
let forest-percent 0
let Forest-% 10
while [ forest-percent < Forest-% ] [ 
make-cluster 
set forest-percent round ( (count patches with [pcolor = green] / count patches) * 100 ) ] 
end

当我运行代码时,“increment-patch”总是等于2.实际上,我不明白为什么“ifelse”循环的“else”总是在每个时间步都完成。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

第一次通过ifelse时,群集中的所有补丁都可能是黑色的,如果是,则会使用“then”分支。在“then”分支中,您将群集中的修补程序变为绿色。下一次通过ifelse,条件(群集中的所有补丁都是黑色)永远不会成为现实,因为你只是将那些相同的补丁变为绿色!所以第二次通过你总是采用“else”分支,因此increment-patch永远不会超过2。

不确定我理解代码背后的意图。你想让集群继续增长吗?你什么时候想要它停止增长?