为了构建具有给定对称形状的补丁簇,我使用了以下代码:
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”总是在每个时间步都完成。
非常感谢你的帮助。
答案 0 :(得分:0)
第一次通过ifelse
时,群集中的所有补丁都可能是黑色的,如果是,则会使用“then”分支。在“then”分支中,您将群集中的修补程序变为绿色。下一次通过ifelse
,条件(群集中的所有补丁都是黑色)永远不会成为现实,因为你只是将那些相同的补丁变为绿色!所以第二次通过你总是采用“else”分支,因此increment-patch
永远不会超过2。
不确定我理解代码背后的意图。你想让集群继续增长吗?你什么时候想要它停止增长?