NetworkX:如何从一组预定位置构建Erdos-Renyi图?

时间:2015-10-30 15:59:39

标签: python algorithm random graph networkx

我需要构建类似Erdos-Renyi模型(随机图)的东西:

enter image description here

我需要从 deterministic 函数生成的节点位置字典中创建它。这意味着我不能允许Python随机决定每个节点的位置,因为我想决定它。功能是:

pos = dict( (n, n) for n in G.nodes() )

我首先考虑创建邻接矩阵,以便随机生成类似于每条边的(start,endpoint)对的内容,如下所示:< / p>

G=np.random.randint(0, 1, 25).reshape(5, 5)

然后我想到以某种方式将矩阵转换为我的边缘列表,如下所示:

G1=nx.grid_2d_graph(G)

但当然它不起作用,因为这个函数需要2个参数,而我只给它1个。

我的问题:

  1. 如何在NetworkX
  2. 中创建此类图表
  3. 如何确保所有节点都已连接?
  4. 如何确保在矩阵中分配1后,每对节点具有相同的概率登陆1
  5. 第3点的示例。想象一下,我们创建了根据pos确定位置的规则网格点。当我们开始连接网络并选择第一个节点时,我们要确保第一个边缘的端点是网络中剩余的N-1个节点之一(除了起始点)节点本身)。无论如何,我们希望确保所有N-1个节点都具有相同的概率连接到我们首先分析的节点。

    非常感谢!

1 个答案:

答案 0 :(得分:1)

我将尝试在以前有关此问题的问题的基础上保持一致。鉴于你有grid_2d_graph的键为&#39; n&#39;而不是(i,j)与relabel节点功能:

N = 10
G=nx.grid_2d_graph(N,N)
pos = dict( (n, n) for n in G.nodes() )
labels = dict( ((i, j), i + (N-1-j) * N ) for i, j in G.nodes() ) 
nx.relabel_nodes(G,labels,False)

现在你可以设置pos字典来映射&#39; n&#39;通过使用值切换键将键控节点指向已有位置。然后简单地调用Erdos-Renyi函数来创建具有概率&#39; p&#39;如第3点中所述,任何两个节点(自身边缘除外)之间存在边缘。然后用pos词典画画。

pos = {y:x for x,y in labels.iteritems()}
G2 = nx.erdos_renyi_graph(100,0.1)
nx.draw_networkx(G2, pos=pos, with_labels=True, node_size = 300)
print G.nodes()
plt.axis('off')
plt.show()

enter image description here

至于确保图表在第2点连接您不能保证图表以概率1连接,但您可以阅读一下有关鄂尔多斯巨人组件的大小-Renyi图。但是为了避免进入理论细节,人们几乎可以肯定,当λ为​​n * p(这里它们是100 * 0.1)大于4时,图形将被连接。虽然对于较小的图形(如100个节点),你最好增加拉姆达。根据我自己使用n = 100和p = 0.1的经验,仅在大约0.2%的时间内产生了非连通图,这是在数千次模拟之后。无论如何,您始终可以确保生成的图表是否与is_connected方法相关联。