【问题标题】:How to count the number of turtles in a cluster - netLogo如何计算集群中海龟的数量 - netLogo
【发布时间】:2014-12-12 13:15:44
【问题描述】:

我有一群海龟,它们被编程为集群/合并(代码如下)。我希望一旦集群达到一定大小(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

【问题讨论】:

    标签: cluster-computing netlogo turtle-graphics


    【解决方案1】:

    如果 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”。这样,您始终可以引用领导者,即使对于不跟随另一只海龟的海龟也是如此。

    希望这会有所帮助。

    【讨论】:

    • 感谢您回答这个@TurtleZero 我想知道什么时候所有领导者都被调用并计算他们的追随者,这不包括那些只是他们自己和集群外领导者的领导者吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多