使用有向图上的成功器计算节点属性

时间:2017-07-12 15:18:39

标签: python networkx

我正在使用NewtworkXPython为我的工程论文研究径向网络的配电可靠性指数工具。我正在努力编写一个命令,该命令将向我的累加器添加满足特定条件的特定边缘下游的所有节点属性。我已尝试使用后继功能NetworkX提供但是它只计算满足边缘条件的第一个后继条件,而不是有向路径的所有下游条件。我正在寻求指导,因为这令我感到困惑,而我似乎无法解决这个简单的任务。

import networkx as nx
import matplotlib.pyplot as plt

H=nx.DiGraph()

H.add_node(1, loads=2)
H.add_node(2, loads=2)
H.add_node(3, loads=5)
H.add_node(4, loads=5)

H.add_edge(1,2,fault=True, switch=True)
H.add_edge(2,3,fault=False, switch=True)
H.add_edge(3,4,fault=False, switch=True)

nx.draw(H)
plt.show()

a=0
for n1,n2 in H.edges():
    if H[n1][n2]['fault']==True:
        a=a+H.node[n2]['loads']
            for n in H.successors(n2):
                a=a+H.node[n]['loads']

我的算法返回a=7,正确答案为a=12,依此类推所有符合条件的边缘。显然是我在写错了指令。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想要获得所有的继承人,这样你就可以使用广泛的第一次搜索

import networkx as nx

H=nx.DiGraph()

H.add_node(1, loads=2)
H.add_node(2, loads=2)
H.add_node(3, loads=5)
H.add_node(4, loads=5)

H.add_edge(1,2,fault=True, switch=True)
H.add_edge(2,3,fault=False, switch=True)
H.add_edge(3,4,fault=False, switch=True)


source = 1
a = H.node[source]['loads']
nofault = [t for s,t in nx.bfs_edges(H,source=source) if not H.edge[s][t]['fault']]
a += sum(H.node[t]['loads'] for t in nofault)
print(a) #12