本文整理匯總了Python中networkx.chordal_graph_cliques方法的典型用法代碼示例。如果您正苦於以下問題:Python networkx.chordal_graph_cliques方法的具體用法?Python networkx.chordal_graph_cliques怎麽用?Python networkx.chordal_graph_cliques使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類networkx
的用法示例。
在下文中一共展示了networkx.chordal_graph_cliques方法的13個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: get_clique_tree
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def get_clique_tree(nodes, edges):
"""Given a set of int nodes i and edges (i,j), returns an nx.Graph object G
which is a clique tree, where:
- G.node[i]['members'] contains the set of original nodes in the ith
maximal clique
- G[i][j]['members'] contains the set of original nodes in the seperator
set between maximal cliques i and j
Note: This method is currently only implemented for chordal graphs; TODO:
add a step to triangulate non-chordal graphs.
"""
# Form the original graph G1
G1 = nx.Graph()
G1.add_nodes_from(nodes)
G1.add_edges_from(edges)
# Check if graph is chordal
# TODO: Add step to triangulate graph if not
if not nx.is_chordal(G1):
raise NotImplementedError("Graph triangulation not implemented.")
# Create maximal clique graph G2
# Each node is a maximal clique C_i
# Let w = |C_i \cap C_j|; C_i, C_j have an edge with weight w if w > 0
G2 = nx.Graph()
for i, c in enumerate(nx.chordal_graph_cliques(G1)):
G2.add_node(i, members=c)
for i in G2.nodes:
for j in G2.nodes:
S = G2.node[i]["members"].intersection(G2.node[j]["members"])
w = len(S)
if w > 0:
G2.add_edge(i, j, weight=w, members=S)
# Return a minimum spanning tree of G2
return nx.minimum_spanning_tree(G2)
示例2: chordal_graph_cliques
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def chordal_graph_cliques(G):
"""Returns the set of maximal cliques of a chordal graph.
The algorithm breaks the graph in connected components and performs a
maximum cardinality search in each component to get the cliques.
Parameters
----------
G : graph
A NetworkX graph
Returns
-------
cliques : A set containing the maximal cliques in G.
Raises
------
NetworkXError
The algorithm does not support DiGraph, MultiGraph and MultiDiGraph.
If the input graph is an instance of one of these classes, a
NetworkXError is raised.
The algorithm can only be applied to chordal graphs. If the
input graph is found to be non-chordal, a NetworkXError is raised.
Examples
--------
>>> import networkx as nx
>>> e= [(1,2),(1,3),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6),(5,6),(7,8)]
>>> G = nx.Graph(e)
>>> G.add_node(9)
>>> setlist = nx.chordal_graph_cliques(G)
"""
if not is_chordal(G):
raise nx.NetworkXError("Input graph is not chordal.")
cliques = set()
for C in nx.connected.connected_component_subgraphs(G):
cliques |= _connected_chordal_graph_cliques(C)
return cliques
示例3: test_chordal_find_cliques
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def test_chordal_find_cliques(self):
cliques = set([frozenset([9]),frozenset([7,8]),frozenset([1,2,3]),
frozenset([2,3,4]),frozenset([3,4,5,6])])
assert_equal(nx.chordal_graph_cliques(self.chordal_G),cliques)
示例4: test_chordal_find_cliques_path
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def test_chordal_find_cliques_path(self):
G = nx.path_graph(10)
cliqueset = nx.chordal_graph_cliques(G)
for (u,v) in G.edges_iter():
assert_true(frozenset([u,v]) in cliqueset
or frozenset([v,u]) in cliqueset)
示例5: test_chordal_find_cliquesCC
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def test_chordal_find_cliquesCC(self):
cliques = set([frozenset([1,2,3]),frozenset([2,3,4]),
frozenset([3,4,5,6])])
assert_equal(nx.chordal_graph_cliques(self.connected_chordal_G),cliques)
示例6: test_chordal_find_cliques
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def test_chordal_find_cliques(self):
cliques = set([frozenset([9]), frozenset([7, 8]), frozenset([1, 2, 3]),
frozenset([2, 3, 4]), frozenset([3, 4, 5, 6])])
assert_equal(nx.chordal_graph_cliques(self.chordal_G), cliques)
示例7: test_chordal_find_cliques_path
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def test_chordal_find_cliques_path(self):
G = nx.path_graph(10)
cliqueset = nx.chordal_graph_cliques(G)
for (u, v) in G.edges():
assert_true(frozenset([u, v]) in cliqueset
or frozenset([v, u]) in cliqueset)
示例8: test_chordal_find_cliquesCC
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def test_chordal_find_cliquesCC(self):
cliques = set([frozenset([1, 2, 3]), frozenset([2, 3, 4]),
frozenset([3, 4, 5, 6])])
assert_equal(nx.chordal_graph_cliques(self.connected_chordal_G), cliques)
示例9: chordal_graph_cliques
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def chordal_graph_cliques(G):
"""Returns the set of maximal cliques of a chordal graph.
The algorithm breaks the graph in connected components and performs a
maximum cardinality search in each component to get the cliques.
Parameters
----------
G : graph
A NetworkX graph
Returns
-------
cliques : A set containing the maximal cliques in G.
Raises
------
NetworkXError
The algorithm does not support DiGraph, MultiGraph and MultiDiGraph.
If the input graph is an instance of one of these classes, a
:exc:`NetworkXError` is raised.
The algorithm can only be applied to chordal graphs. If the
input graph is found to be non-chordal, a :exc:`NetworkXError` is raised.
Examples
--------
>>> import networkx as nx
>>> e= [(1,2),(1,3),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6),(5,6),(7,8)]
>>> G = nx.Graph(e)
>>> G.add_node(9)
>>> setlist = nx.chordal_graph_cliques(G)
"""
if not is_chordal(G):
raise nx.NetworkXError("Input graph is not chordal.")
cliques = set()
for C in nx.connected.connected_component_subgraphs(G):
cliques |= _connected_chordal_graph_cliques(C)
return cliques
示例10: get_clique_tree
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def get_clique_tree(nodes: Iterable[int], edges: List[Tuple[int, int]]) -> nx.Graph:
"""
Given a set of int nodes i and edges (i,j), returns a clique tree.
Clique tree is an object G for which:
- G.node[i]['members'] contains the set of original nodes in the ith
maximal clique
- G[i][j]['members'] contains the set of original nodes in the seperator
set between maximal cliques i and j
Note: This method is currently only implemented for chordal graphs; TODO:
add a step to triangulate non-chordal graphs.
Parameters
----------
nodes
A list of nodes indices
edges
A list of tuples, where each tuple has indices for connected nodes
Returns
-------
networkx.Graph
An object G representing clique tree
"""
# Form the original graph G1
G1 = nx.Graph()
G1.add_nodes_from(nodes)
G1.add_edges_from(edges)
# Check if graph is chordal
# TODO: Add step to triangulate graph if not
if not nx.is_chordal(G1):
raise NotImplementedError("Graph triangulation not implemented.")
# Create maximal clique graph G2
# Each node is a maximal clique C_i
# Let w = |C_i \cap C_j|; C_i, C_j have an edge with weight w if w > 0
G2 = nx.Graph()
for i, c in enumerate(nx.chordal_graph_cliques(G1)):
G2.add_node(i, members=c)
for i in G2.nodes:
for j in G2.nodes:
S = G2.node[i]["members"].intersection(G2.node[j]["members"])
w = len(S)
if w > 0:
G2.add_edge(i, j, weight=w, members=S)
# Return a minimum spanning tree of G2
return nx.minimum_spanning_tree(G2)
示例11: chordal_graph_treewidth
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def chordal_graph_treewidth(G):
"""Returns the treewidth of the chordal graph G.
Parameters
----------
G : graph
A NetworkX graph
Returns
-------
treewidth : int
The size of the largest clique in the graph minus one.
Raises
------
NetworkXError
The algorithm does not support DiGraph, MultiGraph and MultiDiGraph.
If the input graph is an instance of one of these classes, a
NetworkXError is raised.
The algorithm can only be applied to chordal graphs. If
the input graph is found to be non-chordal, a NetworkXError is raised.
Examples
--------
>>> import networkx as nx
>>> e = [(1,2),(1,3),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6),(5,6),(7,8)]
>>> G = nx.Graph(e)
>>> G.add_node(9)
>>> nx.chordal_graph_treewidth(G)
3
References
----------
.. [1] http://en.wikipedia.org/wiki/Tree_decomposition#Treewidth
"""
if not is_chordal(G):
raise nx.NetworkXError("Input graph is not chordal.")
max_clique = -1
for clique in nx.chordal_graph_cliques(G):
max_clique = max(max_clique,len(clique))
return max_clique - 1
示例12: initialize_tree
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def initialize_tree(self):
"""
Initialize the structure of a clique tree, using
the following steps:
- Moralize graph (i.e. marry parents)
- Triangulate graph (i.e. make graph chordal)
- Get max cliques (i.e. community/clique detection)
- Max spanning tree over sepset cardinality (i.e. create tree)
"""
### MORALIZE GRAPH & MAKE IT CHORDAL ###
chordal_G = make_chordal(self.bn) # must return a networkx object
V = chordal_G.nodes()
### GET MAX CLIQUES FROM CHORDAL GRAPH ###
C = {} # key = vertex, value = clique object
max_cliques = reversed(list(nx.chordal_graph_cliques(chordal_G)))
for v_idx,clique in enumerate(max_cliques):
C[v_idx] = Clique(set(clique))
### MAXIMUM SPANNING TREE OVER COMPLETE GRAPH TO MAKE A TREE ###
weighted_edge_dict = dict([(c_idx,{}) for c_idx in range(len(C))])
for i in range(len(C)):
for j in range(len(C)):
if i!=j:
intersect_cardinality = len(C[i].sepset(C[j]))
weighted_edge_dict[i][j] = -1*intersect_cardinality
mst_G = mst(weighted_edge_dict)
### SET V,E,C ###
self.E = mst_G # dictionary
self.V = mst_G.keys() # list
self.C = C
### ASSIGN EACH FACTOR TO ONE CLIQUE ONLY ###
v_a = dict([(rv, False) for rv in self.bn.nodes()])
for clique in self.C.values():
temp_scope = []
for var in v_a:
if v_a[var] == False and set(self.bn.scope(var)).issubset(clique.scope):
temp_scope.append(var)
v_a[var] = True
clique._F = Factorization(self.bn, temp_scope)
### COMPUTE INITIAL POTENTIAL FOR EACH FACTOR ###
# - i.e. multiply all of its assigned factors together
for i, clique in self.C.items():
if len(self.parents(i)) == 0:
clique.is_ready = True
clique.initialize_psi()
示例13: chordal_graph_treewidth
# 需要導入模塊: import networkx [as 別名]
# 或者: from networkx import chordal_graph_cliques [as 別名]
def chordal_graph_treewidth(G):
"""Returns the treewidth of the chordal graph G.
Parameters
----------
G : graph
A NetworkX graph
Returns
-------
treewidth : int
The size of the largest clique in the graph minus one.
Raises
------
NetworkXError
The algorithm does not support DiGraph, MultiGraph and MultiDiGraph.
If the input graph is an instance of one of these classes, a
:exc:`NetworkXError` is raised.
The algorithm can only be applied to chordal graphs. If
the input graph is found to be non-chordal, a :exc:`NetworkXError` is raised.
Examples
--------
>>> import networkx as nx
>>> e = [(1,2),(1,3),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6),(5,6),(7,8)]
>>> G = nx.Graph(e)
>>> G.add_node(9)
>>> nx.chordal_graph_treewidth(G)
3
References
----------
.. [1] https://en.wikipedia.org/wiki/Tree_decomposition#Treewidth
"""
if not is_chordal(G):
raise nx.NetworkXError("Input graph is not chordal.")
max_clique = -1
for clique in nx.chordal_graph_cliques(G):
max_clique = max(max_clique, len(clique))
return max_clique - 1