为了从它们的区域构建具有给定对称形状的面片集群,我使用了以下代码:
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实际上,我不明白为什么"ifelse“循环的"else”总是在每个时间步都执行。
非常感谢你的帮助。
发布于 2014-03-07 05:49:59
第一次通过ifelse时,集群中的所有补丁可能都是黑色的,如果它们是黑色的,您将使用“then”分支。在“then”分支中,将集群中的补丁变为绿色。下一次通过ifelse时,条件(集群中的所有补丁都是黑色)永远不会为真,因为您只是将这些完全相同的补丁变成了绿色!所以第二次你总是使用“else”分支,所以increment-patch永远不会超过2。
我不确定我理解代码背后的意图。你想让集群保持增长,我猜?你希望它什么时候停止增长?
https://stackoverflow.com/questions/22209058
复制相似问题