我有一群被编程为聚类/合并的海龟(下面的代码)。我想知道,一旦群集达到一定的大小(my-groupSize),群集就会孵化出新的海龟。似乎mygroupSize计算的是滴答数而不是群集中的乌龟数。我如何跟踪群集中的海龟数量?
ask origs [
let candidates origs in-radius 1 with [leader != [leader] of myself]
if any? candidates [
create-links-with candidates [ hide-link ]
ask candidates [ merge ]
]
set my-groupSize my-groupSize + 1.0
]
tick
end
to merge ;; node procedure
;; First this node merges.
set leader [leader] of myself
set heading [heading] of leader
set color blue
ask link-neighbors with [leader != [leader] of myself]
[ merge ]
set my-groupSize my-groupSize + 1.0
end
答案 0 :(得分:3)
如果my-group-size是一个海龟自己的程序,那么每只乌龟都有自己的变量版本。因此,当每只乌龟添加1时,它会在其自己的变量版本中添加1。它不会计入该组中所有海龟的数量。
相反,只使用领导者版本的my-group-size。合并乌龟时,请执行以下操作:
ask leader [ set my-group-size my-group-size + 1 ]
然后,任何代理都可以使用[ group-size ] of leader
这假设领导者也没有失去成员。在这种情况下,一旦所有领导者做出改变,你可能需要将领导者聚集到一组(如果还不是众所周知的),然后让他们计算他们的粉丝。
;; get leaders
let all-leaders turtle-set ([leaders] of turtles )
;; count group sizes
ask all-leaders [ set my-group-size count turtle with [ leader = myself ] ]
我不太了解你的模型,建议使用更少的暴力方法。但他们在那里。
如果您还没有,那么您可能希望将leader
初始化为“self”。通过这种方式,您可以随时引用领导者,即使对于不跟随另一只乌龟的海龟也是如此。
希望这有帮助。