You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetworkX maximum_flow部分节点对计算崩溃问题求助

解决NetworkX调用maximum_flow时报错ValueError: min() arg is an empty sequence的问题

我来帮你分析下这个问题,结合你提供的报错栈和NetworkX中preflow_push算法的实现逻辑,这个错误大概率是以下几种原因导致的:

1. 路径上的边容量配置异常

从报错栈能看到,错误出现在relabel函数里——算法试图找节点u的邻居中满足flow < capacity的节点,计算它们的最小高度再加1,但找不到这样的节点,就抛出了空序列的错误。

即使你确认source和target之间存在路径,也可能出现这种情况:

  • 路径上的某条边容量被设置为0,或者根本没给边添加capacity属性(虽然NetworkX默认容量是1,但如果是自定义的图结构,有可能被误覆盖);
  • 如果是有向图,路径的方向和边的方向不匹配,导致残差网络中没有可增广的正向边,而反向边的容量也为0(比如初始时没有流量,反向边容量就是0)。

解决办法:

  • 遍历source到target的最短路径,检查每条边的容量:
    path = nx.shortest_path(G, source="Sink_0", target="Aircraft2_32")
    for u, v in zip(path[:-1], path[1:]):
        print(f"边{u}->{v}的容量: {G[u][v].get('capacity', 1)}")
    
  • 确保所有路径上的边容量都大于0,且边的方向符合有向图的连通要求。

2. 使用的preflow_push算法存在边缘场景bug

你当前使用的NetworkX版本看起来是适配Python2.7的旧版本(从路径里的site-packages/networkx/algorithms/flow/preflowpush.pyc能看出来),旧版本的preflow_push算法在处理某些特殊图结构时(比如节点高度异常、残差网络局部阻塞)可能存在逻辑漏洞。

解决办法:

  • 换用其他更稳定的最大流算法,比如Edmonds-Karp算法,调用方式如下:
    from networkx.algorithms.flow import edmonds_karp
    nx.maximum_flow(G, "Sink_0", "Aircraft2_32", flow_func=edmonds_karp)
    
  • 如果条件允许,升级到Python3环境并安装最新版NetworkX(Python2.7已停止维护,旧版NetworkX的bug不会再被修复)。

3. 节点的残差网络状态异常

在算法执行过程中,某个节点的所有出边都处于满流状态(flow == capacity),且没有反向边可以利用,导致算法无法找到可增广的路径。这种情况可能是图的结构本身存在“隐性阻塞”——比如source到target的路径虽然存在,但所有路径上的边都被其他流量占满了(如果之前对图执行过流计算但没有重置)。

解决办法:

  • 确保每次计算最大流前,图是“干净”的状态,没有残留的流量数据。如果之前对图做过流操作,需要重新加载原图或者重置边的flow属性:
    for u, v, attr in G.edges(data=True):
        attr.pop('flow', None)
    

内容的提问来源于stack exchange,提问作者radar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:10:23