【问题标题】:Python: how to compute a fast measure of robustness on a network?Python:如何计算网络鲁棒性的快速度量?
【发布时间】:2016-06-23 15:00:24
【问题描述】:

我正在使用常规的NxN 网络,我需要确定其稳健性的衡量标准(即承受故障的能力)。为此,我使用average node connectivity,由this function 描述。

但是,正如您在下面看到的那样,这种计算被证明是极其缓慢且计算量大的。我应该在60,000 次以下运行脚本,所以时间是一个非常关键的因素。出于这个原因,我愿意减小网络的规模,但我想在网络规模和计算需求之间找到最佳折衷。

我的问题:

有没有更快的方法来得出相同的结果?或者您是否建议采取其他措施以避免长时间计算?

剧本和时间安排:

'''
Timing the average node connectivity function
'''

from __future__ import division
import networkx as nx
import time

#Lattice network
N=10 #This can be 10, 20, 30, ...
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)
inds=labels.keys()
vals=labels.values()
inds.sort()
vals.sort()
pos2=dict(zip(vals,inds))

start_time = time.clock()
conn=nx.average_node_connectivity(G)
print('N: '+str(N))
print('Avg node conn: '+str(round(conn, 3)))
print("--- %s seconds ---" % (time.clock() - start_time))

前两个时间:

N: 10
Avg node conn: 3.328
--- 6.80954619325 seconds --- #This must be multiplied by 60,000

N: 20
Avg node conn: 3.636
--- 531.969059161 seconds --- #This must be multiplied by 60,000

【问题讨论】:

  • 在这种情况下,“稳健性”对您意味着什么?
  • 承受失败的能力。
  • 所以我假设大卫提供的是你所追求的——但你应该知道,可能会发生许多不同的“失败”。取决于这对您意味着什么,这可能是也可能不是计算的正确数量。我们可以谈论节点失败。我们可以谈论边缘失败。承受故障可能意味着整个网络仍然保持连接,或者它可能意味着大部分网络保持连接,或者它可能意味着路径长度不会变长......等等。

标签: python algorithm performance networkx computation


【解决方案1】:

NetworkX 函数必须与有向图一起使用,因此它使用计算 V*(V-1) 流的蛮力算法。由于您有一个无向图,您可以改为计算 V-1 流中的Gomory--Hu tree,然后使用树结构快速确定最小切割(实际上,您可以计算 G--H 树的平均节点连接性线性或者可能是线性时间,但我希望二次可能会很好)。

(无耻插件:由于您正在使用具有单位容量的平面图,如果您迫切需要速度,您可以实现我和 Philip Klein 的线性时间最大流量算法,但我希望通常的算法将是在实践中大致是线性时间。)

【讨论】:

  • 这是一个真正熟悉这个问题的人。很好的答案!我不会删除我的,但这会提供更多信息。
【解决方案2】:

这里计算的平均节点连通性是G的所有节点的本地节点连通性的平均值。所以这个函数将遍历所有可能的对,这使得它变得如此缓慢。一种建议是保留您想要的网络大小,然后从所有可能的节点对中随机抽样,并根据该样本计算连通性估计值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 2016-05-19
    • 1970-01-01
    相关资源
    最近更新 更多