同様のタスクにグラフツールを使用しました。
Graph-tool は、グラフ (別名ネットワーク) の操作と統計分析のための効率的な Python モジュールです。max-flow アルゴリズムに関する優れたドキュメントもあります。
現在、グラフツールは特定のアルゴリズムをサポートしています:
- Edmonds-Karp - Edmonds-Karp アルゴリズムを使用して、グラフの最大フローを計算します。
- 再ラベルのプッシュ - 再ラベルのプッシュ アルゴリズムを使用して、グラフの最大フローを計算します。
- Boykov Kolmogorov - Boykov-Kolmogorov アルゴリズムを使用して、グラフの最大フローを計算します。
ドキュメントからの例: Boykov-Kolmogorov を使用して maxflow を見つける:
>>> g = gt.load_graph("flow-example.xml.gz") #producing example is in doc
>>> cap = g.edge_properties["cap"]
>>> src, tgt = g.vertex(0), g.vertex(1)
>>> res = gt.boykov_kolmogorov_max_flow(g, src, tgt, cap)
>>> res.a = cap.a - res.a # the actual flow
>>> max_flow = sum(res[e] for e in tgt.in_edges())
>>> print max_flow
6.92759897841
>>> pos = g.vertex_properties["pos"]
>>> gt.graph_draw(g, pos=pos, pin=True, penwidth=res, output="example-kolmogorov.png")
この例をランダムな有向グラフ (ノード = 4000、頂点 = 23964) で実行したところ、すべてのプロセスにかかった時間はわずか11 秒でした。
代替ライブラリ: