Netlogo 将海龟分组:修改的合作伙伴示例?

Netlogo 将海龟分组:修改的合作伙伴示例?,netlogo,Netlogo,我一直在尝试用NetLogo编写一个模型,从一定数量的海龟开始,它们的起始坐标是随机的。当我按下围棋时,我希望海龟们分成一定大小的一组,然后继续移动。我知道有一个分组的示例模型(“分组海龟示例”),但它告诉海龟们去某个补丁,而不是分组在一起,所以如果它们移动,它们就不再分组 我一直在修改模型库中的“合作伙伴示例”模型。在这里,海龟们被告知要找到另一只还没有伴侣的海龟,把那只海龟当作它的伴侣,然后告诉新伙伴也把它当作伴侣。这很好,我可以告诉伙伴们聚集在一起,让他们在继续移动的过程中保持一个群体。但

我一直在尝试用NetLogo编写一个模型,从一定数量的海龟开始,它们的起始坐标是随机的。当我按下围棋时,我希望海龟们分成一定大小的一组,然后继续移动。我知道有一个分组的示例模型(“分组海龟示例”),但它告诉海龟们去某个补丁,而不是分组在一起,所以如果它们移动,它们就不再分组

我一直在修改模型库中的“合作伙伴示例”模型。在这里,海龟们被告知要找到另一只还没有伴侣的海龟,把那只海龟当作它的伴侣,然后告诉新伙伴也把它当作伴侣。这很好,我可以告诉伙伴们聚集在一起,让他们在继续移动的过程中保持一个群体。但是我想不出我怎么能让这样的东西和一对海龟一起工作

我想我可以做一个“合作伙伴”的代理集,其中包括一只海龟拥有的所有合作伙伴。我还考虑过在海龟之间使用无向链接,并使用一个“网络”代理集来包含所有连接到一只海龟的海龟

这两个主意我都没法用。使用链接时,我可以设置海龟可以拥有的首选链接数,但不能设置整个组中海龟的总数(包括链接邻居的链接邻居),并且组中的海龟不共享相同的连接。当我试图建立一个合作伙伴代理集时,它似乎从来都不起作用,因为随后的每一个合作伙伴都超越了前一个。我还需要确保一只海龟与其他海龟分享相同的伙伴。我一直在尝试使用“海龟集”向以前的合作伙伴添加新的合作伙伴,但我遇到了问题。以下是我用于设置合作伙伴的代码:

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
我希望这不会太长和不清楚。我真的非常感谢任何帮助,我已经为此工作了几天,在前面的问题中找不到类似的东西

谢谢


Damien

查看Railsback和Grimm中的狼群示例:基于代理和基于个人的建模。基本上每个包都有一个唯一的标识符


在这种情况下,组将具有该标识符。因此,当群集发生时,群中的成员允许其他人加入,并且组标识符将被赋予所创建的新成员或组。如果他们离开,则重新设置标识符。您可以轻松地围绕新关系(两个新海龟相遇并生成新的组号)、组别增长(组别中现有的和新到达或被拒绝的海龟的数量)以及离开组别的海龟(重置组号)设置规则。这样做的好处是,您还可以轻松创建具有相同组号的代理集,从而让它们都执行相同的操作。

如何从模型库中创建群集模型?(示例模型/生物学/植绒.nlogo)这应该是一个好的开始…谢谢你的评论。群集模型很有帮助,但如果有意义的话,我不能用它把海龟分成特定数量的一群。因此,我希望海龟们首先找到一定数量的伙伴,然后只和他们的伙伴聚集在一起。我已经用一个合作伙伴(2人一组)完成了这项工作,但不能再添加任何合作伙伴。你想让团队有一个特定的规模,但他们是否必须找到地理位置相近的海龟,或者你能将海龟随机分配到组中,然后让他们向同一组中的其他人移动?他们实际上根本不需要彼此相邻,那正是我认为我能做到的。我已经计算出“分组海龟”模型给海龟分配了一个号码,然后告诉他们去一个位置,这取决于他们的号码。我用过这个号码分配码,但告诉海龟们要蜂拥到其他拥有相同号码的海龟身上。谢谢!实际上我刚买了那本书,但还没看完。“海龟分组示例”模型实际上做了类似的事情,它给每只海龟一个数字。我用它来得到我想要的。