Metis for Python
Metis (グラフ分割ソフトウェア) の Python ラッパーであるを使用しています。すべてがインストールされ、正しく動作しているように見えますが、入力するグラフを作成する方法がわかりません。
http://metis.readthedocs.org/en/latest/#exampleにオンラインの例があります。
>>> import networkx as nx
>>> import metis
>>> G = metis.example_networkx()
>>> (edgecuts, parts) = metis.part_graph(G, 3)
>>> colors = ['red','blue','green']
>>> for i, p in enumerate(parts):
... G.node[i]['color'] = colors[p]
...
>>> nx.write_dot(G, 'example.dot') # Requires pydot or pygraphviz
この例を実行しましたが、正常に動作します。ただし、この例では、グラフ「example_networkx()」の作成方法を指定していません。networkx でグラフを作成しようとしました: http://metis.readthedocs.org/en/latest/#metis.networkx_to_metis
私のコードは次のとおりです。
>>> A=nx.Graph()
>>> A.add_edges_from([(3,1),(2,3),(1,2),(3,4),(4,5),(5,6),(5,7),(7,6),(4,10),(10,8),(10,9),(8,9)])
>>> G = metis.networkx_to_metis(A)
>>> (edgecuts, parts) = metis.part_graph(G, 3)
最後の行でエラーが発生します。エラーは、Metis 組み込みコードの次の行にまでさかのぼります。
in part_graph(graph, nparts, tpwgts, ubvec, recursive, **opts)
graph = adjlist_to_metis(graph, nodew, nodesz)
in adjlist_to_metis(adjlist, nodew, nodesz)
m2 = sum(map(len, adjlist))
TypeError: object of type 'c_long' has no len()
また、隣接リストによってグラフを作成しようとしました: http://metis.readthedocs.org/en/latest/#metis.adjlist_to_metis しかし、これは前と同じエラーを出します。
誰かがこの問題を抱えているかどうか、または私が間違っていることを知っているかどうか疑問に思っていました。
Centos 6.5でpython 2.7を使用しています