如何在networkx中调整LFR_benchmark_graph方法以生成大图

时间:2018-12-04 08:17:11

标签: python graph networkx

我想通过以下方式生成随机社区:

from random import randint
import networkx
from networkx.algorithms.community import LFR_benchmark_graph

n = [250, 500, 600, 700, 800, 900, 1000, 1200, 1500, 1600, 1900, 2000, 2500, 2800, 3000, 3500, 4000, 4600, 5000]
index = randint(0, len(n) - 1)
tau1 = 3
tau2 = 1.5
mu = 0.1
mm = randint(0, len(n) - 1)
G = LFR_benchmark_graph(n[index], tau1, tau2, mu, average_degree=5,
                        min_community=20, seed=10)

但出现提到的错误:

networkx.exception.ExceededMaxIterations: Could not assign communities; try increasing min_community

当我使用大小250时,我有任何错误,但是当我想使用其他大小来生成具有随机大小的网络时,会出现该错误。我该如何解决?

2 个答案:

答案 0 :(得分:1)

在文档页面中已提及:

尽管作者将算法描述为非常健壮, 在开发过程中表明参数集略窄 可能成功生成图形。一些建议 发生异常时提供。

以下是一些对我有用的配置:

def genrate_lfr_graph(size=250):
    params = {"n":size, "tau1":2, "tau2":1.1, "mu":0.1, "min_degree":20, "max_degree":50}

    G = LFR_benchmark_graph(params["n"], params["tau1"], params["tau2"], params["mu"], 
                        min_degree=params["min_degree"],
                        max_degree=params["max_degree"],
                        max_iters=5000, seed = 10,
                        )
    print("Generation Completed")
    return G  


sizes = [250, 500, 600, 700, 800, 900, 1000, 1200, 2000, 2500, 2800, 3000]
for n in sizes:
    G = genrate_lfr_graph(size=n)

答案 1 :(得分:0)

如在networkx文档中提到的,如果出现以下任何情况,将发生此类错误:

如果不能在max_iters迭代次数内创建有效的度数序列。 如果不能在max_iters迭代次数内创建有效的社区大小集。 如果无法在10 * n * max_iters迭代次数内创建有效的社区分配。

我的建议是首先尝试使用任何其他论文中描述的参数。例如,对于具有1000个节点的网络,我将使用以下参数:n = 1000,tau1 = 3,tau2 = 1.1,mu = 0.1,avg_degree = 10,max_degree = 50,min_community = 10,max_community = 50。