networkx.algorithms.flow.capacity_scaling
的用法。用法:
capacity_scaling(G, demand='demand', capacity='capacity', weight='weight', heap=<class 'networkx.utils.heaps.BinaryHeap'>)
在有向圖 G 中找到滿足所有需求的最小成本流。
這是一種容量擴展的連續最短增廣路徑算法。
G 是一個有邊成本和容量的有向圖,其中節點有需求,即它們想要發送或接收一定量的流量。負需求意味著節點想要發送流量,正需求意味著節點想要接收流量。如果流入每個節點的淨流量等於該節點的需求,則有向圖 G 上的流量滿足所有需求。
- G:NetworkX 圖
DiGraph 或 MultiDiGraph 可以找到滿足所有需求的最小成本流。
- demand:string
圖 G 的節點預計具有一個屬性需求,該屬性指示節點想要發送(負需求)或接收(正需求)多少流量。請注意,需求之和應為 0,否則問題不可行。如果此屬性不存在,則認為節點的需求為 0。默認值:‘demand’。
- capacity:string
圖 G 的邊應該有一個屬性容量,表示邊可以支持多少流量。如果此屬性不存在,則認為邊具有無限容量。默認值:‘capacity’。
- weight:string
圖 G 的邊應該有一個屬性權重,該屬性權重指示在該邊上發送一個單位的流量所產生的成本。如果不存在,則認為權重為 0。默認值:‘weight’。
- heap:類
算法中使用的堆類型。它應該是
MinHeap
的子類或實現兼容的接口。如果要使用庫存堆實現,盡管漸近運行時間較慢,但對於沒有優化屬性訪問的 Python 實現(例如 CPython),建議使用
BinaryHeap
而不是PairingHeap
。對於具有優化屬性訪問的 Python 實現(例如 PyPy),PairingHeap
提供更好的性能。默認值:BinaryHeap
。
- flowCost:整數
滿足所有需求的最小成本流的成本。
- flowDict:字典
如果 G 是有向圖,則由節點鍵入的 dict-of-dicts 使得 flowDict[u][v] 是邊 (u, v) 上的流。如果 G 是 MultiDiGraph,則 dict-of-dicts-of-dicts 由節點鍵控,因此 flowDict[u][v][key] 是邊上的流 (u, v, key)。
- NetworkXError
如果輸入圖不是定向的,未連接的,則會引發此異常。
- NetworkXUnfeasible
在以下情況下會引發此異常:
需求之和不為零。那麽,就沒有滿足所有需求的流程。
沒有滿足所有需求的流量。
- NetworkXUnbounded
如果有向圖 G 具有負成本和無限容量的循環,則會引發此異常。那麽,滿足所有需求的流程的成本在下麵是無界的。
參數:
返回:
拋出:
注意:
如果邊權重是浮點數,則此算法不起作用。
例子:
最小成本流問題的一個簡單示例。
>>> G = nx.DiGraph() >>> G.add_node("a", demand=-5) >>> G.add_node("d", demand=5) >>> G.add_edge("a", "b", weight=3, capacity=4) >>> G.add_edge("a", "c", weight=6, capacity=10) >>> G.add_edge("b", "d", weight=1, capacity=9) >>> G.add_edge("c", "d", weight=2, capacity=5) >>> flowCost, flowDict = nx.capacity_scaling(G) >>> flowCost 24 >>> flowDict {'a': {'b': 4, 'c': 1}, 'd': {}, 'b': {'d': 4}, 'c': {'d': 1}}
可以更改用於算法的屬性的名稱。
>>> G = nx.DiGraph() >>> G.add_node("p", spam=-4) >>> G.add_node("q", spam=2) >>> G.add_node("a", spam=-2) >>> G.add_node("d", spam=-1) >>> G.add_node("t", spam=2) >>> G.add_node("w", spam=3) >>> G.add_edge("p", "q", cost=7, vacancies=5) >>> G.add_edge("p", "a", cost=1, vacancies=4) >>> G.add_edge("q", "d", cost=2, vacancies=3) >>> G.add_edge("t", "q", cost=1, vacancies=2) >>> G.add_edge("a", "t", cost=2, vacancies=4) >>> G.add_edge("d", "w", cost=3, vacancies=4) >>> G.add_edge("t", "w", cost=4, vacancies=1) >>> flowCost, flowDict = nx.capacity_scaling( ... G, demand="spam", capacity="vacancies", weight="cost" ... ) >>> flowCost 37 >>> flowDict {'p': {'q': 2, 'a': 2}, 'q': {'d': 1}, 'a': {'t': 4}, 'd': {'w': 2}, 't': {'q': 1, 'w': 1}, 'w': {}}
相關用法
- Python NetworkX categorical_edge_match用法及代碼示例
- Python NetworkX categorical_node_match用法及代碼示例
- Python NetworkX caveman_graph用法及代碼示例
- Python NetworkX cartesian_product用法及代碼示例
- Python NetworkX categorical_multiedge_match用法及代碼示例
- Python NetworkX connected_double_edge_swap用法及代碼示例
- Python NetworkX cn_soundarajan_hopcroft用法及代碼示例
- Python NetworkX complete_multipartite_graph用法及代碼示例
- Python NetworkX clustering用法及代碼示例
- Python NetworkX contracted_edge用法及代碼示例
- Python NetworkX circulant_graph用法及代碼示例
- Python NetworkX contracted_nodes用法及代碼示例
- Python NetworkX communicability_exp用法及代碼示例
- Python NetworkX collaboration_weighted_projected_graph用法及代碼示例
- Python NetworkX communicability用法及代碼示例
- Python NetworkX circular_layout用法及代碼示例
- Python NetworkX connected_caveman_graph用法及代碼示例
- Python NetworkX connected_components用法及代碼示例
- Python NetworkX cut_size用法及代碼示例
- Python NetworkX configuration_model用法及代碼示例
- Python NetworkX chordal_graph_treewidth用法及代碼示例
- Python NetworkX complete_to_chordal_graph用法及代碼示例
- Python NetworkX communicability_betweenness_centrality用法及代碼示例
- Python NetworkX closeness_vitality用法及代碼示例
- Python NetworkX chordal_graph_cliques用法及代碼示例
注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.algorithms.flow.capacity_scaling。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。