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
龟品种来代表群体,并在单个海龟和它们所属的群体之间建立联系。如果您有需要跟踪的"组级别"属性,这将特别有用。我很乐意对此进行扩展,但我认为这开始超出了这个特定答案的范围......