當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python NetworkX shortest_augmenting_path用法及代碼示例


本文簡要介紹 networkx.algorithms.flow.shortest_augmenting_path 的用法。

用法:

shortest_augmenting_path(G, s, t, capacity='capacity', residual=None, value_only=False, two_phase=False, cutoff=None)

使用最短增廣路徑算法找到最大single-commodity 流。

該函數返回計算最大流量後產生的殘差網絡。有關 NetworkX 用於定義殘差網絡的約定的詳細信息,請參見下文。

該算法對於 節點和 邊的運行時間為

參數

GNetworkX 圖

圖表的邊應該有一個名為‘capacity’ 的屬性。如果此屬性不存在,則認為邊具有無限容量。

s節點

流的源節點。

t節點

流的匯節點。

capacitystring

圖 G 的邊應該有一個屬性容量,表示邊可以支持多少流量。如果此屬性不存在,則認為邊具有無限容量。默認值:‘capacity’。

residualNetworkX 圖

執行算法的殘差網絡。如果沒有,則創建一個新的殘差網絡。默認值:無。

value_onlybool

如果 True 僅計算最大流量的值。此參數將被此算法忽略,因為它不適用。

two_phasebool

如果為 True,則使用 two-phase 變體。 two-phase 變體將 unit-capacity 網絡上的運行時間從 提高到 。默認值:假。

cutoff整數,浮點數

如果指定,算法將在流量值達到或超過截止值時終止。在這種情況下,它可能無法立即確定最小切割。默認值:無。

返回

RNetworkX 有向圖

計算最大流量後的殘差網絡。

拋出

NetworkXError

該算法不支持MultiGraph和MultiDiGraph。如果輸入圖是這兩個類之一的實例,則會引發NetworkXError。

NetworkXUnbounded

如果圖具有無限容量的路徑,則圖上可行流的值在上麵是無界的,並且該函數會引發 NetworkXUnbounded。

注意

來自輸入圖 G 的殘差網絡 RG 具有相同的節點。 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'] 中。如果未指定 cutoff,則僅使用邊 (u, v)t 的可達性使得 R[u][v]['flow'] < R[u][v]['capacity'] 導致最小的 s - t 切割。

例子

>>> from networkx.algorithms.flow import shortest_augmenting_path

實現流算法並輸出殘差網絡的函數,例如這個,不會導入到基礎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 = shortest_augmenting_path(G, "x", "y")
>>> flow_value = nx.maximum_flow_value(G, "x", "y")
>>> flow_value
3.0
>>> flow_value == R.graph["flow_value"]
True

相關用法


注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.algorithms.flow.shortest_augmenting_path。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。