我想通过以下方式生成随机社区:
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时,我有任何错误,但是当我想使用其他大小来生成具有随机大小的网络时,会出现该错误。我该如何解决?
答案 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。