我正在尝试在Netlogo中创建一个带有可调伽玛参数的优先附件网络。我发布了一个更普遍的问题here,但我觉得我不完全理解优惠附件模型背后的机制,所以我会问一些其他问题。我对网络有以下定义:
“首先,根据分布p(k)αk^-γ为每个人分配一些关系,其中k是特定个体所具有的关系数。然后,随机地在个体之间建立联系,从在第一步中分配了最多关系的那些开始,直到在第一步中分配的所有连接都被考虑,或者在不增加每人的指定连接数的情况下不能进行其他连接。“
这个定义似乎表明首先必须创建节点,然后必须分配关系数,之后必须将这些关系定向到其他节点。如果我们看一下netlogo模型库中的优先附件模型,那么过程就大不相同了。即,顺序地创建节点。节点根据现有关系的数量选择要链接的人,就好像他们是彩票一样。
所以目前我正在试图找出使用可调伽玛创建网络的最佳方法。为了使第一个描述的过程工作,我应该创建一组节点,然后分配给定分布的关系数。这是怎么做到的?
谢谢!
编辑:
基于@JenB给出的答案。我想确保我正确理解它。如果我有以下代码:
to create-new-nodes [n]
clear-all
ask patches [ set pcolor white ]
create-nodes n [
set color red
set shape "circle"
]
reset-ticks
end
to wire-pref-attach
create-new-nodes num-nodes
set friends [;;distribution should be included here?]
ask nodes
[ let new-edges friends - count my-edges
if new-edges > 0
[ let candidates other nodes with [ count my-edges < friends ]
create-edges-with n-of min (list new-edges count candidates) candidates
[ hide-link ]
]
]
radial-layout
end
set friends
命令应该包含可调伽玛的分布,对吗?这是如何实现的?通过使用加权rnd扩展?另外,我仍然不完全理解 A 和 m 的含义。有人愿意用最基本的语言解释吗?我知道 A 被定义为固有的吸引力,m是新节点创建的边数,但这些参数的高(低)值如何转化为网络结构的结果?
EDIT2:
从其他来源收到建议,使用以下“黑客”来正确编程网络算法。代码应具有以下结构:
这被认为是一种黑客攻击,因为该模型每回合平均创建一个链接。它不会每回合创建一个链接。
我试图通过以下方式对其进行编码:
to wire-pref-attach
create-new-nodes num-nodes
let connect? False
let denominator (count nodes * k_i ^ gamma) ;;HOW TO DETERMINE K_i?
let numerator (k_i ^ gamma)
ask other nodes [
if (numerator / denominator) >= random-float 1.0 [
set connect? true
create-link-from myself
]
]
radial-layout
end
但是,我仍然不明白我应该如何确定k_i以及它如何与下面评论中提到的变量m和A相关。
答案 0 :(得分:2)
该'定义'是用于创建具有任意度分布的网络的通用算法。也就是说,您可以从您想要的任何分布中为每个节点分配预期或目标学位。然后,您只需创建链接,直到达到目标程度。与优先依恋无关,除了您提供的分配是使用优先附加机制时产生的分布。
我认为您需要Dorogovtsev等人(2000)使用优先链接的增长网络结构中描述的算法(如果您有权限,请参阅https://journals.aps.org/prl/pdf/10.1103/PhysRevLett.85.4633)。在Barabasi-Albert算法中,现有网络中用于连接新节点的节点的选择概率与度(与问题中的 k )成正比。在扩展算法中,每个节点都具有固有的吸引力 A ,而选择的概率则是 A + k 。
本文中的公式12描述了指数之间的关系(您的参数gamma为:gamma = 2 + A / m,其中 m 是每个节点附加的边数。
另请参阅NetLogo Efficient way to create fixed number of links了解可能的一般代码。