按颜色将海龟分组

  • 本文关键字:海龟 颜色 netlogo
  • 更新时间 :
  • 英文 :


Netlogo,Stackoverflow和一般编程的新功能。我想根据海龟的颜色将海龟分配到一个组,然后报告该组中的海龟数量。我这样给海龟分配一种颜色:

设置颜色 [13 1415 23 24 25 43 44 45 63 64 65 93 94 95]

我想发生的是,彼此相距 2 位以内的海龟将被分组在一起,例如颜色为 13、14 和 15 的海龟将分组在一起。我还希望能够使用界面选项卡上的监视器报告组中的海龟数量。

table扩展具有奇妙、超级有用table:group-agents的原始内容,这正是您在这种情况下所需要的。

下面是如何使用它的示例:

extensions [ table ]
globals [ groups ]
to setup
clear-all
create-turtles 100 [
set color one-of [13 14 15 23 24 25 43 44 45 63 64 65 93 94 95]
]
set groups table:group-agents turtles [ color - color mod 10 ]
print groups
foreach (range 10 100 10) [ g ->
let turtles-in-group table:get-or-default groups g no-turtles
print (word count turtles-in-group " turtles in group " g)
]
end

这里的关键行是

set groups table:group-agents turtles [ color - color mod 10 ]

color - color mod 10部分只是将 23 这样的颜色转换为 20 这样的"圆形"颜色的小技巧。与表达式具有相同值的海龟被放入同一组。运行此代码的结果将如下所示:

{{table: [[60 (agentset, 19 turtles)] [10 (agentset, 32 turtles)] [90 (agentset, 19 turtles)] [20 (agentset, 20 turtles)] [40 (agentset, 10 turtles)]]}}
32 turtles in group 10
20 turtles in group 20
0 turtles in group 30
10 turtles in group 40
0 turtles in group 50
19 turtles in group 60
0 turtles in group 70
0 turtles in group 80
19 turtles in group 90

如您所见,可以从表中提取所需的所有信息。如果您以前没有玩过桌子,那么值得熟悉它们的工作原理。

我不知道你最后打算怎么做,但可能值得为你的海龟创建一个my-group变量。假设你有

turtles-own [ my-group ]

在代码的顶部,您可以执行以下操作:

foreach table:keys groups [ g ->
ask table:get groups g [
set my-group table:get groups g
]
]

然后,这使得执行以下操作变得容易:

ask one-of turtles [ create-link-with one-of other my-group ]

顺便说一下,如果您不熟悉NetLogo,链接也是一件好事。

当我与属于群体成员的海龟一起工作时,我经常使用groups龟品种来代表群体,并在单个海龟和它们所属的群体之间建立联系。如果您有需要跟踪的"组级别"属性,这将特别有用。我很乐意对此进行扩展,但我认为这开始超出了这个特定答案的范围......

最新更新