cycle
Description
L'action cycle du set d'actions network est conçue pour l'énumération des cycles dans un graphe. Un cycle est un chemin qui commence et se termine au même nœud sans répéter de liens. Cette action est particulièrement utile pour détecter des dépendances circulaires, optimiser des routes ou analyser des structures de réseaux complexes. Elle propose deux algorithmes principaux : 'BACKTRACK' pour les énumérations exhaustives (recommandé pour les longs cycles) et 'BUILD' pour une approche plus incrémentale. Parce que parfois, pour avancer, il faut savoir boucler la boucle (mais pas trop souvent non plus !).
Paramètres Clés
| Nom du paramètre | Description |
|---|---|
| algorithm | Définit l'algorithme de recherche : 'BACKTRACK' (retour sur trace) ou 'BUILD' (construction progressive). Par défaut, 'BUILD' est utilisé si maxLength <= 20. |
| direction | Indique si le graphe est orienté ('DIRECTED') ou non ('UNDIRECTED'). Un cycle dans un graphe non orienté nécessite au moins 3 nœuds. |
| maxCycles | Le nombre maximum de cycles à trouver avant de s'arrêter. Utilisez 'ALL' pour une recherche exhaustive (attention aux performances sur les gros graphes !). |
| maxLength | La longueur maximale (nombre de liens) autorisée pour un cycle. |
| minLength | La longueur minimale (nombre de liens) requise pour qu'un cycle soit conservé dans les résultats. |
| out | Nom de la table CAS qui recevra la liste des nœuds appartenant aux cycles trouvés. |
| outCyclesLinks | Nom de la table CAS qui contiendra les liens formant les cycles. |
Préparation des données
Création d'un réseau de transport avec cycles
Nous créons ici un petit graphe simple représentant des villes (A, B, C, D) où il existe un cycle évident entre A, B et C.
| 1 | DATA casuser.liens_transport; |
| 2 | INPUT from $ to $ weight; |
| 3 | DATALINES; |
| 4 | A B 10 |
| 5 | B C 15 |
| 6 | C A 12 |
| 7 | C D 20 |
| 8 | D A 25 |
| 9 | ; |
| 10 | RUN; |
Exemples d'utilisation
Détection de base des cycles
Recherche de tous les cycles dans notre graphe de transport sans contrainte particulière.
| 1 | PROC CAS; |
| 2 | optNetwork.cycle / |
| 3 | links={name="liens_transport"} |
| 4 | direction="DIRECTED" |
| 5 | out={name="cycles_villes"} |
| 6 | ; |
| 7 | RUN; |
Résultat Attendu :
Énumération limitée avec contraintes de longueur
Ici, on cherche maximum 5 cycles dont la longueur est comprise entre 3 et 4 liens, en utilisant l'algorithme de backtracking.
| 1 | PROC CAS; |
| 2 | optNetwork.cycle / |
| 3 | links={name="liens_transport"} |
| 4 | algorithm="BACKTRACK" |
| 5 | direction="DIRECTED" |
| 6 | maxCycles=5 |
| 7 | minLength=3 |
| 8 | maxLength=4 |
| 9 | out={name="noeuds_cycles_contraints", replace=true} |
| 10 | outCyclesLinks={name="liens_cycles_contraints", replace=true} |
| 11 | ; |
| 12 | RUN; |