我已經使用graph-tool進行類似的任務。
圖形工具是一個高效的python模塊,用於圖形的操作和統計分析(也稱爲網絡)。他們甚至有關於max-flow algorithms的高超文件。
目前圖的工具支持給定的算法:
- 埃德蒙斯-卡普 - 計算與所述Edmonds-Karp算法的曲線的最大流量。
- 推送重貼標籤 - 使用推貼標籤算法計算圖上的最大流量。
- Boykov Kolmogorov - 用Boykov-Kolmogorov算法計算圖上的最大流量。
實施例從文檔採取:find maxflow using Boykov-Kolmogorov:
>>> 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秒了。
替代庫:
您是否嘗試過使用Psyco(http://psyco.sourceforge.net/)?這裏的maximum_flow代碼都是用純Python編寫的,所以Psyco可以大幅提高速度。 – 2010-10-24 16:51:18