本文簡要介紹
networkx.algorithms.flow.max_flow_min_cost
的用法。用法:
max_flow_min_cost(G, s, t, capacity='capacity', weight='weight')
返回最小成本的最大 (s, t) 流。
G 是一個有邊成本和容量的有向圖。有一個源節點 s 和一個匯節點 t。此函數找到從 s 到 t 的最大流,其總成本最小。
- G:NetworkX 圖
DiGraph 找到滿足所有需求的最小成本流。
- s: node label:
流量的來源。
- t: node label:
流的目的地。
- capacity: string:
圖 G 的邊應該有一個屬性容量,表示邊可以支持多少流量。如果此屬性不存在,則認為邊具有無限容量。默認值:‘capacity’。
- weight: string:
圖 G 的邊應該有一個屬性權重,該屬性權重指示在該邊上發送一個單位的流量所產生的成本。如果不存在,則認為權重為 0。默認值:‘weight’。
- flowDict:字典
由節點鍵入的字典字典,使得 flowDict[u][v] 是流邊 (u, v)。
- NetworkXError
如果輸入圖未定向或未連接,則會引發此異常。
- NetworkXUnbounded
如果在 G 中存在從 s 到 t 的無限容量路徑,則會引發此異常。在這種情況下,沒有最大流量。如果有向圖 G 具有負成本和無限容量的循環,也會引發此異常。然後,流的成本在下麵是無界的。
參數:
返回:
拋出:
注意:
如果邊權重或需求是浮點數(溢出和舍入錯誤可能導致問題),則不保證此算法有效。作為一種解決方法,您可以通過將相關邊屬性乘以一個方便的常數因子(例如 100)來使用整數。
例子:
>>> G = nx.DiGraph() >>> G.add_edges_from( ... [ ... (1, 2, {"capacity": 12, "weight": 4}), ... (1, 3, {"capacity": 20, "weight": 6}), ... (2, 3, {"capacity": 6, "weight": -3}), ... (2, 6, {"capacity": 14, "weight": 1}), ... (3, 4, {"weight": 9}), ... (3, 5, {"capacity": 10, "weight": 5}), ... (4, 2, {"capacity": 19, "weight": 13}), ... (4, 5, {"capacity": 4, "weight": 0}), ... (5, 7, {"capacity": 28, "weight": 2}), ... (6, 5, {"capacity": 11, "weight": 1}), ... (6, 7, {"weight": 8}), ... (7, 4, {"capacity": 6, "weight": 6}), ... ] ... ) >>> mincostFlow = nx.max_flow_min_cost(G, 1, 7) >>> mincost = nx.cost_of_flow(G, mincostFlow) >>> mincost 373 >>> from networkx.algorithms.flow import maximum_flow >>> maxFlow = maximum_flow(G, 1, 7)[1] >>> nx.cost_of_flow(G, maxFlow) >= mincost True >>> mincostFlowValue = sum((mincostFlow[u][7] for u in G.predecessors(7))) - sum( ... (mincostFlow[7][v] for v in G.successors(7)) ... ) >>> mincostFlowValue == nx.maximum_flow_value(G, 1, 7) True
相關用法
- Python NetworkX maximal_independent_set用法及代碼示例
- Python NetworkX maximum_spanning_tree用法及代碼示例
- Python NetworkX maximum_flow用法及代碼示例
- Python NetworkX maximum_flow_value用法及代碼示例
- Python NetworkX maximum_spanning_edges用法及代碼示例
- 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.max_flow_min_cost。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。