我想创建一个(无标度)网络,其中每只乌龟都连接到其他海龟的特定数字,比如四个。为了让一些海龟有很多连接,而其他海龟很少(但不少于四个),我的想法是让每只乌龟有四个外链,让内链接必然会有所不同。使用该代码构建一个可用于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上找到
由于您正在进行定向网络,因此只需告诉每只海龟选择其他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]
应该做什么,但它似乎正在创建四个最高度龟的列表。但是优先附着算法允许用甚至低度节点创建链接,只是概率较低。