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


Python NetworkX k_edge_augmentation用法及代碼示例


本文簡要介紹 networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation 的用法。

用法:

k_edge_augmentation(G, k, avail=None, weight=None, partial=False)

找到k-edge-connect G 的邊集。

將增強的邊添加到 G 使得無法斷開 G,除非刪除 k 或更多邊。此函數使用可用的最有效函數(取決於 k 的值以及問題是加權還是未加權)來搜索k-edge-connects G 的可用邊的最小權重子集。通常,找到k-edge-augmentation 是NP-hard,所以解決方案並不一定是最小的。此外,k-edge-augmentation 可能不存在。

參數

GNetworkX 圖

一個無向圖。

k整數

所需的邊連接

availdict 或一組 2 或 3 個元組

可用於增強的可用邊。

如果未指定,則 G 的補集中的所有邊都可用。否則,每個項目都是可用邊(具有可選權重)。

在未加權的情況下,每個項目都是一條邊 (u, v)

在加權情況下,每個項目都是一個三元組 (u, v, d) 或帶有項目 (u, v): d 的字典。第三項 d 可以是字典或實數。如果d是一個字典d[weight]對應權重。

weightstring

如果 avail 是一組 3 元組,其中每個元組中的第三項是字典,則用於查找權重的鍵。

partial布爾值

如果 partial 為 True 且不存在可行的 k-edge-augmentation,則生成所有的 partial k-edge-augmentation。將部分增強中的邊添加到 G,最小化 k-edge-connected 組件的數量並最大化這些組件之間的邊連接。有關詳細信息,請參閱partial_k_edge_augmentation()

生成(Yield)

edge元組

一旦添加到 G 中,將導致 G 變為 k-edge-connected 的邊。如果 partial 為 False,如果這是不可能的,則會引發錯誤。否則,生成的邊會形成部分增強,其中k-edge-connects G 的任何可能部分,並最大限度地連接其餘部分。

拋出

NetworkXUnfeasible

如果 partial 為 False 並且不存在 k-edge-augmentation。

NetworkXNotImplemented

如果輸入圖是有向圖或多重圖。

ValueError:

如果 k 小於 1

注意

當 k=1 時,這將返回最優解。

當 k=2 且 avail 為 None 時,這將返回最優解。否則,當 k=2 時,這將返回最優解的 2 近似值。

對於 k>3,這個問題是NP-hard,它使用隨機算法

產生一個可行的解決方案,但不保證解決方案的權重。

例子

>>> # Unweighted cases
>>> G = nx.path_graph((1, 2, 3, 4))
>>> G.add_node(5)
>>> sorted(nx.k_edge_augmentation(G, k=1))
[(1, 5)]
>>> sorted(nx.k_edge_augmentation(G, k=2))
[(1, 5), (5, 4)]
>>> sorted(nx.k_edge_augmentation(G, k=3))
[(1, 4), (1, 5), (2, 5), (3, 5), (4, 5)]
>>> complement = list(nx.k_edge_augmentation(G, k=5, partial=True))
>>> G.add_edges_from(complement)
>>> nx.edge_connectivity(G)
4
>>> # Weighted cases
>>> G = nx.path_graph((1, 2, 3, 4))
>>> G.add_node(5)
>>> # avail can be a tuple with a dict
>>> avail = [(1, 5, {"weight": 11}), (2, 5, {"weight": 10})]
>>> sorted(nx.k_edge_augmentation(G, k=1, avail=avail, weight="weight"))
[(2, 5)]
>>> # or avail can be a 3-tuple with a real number
>>> avail = [(1, 5, 11), (2, 5, 10), (4, 3, 1), (4, 5, 51)]
>>> sorted(nx.k_edge_augmentation(G, k=2, avail=avail))
[(1, 5), (2, 5), (4, 5)]
>>> # or avail can be a dict
>>> avail = {(1, 5): 11, (2, 5): 10, (4, 3): 1, (4, 5): 51}
>>> sorted(nx.k_edge_augmentation(G, k=2, avail=avail))
[(1, 5), (2, 5), (4, 5)]
>>> # If augmentation is infeasible, then a partial solution can be found
>>> avail = {(1, 5): 11}
>>> sorted(nx.k_edge_augmentation(G, k=2, avail=avail, partial=True))
[(1, 5)]

相關用法


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