2011-01-19 7 views
2

私は、都市や州の名前や緯度や場所などのグローバルな測位データを取るプロジェクトを設計しようとしています。私はまた、すべての都市の間に距離を持っています。私はこの情報すべてを使ってグラフを作成し、それを操作していくつかのグラフアルゴリズムを実行したいと思います。私は各場所のデータを含む都市オブジェクトを持つことに決めました。オブジェクトを区別するためのハッシュ関数が必要ですか?ノードを結合しエッジを削除するグラフアルゴリズムをどのように処理すればよいですか?オブジェクトをnetworkxで動作させるにはどうすればいいですか?

def minCut(self): 
    """Returns the lowest-cost set of edges that will disconnect a graph""" 

    smcut = (float('infinity'), None) 
    cities = self.__selectedcities[:] 
    edges = self.__selectededges[:] 
    g = self.__makeGRAPH(cities, edges) 
    if not nx.is_connected(g): 
     print("The graph is already diconnected!") 
     return 
    while len(g.nodes()) >1: 
     stphasecut = self.mincutphase(g) 
     if stphasecut[2] < smcut: 
      smcut = (stphasecut[2], None) 
     self.__merge(g, stphasecut[0], stphasecut[1]) 
    print("Weight of the min-cut: "+str(smcut[1])) 

これは本当に悪い形です。私は元のプログラムを書き直していますが、これは以前のバージョンから取ったアプローチです。

+0

:ここ

は(愚かな)の例ですか? – Spaceghost

答えて

1

インストールしたnetworkxのバージョンに応じて、使用可能なmin_cutの組み込み実装があります。

私は1.0RC1パッケージをインストールしましたが、利用できませんでしたが、私は1.4にアップグレードし、min_cutはそこにあります。どのようにいくつかのサンプルコードについて

import networkx as nx 
g = nx.DiGraph() 
g.add_nodes_from(['London', 'Boston', 'NY', 'Dallas']) 
g.add_edge('NY', 'Boston', capacity) 
g.add_edge('Dallas', 'Boston') 
g.add_edge('Dallas', 'London') 
# add capacity to existing edge 
g.edge['Dallas']['London']['capacity'] = 2 
# create edge with capacity attribute 
g.add_edge('NY', 'London', capacity=3) 
print nx.min_cut(g, 'NY', 'London') 
0

都市オブジェクトのハッシュ関数を作成する必要はありません。CityオブジェクトをNetworkxに直接渡すことができます - チュートリアル「ノードは任意のハッシュ可能なオブジェクト(例:テキスト文字列、画像、XMLオブジェクト) 、別のグラフ、カスタマイズされたノードオブジェクトなどが含まれる。

都市のリストを反復してノードとして追加し、距離情報を反復してグラフを作成できます。

チュートリアルを見ましたか? http://networkx.lanl.gov/tutorial/tutorial.html

+0

はい私はチュートリアルを読んだ。私はグラフ上でmin-cutアルゴリズムを実行したいときにノードをどのように扱うかを知りません。 – Trim

+0

いくつかのサンプルコードを投げて、わかりやすく見てみましょう。 – Spaceghost

+0

完了。見てみな – Trim

0

ノードをマージすると、新しいノードを作成し、これらの新しいノードをマージされた都市のリストにハッシュすることができます。たとえば、上記のコードでは、stphasecut [1]と[2]がリストであると仮定して、新しいノードにlen(g)という名前をつけ、stphasecut [0] + stphasecut [1]#にハッシュすることができます。

関連する問題