networkx.algorithms.flow.preflow_push
的用法。用法:
preflow_push(G, s, t, capacity='capacity', residual=None, global_relabel_freq=1, value_only=False)
使用 highest-label preflow-push 算法找到最大 single-commodity 流。
该函数返回计算最大流量后产生的残差网络。有关 NetworkX 用于定义残差网络的约定的详细信息,请参见下文。
该算法对于 节点和 边的运行时间为 。
- G:NetworkX 图
图表的边应该有一个名为‘capacity’ 的属性。如果此属性不存在,则认为边具有无限容量。
- s:节点
流的源节点。
- t:节点
流的汇节点。
- capacity:string
图 G 的边应该有一个属性容量,表示边可以支持多少流量。如果此属性不存在,则认为边具有无限容量。默认值:‘capacity’。
- residual:NetworkX 图
执行算法的残差网络。如果没有,则创建一个新的残差网络。默认值:无。
- global_relabel_freq:整数,浮点数
应用全局重新标记启发式加速算法的相对频率。如果为 None,则禁用启发式。默认值:1。
- value_only:bool
如果为 False,则计算最大流量;否则,计算足以计算最大流量值的最大预流量。默认值:假。
- R:NetworkX 有向图
计算最大流量后的残差网络。
- NetworkXError
该算法不支持MultiGraph和MultiDiGraph。如果输入图是这两个类之一的实例,则会引发NetworkXError。
- NetworkXUnbounded
如果图具有无限容量的路径,则图上可行流的值在上面是无界的,并且该函数会引发 NetworkXUnbounded。
参数:
返回:
抛出:
注意:
来自输入图
G
的残差网络R
与G
具有相同的节点。R
是包含一对边的 DiGraph(u, v)
和(v, u)
iff(u, v)
不是自环,并且在G
中至少存在(u, v)
和(v, u)
之一。对于R
中的每个节点u
,R.nodes[u]['excess']
表示流入u
和流出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
切割。例子:
>>> from networkx.algorithms.flow import preflow_push
实现流算法并输出残差网络的函数,例如这个,不会导入到基础NetworkX 命名空间中,因此您必须从流包中显式导入它们。
>>> 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) >>> R = preflow_push(G, "x", "y") >>> flow_value = nx.maximum_flow_value(G, "x", "y") >>> flow_value == R.graph["flow_value"] True >>> # preflow_push also stores the maximum flow value >>> # in the excess attribute of the sink node t >>> flow_value == R.nodes["y"]["excess"] True >>> # For some problems, you might only want to compute a >>> # maximum preflow. >>> R = preflow_push(G, "x", "y", value_only=True) >>> flow_value == R.graph["flow_value"] True >>> flow_value == R.nodes["y"]["excess"] True
相关用法
- Python NetworkX prefix_tree用法及代码示例
- Python NetworkX preferential_attachment用法及代码示例
- Python NetworkX predecessor用法及代码示例
- Python NetworkX projected_graph用法及代码示例
- Python NetworkX power用法及代码示例
- Python NetworkX panther_similarity用法及代码示例
- Python NetworkX parse_edgelist用法及代码示例
- Python NetworkX pydot_layout用法及代码示例
- Python NetworkX pygraphviz_layout用法及代码示例
- Python NetworkX pagerank_numpy用法及代码示例
- Python NetworkX pagerank_scipy用法及代码示例
- Python NetworkX parse_graphml用法及代码示例
- Python NetworkX planted_partition_graph用法及代码示例
- Python NetworkX py_random_state用法及代码示例
- Python NetworkX planar_layout用法及代码示例
- Python NetworkX parse_multiline_adjlist用法及代码示例
- Python NetworkX parse_adjlist用法及代码示例
- Python NetworkX pagerank用法及代码示例
- Python NetworkX negative_edge_cycle用法及代码示例
- Python NetworkX voronoi_cells用法及代码示例
- Python NetworkX numerical_edge_match用法及代码示例
- Python NetworkX inverse_line_graph用法及代码示例
- Python NetworkX LFR_benchmark_graph用法及代码示例
- Python NetworkX write_graph6用法及代码示例
- Python NetworkX DiGraph.__contains__用法及代码示例
注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.flow.preflow_push。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。