价格模型的 Python 实现 - 有向图的无标度网络增长模型

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

我正在尝试在Python中的networkx中创建一个无标度网络增长模型。 Github 上有大量关于 Barabassi-Albert 模型的资源,但我的图需要有向,而 BA 仅为无向图设计。

我知道价格模型实际上是 BA 模型的有向等价物,但我找不到任何在线资源来了解如何在 Python(最好是 nx)中实现该模型。有人能指出我正确的方向吗?

我尝试调整 BA 模型以考虑出境学位,但到目前为止实施尚未奏效:

    deg = G.out_degree(n) ## number of outbound edges from this node
    print('out degree',deg)
    deg_weight = deg / (2 * len(G.edges()))
    print('degree weighting:',deg_weight)
    edge_weight = edges_per_node[pre_node_type] ## weighting by observed connectivity
    adjusted_prob = prob * deg_weight * edge_weight
    n_probs.append(adjusted_prob)
    nodes.append(n)
python neural-network networkx bayesian-networks
1个回答
0
投票

在 Barabasi-Albert 图生成的源代码中,它们从具有 m+1 个节点的初始星形网络开始,在 networkx 实现中是一个无向网络。您可以修改此部分以生成 m+1 个节点的有向星图,其中 m 个边从中心节点出去,有点像这样:

def directed_star_graph(n):
  G = nx.DiGraph()
  for node in range(n):
    G.add_edge(0, node+1)
  return G

然后更改源代码中的行

repeated_nodes = [n for n, d in G.degree() for _ in range(d)]

repeated_nodes = [n for n, d in G.in_degree() for _ in range(d)]

使得每个新进入的节点都会附加到 m 个节点,从而随着时间的推移,平均出度常数为 m,并且附加是优先的,即与现有节点的入度成正比。

当您生成大型网络时,初始化并不重要。

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