当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。