networkx.algorithms.flow.maximum_flow
的用法。用法:
maximum_flow(flowG, _s, _t, capacity='capacity', flow_func=None, **kwargs)
找到最大single-commodity 流。
- flowG:NetworkX 图
图表的边应该有一个名为‘capacity’ 的属性。如果此属性不存在,则认为边具有无限容量。
- _s:节点
流的源节点。
- _t:节点
流的汇节点。
- capacity:string
图 G 的边应该有一个属性容量,表示边可以支持多少流量。如果此属性不存在,则认为边具有无限容量。默认值:‘capacity’。
- flow_func:函数
用于计算容量图中一对节点之间的最大流量的函数。该函数必须接受至少三个参数:Graph 或 Digraph、源节点和目标节点。并返回一个遵循 NetworkX 约定的残差网络(参见注释)。如果 flow_func 为 None,则使用默认的最大流量函数 (
preflow_push()
)。有关替代算法,请参见下文。默认函数的选择可能会因版本而异,不应依赖。默认值:无。- kwargs:任何其他关键字参数都被传递给函数
计算最大流量。
- flow_value:整数,浮点数
最大流量的值,即来自源头的净流出量。
- flow_dict:dict
包含通过每条边的流的值的字典。
- NetworkXError
该算法不支持MultiGraph和MultiDiGraph。如果输入图是这两个类之一的实例,则会引发NetworkXError。
- NetworkXUnbounded
如果图具有无限容量的路径,则图上可行流的值在上面是无界的,并且该函数会引发 NetworkXUnbounded。
参数:
返回:
抛出:
注意:
flow_func 参数中使用的函数必须返回遵循 NetworkX 约定的残差网络:
来自输入图
G
的残差网络R
与G
具有相同的节点。R
是包含一对边的 DiGraph(u, v)
和(v, u)
iff(u, v)
不是自环,并且在G
中至少存在(u, v)
和(v, u)
之一。对于
R
中的每条边(u, v)
,如果G
中存在R[u][v]['capacity']
,则R[u][v]['capacity']
等于G
中的(u, v)
的容量,否则为零。如果容量是无限的,R[u][v]['capacity']
将有一个不影响问题求解的高任意有限值。该值存储在R.graph['inf']
中。对于R
中的每条边(u, v)
,R[u][v]['flow']
代表(u, v)
的流函数,满足R[u][v]['flow'] == -R[v][u]['flow']
。流量值定义为流入
t
的总流量,即接收器,存储在R.graph['flow_value']
中。仅使用边(u, v)
到t
的可达性使得R[u][v]['flow'] < R[u][v]['capacity']
导致最小的s
-t
切割。特定算法可能会在
R
中存储额外数据。该函数应支持可选的布尔参数value_only。当为 True 时,一旦可以确定最大流量值和最小切割,它就可以选择终止算法。
例子:
>>> G = nx.DiGraph() >>> G.add_edge("x", "a", capacity=3.0) >>> G.add_edge("x", "b", capacity=1.0) >>> G.add_edge("a", "c", capacity=3.0) >>> G.add_edge("b", "c", capacity=5.0) >>> G.add_edge("b", "d", capacity=4.0) >>> G.add_edge("d", "e", capacity=2.0) >>> G.add_edge("c", "y", capacity=2.0) >>> G.add_edge("e", "y", capacity=3.0)
maximum_flow 返回最大流的值和包含所有流的字典。
>>> flow_value, flow_dict = nx.maximum_flow(G, "x", "y") >>> flow_value 3.0 >>> print(flow_dict["x"]["b"]) 1.0
您还可以通过使用flow_func 参数来使用替代算法来计算最大流量。
>>> from networkx.algorithms.flow import shortest_augmenting_path >>> flow_value == nx.maximum_flow(G, "x", "y", flow_func=shortest_augmenting_path)[ ... 0 ... ] True
相关用法
- Python NetworkX maximum_flow_value用法及代码示例
- Python NetworkX maximum_spanning_tree用法及代码示例
- Python NetworkX maximum_spanning_edges用法及代码示例
- Python NetworkX maximal_independent_set用法及代码示例
- Python NetworkX max_flow_min_cost用法及代码示例
- Python NetworkX make_small_graph用法及代码示例
- Python NetworkX make_max_clique_graph用法及代码示例
- Python NetworkX multi_source_dijkstra_path用法及代码示例
- Python NetworkX minimum_spanning_edges用法及代码示例
- Python NetworkX modularity_matrix用法及代码示例
- Python NetworkX minimum_edge_cut用法及代码示例
- Python NetworkX minimum_st_node_cut用法及代码示例
- Python NetworkX minimum_spanning_tree用法及代码示例
- Python NetworkX minimum_node_cut用法及代码示例
- Python NetworkX minimum_cut_value用法及代码示例
- Python NetworkX multi_source_dijkstra_path_length用法及代码示例
- Python NetworkX min_cost_flow_cost用法及代码示例
- Python NetworkX modularity用法及代码示例
- Python NetworkX min_cost_flow用法及代码示例
- Python NetworkX minimum_cut用法及代码示例
- Python NetworkX minimum_st_edge_cut用法及代码示例
- Python NetworkX minimum_cycle_basis用法及代码示例
- Python NetworkX multi_source_dijkstra用法及代码示例
- Python NetworkX multipartite_layout用法及代码示例
- Python NetworkX negative_edge_cycle用法及代码示例
注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.flow.maximum_flow。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。