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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。