NetLogo:如何创建具有定义数量的其他海龟的链接

问题描述 投票:0回答:1

我想创建一个(无标度)网络,其中每只乌龟都连接到其他海龟的特定数字,比如四个。为了让一些海龟有很多连接,而其他海龟很少(但不少于四个),我的想法是让每只乌龟有四个外链,让内链接必然会有所不同。使用该代码构建一个可用于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上找到

netlogo
1个回答
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]应该做什么,但它似乎正在创建四个最高度龟的列表。但是优先附着算法允许用甚至低度节点创建链接,只是概率较低。

© www.soinside.com 2019 - 2024. All rights reserved.