【问题标题】:Putting turtles into groups: modified partners example?将海龟分组:修改过的伙伴示例?
【发布时间】: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


【解决方案1】:

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

在这种情况下,组将具有该标识符。因此,当集群发生时,集群中的那些人允许其他人加入,并且将组标识符提供给创建的新成员或组。如果他们离开,则重置标识符。您可以轻松地围绕新关系[两只新海龟相遇并生成新的组号]、组增长[组中存在的数量和新到达或被拒绝的数量]以及离开组的规则[重置组号]。这样做的好处是您还可以轻松地创建具有相同组号的代理集,从而让他们都做同样的事情。

【讨论】:

  • 谢谢!我实际上只是买了那本书,但还没有读完。 “分组海龟示例”模型实际上做了类似的事情,它给每只海龟一个数字。我用它来得到我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多