<p>我用<a href="https://graph-tool.skewed.de" rel="noreferrer">graph-tool</a>来完成类似的任务。</p>
<p>Graph tool是一个高效的python模块,用于图形的操作和统计分析(也称为网络)。他们甚至有关于<a href="https://graph-tool.skewed.de/static/doc/flow.html" rel="noreferrer">max-flow algorithms</a>的优秀文档。</p>
<p>当前图形工具支持给定的算法:</p>
<ul>
<li>Edmonds Karp-使用Edmonds Karp算法计算图上的最大流量。</li>
<li>Push relabel-使用Push relabel算法计算图形上的最大流。</li>
<li>Boykov Kolmogorov-使用Boykov Kolmogorov算法计算图上的最大流。</li>
</ul>
<p>示例取自文档:<a href="http://projects.skewed.de/graph-tool/doc/flow.html#graph_tool.flow.boykov_kolmogorov_max_flow" rel="noreferrer">find maxflow using Boykov-Kolmogorov</a>:</p>
<pre><code>>>> 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")
</code></pre>
<p>我用随机有向图(nodes=4000,vertices=23964)执行了这个例子,所有的过程只花了<strong>11秒。</p>
<p>替代库:</p>
<ul>
<li><a href="http://igraph.sourceforge.net/" rel="noreferrer">igraph</a>-主要用C实现,但有Python和R接口</li>
<li>链接主题<a href="https://stackoverflow.com/questions/2517026/graph-theory-in-python">"Python packages for graph theory"</a></li>
<li>或<a href="http://wiki.sagemath.org/graph_survey#Existing_Graph_Theory_software" rel="noreferrer">Sage wiki</a>中选定的其他图形工具。</li>
</ul>