【问题标题】:NetLogo: How to create links with a defined number of other turtlesNetLogo:如何创建与定义数量的其他海龟的链接
【发布时间】:2018-09-04 14:51:00
【问题描述】:

我想创建一个(无标度)网络,其中每只海龟都连接到特定数量的其他海龟,比如四只。为了让一些海龟有很多连接,而另一些只有很少(但不少于四个),我的想法是让每只海龟有四个外链,而内链必然会有所不同。使用 pg 上提供的构建 Barabasi-Albert 无标度网络的代码。 131 在 Scott 和 Koehler 的“A Field Guide to NetLogo”作为起点,我的代码包含在下面。

我的问题是如何让每只海龟连接到其他四只海龟。

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】:

    由于您正在做一个有向网络,您只需告诉每只海龟选择其他 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] 应该做什么,但它似乎是在创建四个最高等级海龟的列表。但是优先连接算法允许创建具有甚至低度节点的链接,只是概率更低。

    【讨论】:

    • 您好 JenB!感谢您及时的回复。由于我刚开始学习 ABM 和 NetLogo,所以我肯定很困惑,所以上面的代码必然包含试错过程中的错误。我会熟悉 'rnd' 扩展
    • 好的。您是否使用其他语言进行编程,或者您也是编程新手?除了任何其他问题,我强烈建议您进行更多迭代编码。获取代码来创建网络,然后担心你不同品种的海龟,例如。
    • 我之前只使用过Stata,所以退后一步可能是最好的!
    • @henrik 欢迎来到 SO;如果答案解决了您的问题,请接受(见What should I do when someone answers my question?)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多