使用 gnp_random_graph 创建多个图表

Creating multiple graphs using gnp_random_graph

在使用 NetworkX 包时,我的任务是创建具有给定 n 个节点数和 p 概率的多个随机图,这是我的代码:

def random_networks_generator(n,p,num_networks=1, directed=False,seed=30030390):
    Graph_list=[]
    for num in range (0,num_networks):
        G=nx.gnp_random_graph(n,p,seed,directed)
        Graph_list.append(G)
    return Graph_list

但是,每次迭代都会创建完全相同的图(甚至连边都完全相同)

有人知道哪里出了问题吗?

更新:

在尝试使用不带“种子”参数的函数后,图形是随机的,但是有没有办法在仍然使用“种子”参数的同时对问题进行排序?

目前您在循环中使用相同的固定种子进行所有调用。根据 gnp_random_graph or more general Randomness 的文档,通过修复种子,您可以确保始终收到完全相同的随机图。

例如:

G_1=nx.gnp_random_graph(100, .5, 42)
G_2=nx.gnp_random_graph(100, .5, 42)
G_3=nx.gnp_random_graph(100, .5, 43)

G_1G_2 将具有完全相同的边,而 G_3 得到不同的种子并且很有可能不同(如本例所示)。

您可以通过以下代码获得检索相同图表列表(由初始种子确定)的期望行为:

def random_networks_generator(n, p, num_networks=1, directed=False, seed=30030390):
    Graph_list=[]
    for num in range (0,num_networks):
        G=nx.gnp_random_graph(n, p, seed + num, directed)
        Graph_list.append(G)
    return Graph_list

关于种子的更多背景:

  • What is the use of numpy.random.seed() Does it make any difference?
  • random.seed(): What does it do?