【发布时间】:2015-08-18 14:14:05
【问题描述】:
我一直在尝试在 NetLogo 中编写一个模型,我从一定数量的具有随机起始坐标的海龟开始。当我点击 go 时,我希望海龟分成一定大小的组,然后继续移动。我知道有一个用于分组的示例模型('分组海龟示例'),但它告诉海龟去某个补丁而不是组合在一起,所以如果它们移动,它们不再被分组。
我一直在修改模型库中的“合作伙伴示例”模型。在这里,海龟被告知要找到另一只还没有伙伴的海龟,将那只海龟设置为其伙伴,然后告诉新的伙伴也将其设置为伙伴。这很好用,我可以告诉合作伙伴蜂拥而至,在他们继续移动时将他们作为一个整体保持在一起。但我不知道如何才能让这样的东西与一对以上的乌龟一起工作。
我想我可以制作一个“合作伙伴”代理集,其中包括一只乌龟拥有的所有合作伙伴。我还考虑过在海龟之间使用无向链接并使用“网络”代理集来包含连接到单个海龟的所有海龟。
我无法让这些想法中的任何一个发挥作用。使用链接时,我可以设置乌龟可以拥有的首选链接数,但不能设置整个组中的乌龟总数(包括链接邻居的链接邻居),并且组中的乌龟不共享相同的连接.当我尝试创建一个合作伙伴代理集时,它似乎永远不会起作用,因为每个后续合作伙伴都会覆盖前一个合作伙伴。我还需要确保单个乌龟与其组中的其他人共享相同的伙伴。我一直在尝试使用 'turtle-set' 为任何以前的合作伙伴添加新的合作伙伴,但我遇到了问题。这是我用来设置合作伙伴的代码:
turtles-own
[next-partner ;a partner to be added to partners
group-size ;includes turtle itself and number of partners in group (count)
partners] ;agentset of partners
to setup
clear-all
create-turtles num-turtles
[ setxy random-xcor random-ycor
set next-partner nobody ;turtles haven't got any partners to start with
set group-size 1 ;just itself
]
reset-ticks
end
to go
let singles turtles with [preferred-size > group-size] ;those turtles where the group it's in isn't big enough
ask singles
[ifelse any? other singles
[set heading towards min-one-of (other turtles with [preferred-size > group-size]) [distance myself]] ;go towards other turtles who need more members in group
[lt random 40
rt random 40]
fd 1
]
ask turtles
[set partners turtles with [next-partner = myself] ;partners are those turtles who have you in their partners, but I don't this will work because they won't always be a 'next-partner'
set group-size 1 + count partners
if (preferred-size > group-size) and (any? other turtles in-radius 1 with [preferred-size > group-size])
[set next-partner one-of other turtles in-radius 1 with [preferred-size > group-size]
ask next-partner
[set next-partner myself ;ask this new partner to set turtle as its partner too
set partners (turtle-set partners next-partner)] ;add the turtle as a partner to the partners agentset
set partners (turtle-set partners next-partner) ;turtle does this after partner so that the partner doesn't add itself
]
ask turtles with [preferred-size = group-size] ;turtles in the right group size just move around (I can get them to flock later)
[lt random 40
rt random 40
fd 1]
]
tick
end
我希望这不会太长而且不清楚。非常感谢任何帮助,我已经为此工作了几天,在以前的问题中找不到类似的东西。
谢谢!
达米安
【问题讨论】:
-
模型库中的 Flocking 模型怎么样? (Sample Models/Biology/Flocking.nlogo) 这应该是一个好的开始……
-
感谢您的评论。植绒模型很有帮助,但如果有意义的话,我不能用它来将海龟放入一组特定数量的海龟中。所以我希望海龟先找到一定数量的伙伴,然后只和它们的伙伴一起成群结队。我已与一个合作伙伴(2 人一组)完成此操作,但无法添加更多合作伙伴..
-
您希望这些组具有特定的大小,但他们是否必须找到地理上靠近的海龟,或者您可以将海龟随机分配到组中,然后让它们移动到同一组中的其他人?
-
他们实际上根本不需要彼此相邻,这正是我认为我可以做到的方式。我实际上已经计算出“分组海龟”模型为海龟分配一个数字,然后告诉他们根据他们的数字去一个位置。我使用了这个编号分配代码,但告诉海龟用相同的编号蜂拥到其他海龟。
标签: netlogo