【问题标题】:Determining the radius of turtle clusters and number of turtles in them - postprocessing确定海龟簇的半径和其中的海龟数量 - 后处理
【发布时间】:2017-09-28 18:21:06
【问题描述】:

如果我遇到这样一种情况,其中大约 1000 只黑龟在给定的滴答时间内以随机的角度和步长散布在整个 netlogo 世界中。每个海龟在分散期间的每个时间步都被分配一个随机概率,如果这个数字超过任何给定海龟的给定阈值,它会将其颜色更改为红色并停止移动。此外,碰巧在一块红海龟(停止/安定)内移动的黑海龟(仍在移动),将其颜色更改为灰色并安定下来(停止移动)。最后,碰巧在灰海龟或红海龟(停止/安定)内移动的其他黑海龟(仍在移动)也将其颜色更改为灰色并安定下来(停止移动)

我的问题是关于何时达到模拟持续时间的后处理问题。如何确定黑龟海中红灰龟群的数量?另外,如何确定每个集群的大小(径向范围)?最后,如何确定每个集群中的海龟数量?

【问题讨论】:

  • 这是一个设计问题 - 您需要决定如何操作集群。一旦您了解集群的含义,我们就可以在您尝试将该想法转换为代码时帮助您进行调试。也许你可以做一些事情,比如查看每个补丁的红灰色海龟的密度,如果它超过平均密度的 x%,则将其称为一个集群,然后将两个集群的相邻补丁合并到同一个集群中。但是你需要先有一个算法。
  • @JenB 谢谢,根据您和 payette 提供的信息,我已将我的问题改写为link让我知道您的想法?

标签: netlogo


【解决方案1】:

Jen 是对的:在真正回答这个问题之前,您需要清楚地了解什么是集群。

话虽如此,一种可能的选择是使用聚类算法。我建议看看 Christopher Frantz 的 dbscan extension

这是一个快速拼凑的例子:

extensions [ dbscan ]

to setup
  clear-all
  ask patches [ set pcolor white ]
  create-turtles 1000 [
    set color black
    set label-color blue
    setxy random-xcor random-ycor
  ]
  ask n-of 5 turtles [
    ask turtles in-radius 3 [
      set color one-of [red grey]
    ]
  ]
end

to find-clusters
  let red-grey-turtles turtles with [ member? color [red grey] ]
  let clusters dbscan:cluster-by-location red-grey-turtles 3 3
  (foreach clusters range length clusters [ [c i] ->
    foreach c [ t ->
      ask t [ set label i ]
    ]
  ])
end

抱歉没有进一步解释:我有一架飞机要赶...

【讨论】:

  • 感谢您提供有用的信息。我已经编辑了我的问题以在没有扩展名的情况下执行此操作,并遇到了我认为可以解决的问题。见link,让我知道你的想法。
  • 这种基于密度的聚类算法非常棒,但是我想知道它是否可以做的不仅仅是唯一地标记同一聚类的成员。您是否知道如何执行诸如确定集群的最大、最小和平均大小、集群中个体的最大、最小平均数以及最终的最大、最小平均集群间距离之类的操作?
  • 集群中个体的最大、最小和平均数很容易:max map length clustersmin map length clustersmean map length clusters 应该这样做。集群间距离比较棘手,因为它可以用不同的方式定义。你想要集群中心之间的距离吗?在每个集群中最近的海龟之间?我建议您为此提出一个单独的问题,并尽量准确地说明您需要什么。
  • 簇数刚好是count clusters。径向范围类似于:to-report radial-extent [ cluster ] report max map [ a -> max map [ b -> [ distance a ] of b ] cluster ] cluster end。一旦你有了这个,你可以做mean map radial-extent clusters等等。根据您的世界拓扑,集群中心可能或多或少有些棘手。您是否开启了水平或垂直世界环绕?
  • 啊,抱歉,应该是length clusters。 (count 用于代理集,length 用于列表。在这种情况下,clusters 是列表,因此您需要使用length。有时我会混淆它们。)
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
相关资源
最近更新 更多