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