2017-07-12 20 views
0

私は現在、NewtworkXPythonを使用して、私の工学論文の放射状ネットワーク用の配電信頼性指標ツールを開発中です。私は特定の条件を満たす特定のエッジの下流にあるすべてのノード属性をアキュムレータに追加するコマンドを書くのに苦労しています。私は後継機能を使用してみましたNetworkXしかし、それはすべての下流の代わりにエッジ条件を満たす最初の後継者をカウントします。私はこれが私を混乱させるので指導を求めています。私はこの単純な仕事のまわりで私の仕事をすることはできません。有向グラフでsuccesorsを使用してノードの属性をカウントする

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ことなどの基準を満たすすべてのエッジのためでしょう。明らかに間違った指示を書いているのですか?

+0

こんにちはのように検索して、スタックオーバーフローを歓迎する幅を使用できるように、後継者のすべてを取得したい右のあなたの質問を理解していれば、[通過する時間がかかるしてください(ここであなたの最初のバッジを獲得する)あなたの方法を知り、[最小限の、完全で、検証可能な例を作成する方法を読む](https:// stackoverflow .com/help/mcve)また、[How to Ask Questions(よくある質問をする方法)](https://stackoverflow.com/help/how-to-ask)をチェックすると、フィードバックや役に立つ回答を得る機会が増えます。 – DarkCygnus

+0

なぜ12歳になるのか説明できますか? – DarkCygnus

答えて

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 
+0

Aricはアドバイスをしてくれてありがとう、アルゴリズムは正しく動作しています。アキュムレータを作成して、特定のノードになるソース割り当てを一度に "自動化"できました。再び、ありがとう! – David

関連する問題