NW扩展 - 使用nw:generate的多个图形?

时间:2014-08-13 15:16:00

标签: netlogo

我想在一个世界中构建几个随机子图。因为,一般来说,子图的数量不固定,我不想为每个子图使用不同的品种。到目前为止,我使用一种非常粗鲁的方法(见下文)与“手工”随机网络,为海龟提供“my-group”变量。我是NW扩展的新手,我想知道是否可以使用nw:generate-random模块创建多个子图,而不使用每个子图的品种。 你有什么建议吗? 谢谢,汉娜

to create-subgroups
  crt network_size [ setxy random-xcor random-ycor ]
  let group-n 0
  repeat network_size / group_size [ ;; group_size is always a factor of network_size
    ask turtles with [who >= (group-n * group_size) and who < ((group-n + 1) * group_size)] [
      set my-group group-n           ;; get group number
      repeat (random 4) + 1 [        ;; create links
        let target one-of other turtles with [who >= (group-n * group_size) and who < ((group-n + 1) * group_size)]
        if target != nobody [
          create-group-link-with target ] ] ]
    set group-n group-n + 1 ]
end

1 个答案:

答案 0 :(得分:3)

好问题!这应该是生成您当前正在生成的相同图形的更好方法:

to create-subgroups
  repeat network_size / group_size [
    let group (turtle-set)
    crt group_size [ set group (turtle-set group self) ]
    ask group [
      create-group-links-with n-of (1 + random 4) other group
    ]
  ]
end

这假设group_size大于4(否则组中可能没有足够的海龟链接到)。

这里的想法是,不是用who号码跟踪群组中的人,而是可以使用龟群。除了更清洁之外,它还允许您将组存储在列表中供以后参考。因此,如果您已将全局groups设置为列表,则可以像这样添加组:

to create-subgroups
  repeat network_size / group_size [
    let group (turtle-set)
    crt group_size [ set group (turtle-set group self) ]
    ask group [
      create-group-links-with n-of (1 + random 4) other group
    ]
    set groups (lput group groups)
  ]
end

更新

您可以使用nw:generate-random的类似技巧。 nw:generate-random生成一个子图,它不会接管整个网络。海龟和链接将是您指定的任何品种,但它们只会连接到nw:generate-random当前创建的其他品种的海龟。因此,这应该工作:

to create-subgroups
  repeat network_size / group_size [
    nw:generate-random turtles links group_size connection-probability
  ]
end

其中connection-probability是新创建的子图中任何两只乌龟连接的概率。您仍然可以以与上述类似的方式阻止对新创建的海龟的引用以存储在列表中:

to create-subgroups
  let group (turtle-set)
  repeat network_size / group_size [
    nw:generate-random turtles links group_size connection-probability [
      set group (turtle-set group self)
    ]
  ]
  set groups (lput group groups)
end

这样,您就可以获得每个组件的海龟集,组件数量在行为空间运行中完全可变且可更改,并且组件彼此完全断开。