Python Networkx detectando bucles / círculos

Dado el siguiente ejemplo:

¿Existe la posibilidad de detectar un bucle en la red (I1, I2,I3, C6, C7, I5) ?

Intenté: simple_cycles → funciona bien con 3 nodos, pero no con más de 3.

Tendría que detectar el círculo con todos los nodos y el nodo “entrada” ("I1") y la “salida” ("I3") .

He recreado tu gráfica como tal:

 import networkx as nx g = nx.DiGraph([('P', 'I0'), ('I0', 'I1'), ('I1', 'I2'), ('I2', 'I3'), ('I1', 'I5'), ('I5', 'C7'), ('C7', 'C6'), ('C6', 'I3'), ('I3', 'C9')]) 

Estabas buscando ciclos simples pero no hay ninguno en el gráfico anterior:

 >>> list(nx.simple_cycles(g)) [] 

así que tienes que buscar ciclos en el gráfico no dirigido. Tienes que convertir tu gráfica en una gráfica no dirigida. Para los gráficos no dirigidos, la función cycle_basis es lo que parece necesitar:

 >>> nx.cycle_basis(g.to_undirected()) [['I5', 'C7', 'C6', 'I3', 'I2', 'I1']] 

Sí, si usa el método nx.simple_cycles(G) , obtendrá el ciclo en la gráfica como un conjunto de nodos que están en un ciclo (como lo he entendido). Para más información mira esto .