NETLOGO:使用确切数量的链接建立网络

时间:2015-11-01 22:18:13

标签: hyperlink nodes netlogo

我需要在代理与链接连接时进行网络,并且我希望它能够使每个代理都有确切数量(变量)的链接。让我们说,例如,我想要从每个代理到另一个代理的3个链接。不多也不少。我试图使用这段代码:

let num-links (links * number) / 2 
  while [count links < num-links ]
  [
ask one-of turtles
[
  let choice (min-one-of (other turtles with [not link-neighbor? myself])
               [distance myself])
  if choice != nobody [ create-link-with choice ]
]
]

其中“number”是节点数,“links”是我想从每个代理发送的链接数量 - 但不幸的是,这段代码的工作原理是“链接”实际上只是一个平均的节点级别。因此,如果我想要3个链接,我可以获得所有代理(例如两个除外),其中3个链接从它们开始,但其中一个只有1个链接而另外5个(平均值为3)。有什么方法怎么做。

有没有办法如何做到这一点,以便每个“链接”实际上是两个有向链接,一个从节点进入,一个进入节点?

最后一个问题。我想给这个链接一个变量,但我需要这样做,以便每个代理的这些变量的总和正好是100(作为百分比)。

有任何帮助吗?非常感谢你。

1 个答案:

答案 0 :(得分:2)

以下是我为小型网络(易于理解)创建固定学位网络的方法

to make-legal
  create-turtles 100 [setxy random-xcor random-ycor]
  let target-degree 5
  while [ min [ count my-links ] of turtles < target-degree ]
  [ ask links [die]
    makeNW-Lattice target-degree
  ]
end

to makeNW-Lattice [DD]
  ask turtles
  [ let needed DD - count my-links
    if needed > 0
    [ let candidates other turtles with [ count my-links < DD ]
      create-links-with n-of min (list needed count candidates) candidates
    ]
  ]
end

有关更大网络的更有效方法,请参阅NetLogo Efficient way to create fixed number of links

请针对单独的问题提出单独的问题

更新以确保所有节点都具有所需的学位,以回应评论

基于以下代码,基本生成器在{50}的时间内完成了legal网络。因此,我只是将原始代码放入while循环中,如果不合法,则重新生成。对于大型网络来说,这不是一个好的解决方案,但这是一个合理的黑客攻击。

to setup
  let mins (list 0 0 0 0 0 0)
  repeat 100
  [ ask turtles [die]
    ask links [die]
    makeNW-lattice
    let this-min min [ count my-links ] of turtles
    set mins replace-item this-min mins (item this-min mins + 1)
  ]
  print mins
end