NetLogo:如何使用定义数量的其他乌龟创建链接

时间:2018-09-04 14:51:01

标签: netlogo

我想创建一个(无标度)网络,其中每只乌龟都连接到特定数量的其他乌龟,例如四只。为了允许一些乌龟拥有许多联系,而另一些乌龟却很少(但不少于四个),我的想法是让每只乌龟都有四个外链,而让内链必然有所不同。使用代码构建pg上可用的Barabasi-Albert无标度网络。作为起点,在Scott和Koehler的“ NetLogo现场指南”中的第131条中,包含了我的代码。

我的问题是如何使每只乌龟都与另外四只乌龟相连。

breed [liberals liberal]
breed [conservatives conservative]

to setup
    clear-all
    set-default-shape turtles "circle"
    create-liberals 5 [
    set adopt? false
    let n count turtles
    set color blue
    ]
create-conservatives 20 [
    set adopt? false
    let n count turtles
    set color red
    ]
    let m 4
    let p .05
    set my-threshold my-threshold
ask turtles[
    let me self
    let degrees max-n-of m turtles [count link-neighbors]
    foreach (sort degrees) [ [?] ->
    let chance random-float 1.0
    if ( ? != self) and (chance < p ) [
    ask self [ create-link-to ? ]
    ]
    ]
]
ask turtles with [(count out-link-neighbors) = 0 ] [
let degrees max-n-of m turtles [ count link-neighbors ]
let t one-of degrees
foreach (sort degrees) [ 
ask self [ if ( t != self) [ create-link-to t] ]
]
]
reset-ticks
end

上面的代码是我尝试重新创建Paul Ormerod模型的一部分,该模型可从https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1468-0270.2006.00611.x

获得。

1 个答案:

答案 0 :(得分:2)

由于您正在建立定向网络,因此仅告诉每个乌龟选择另外4只乌龟并连接到它们就不会有任何问题。的代码将是:

ask turtles
[ create-links-to n-of 4 other turtles
]

请注意,在无向网络中,这要困难得多,因为它们“接收”的链接会导致总体上过多的链接。然后,您需要执行类似NetLogo Efficient way to create fixed number of links

的操作

但是,这并不能达到您指定的优先依恋(无标度,Barabasi-Albert或您想称呼的东西)学位分配目标。产生该结果的机制是,乌龟通过加权随机选择选择乌龟以建立联系,权重为标准化程度。您需要使用rnd扩展名,并且可以使用weighted-n-of原语。

我还指出了您的代码中的一些一般问题,这些问题与(我认为)关于优先附件算法如何工作和/或NetLogo如何工作的困惑有关。 weighted-n-of原语将消除您查看随机数的需要,并应大大简化您的代码。但是,我不清楚let degrees max-n-of m turtles [count link-neighbors]应该做什么,但是它似乎正在创建四个度最高的海龟的列表。但是,优先附件算法允许使用甚至较低度的节点创建链接,但概率较低。