optNetwork

minCut

Description

L'action minCut calcule la coupe minimale d'un graphe. Une coupe minimale est une partition des sommets d'un graphe en deux ensembles disjoints, S (contenant la source) et T (contenant le puits), qui minimise la somme des poids des arêtes allant de S à T. Cette action est fondamentale en théorie des graphes et en optimisation de réseaux pour identifier les goulots d'étranglement ou les vulnérabilités dans un réseau.

optNetwork.minCut <result=results> <status=rc> / deterministic=TRUE | FALSE, direction="DIRECTED" | "UNDIRECTED", display={...}, distributed=TRUE | FALSE, graph=integer, indexOffset=integer, links={...}, linksVar={...}, logFreqTime=integer, logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE", maxCuts=integer, maxWeight=double, multiLinks=TRUE | FALSE, nodes={...}, nodesVar={...}, nThreads=integer, outCutSets={...}, outGraphList={...}, outLinks={...}, outNodes={...}, outPartitions={...}, outputTables={...}, selfLinks=TRUE | FALSE, sink="string" | double | 64-bit-integer, source="string" | double | 64-bit-integer, standardizedLabels=TRUE | FALSE, standardizedLabelsOut=TRUE | FALSE;
Paramètres
ParamètreDescription
deterministicLorsque défini sur True, garantit que chaque exécution (avec la même configuration machine et les mêmes paramètres) produit le même résultat final.
directionSpécifie si le graphe d'entrée doit être considéré comme orienté ou non orienté.
displaySpécifie une liste de tables de résultats à envoyer au client pour affichage.
distributedLorsque défini sur True, utilise un graphe distribué.
graphSpécifie le graphe en mémoire à utiliser.
indexOffsetSpécifie le décalage d'index pour les identifiants dans les journaux et les tables de résultats.
linksSpécifie la table de données d'entrée qui contient les informations sur les liens du graphe.
linksVarSpécifie les noms des variables de données pour la table des liens.
logFreqTimeContrôle la fréquence (en secondes) d'affichage des journaux d'itération pour certains algorithmes.
logLevelContrôle la quantité d'informations affichées dans le journal SAS.
maxCutsSpécifie le nombre maximal de coupes que l'algorithme doit retourner.
maxWeightSpécifie le poids maximal des coupes à retourner par l'algorithme.
multiLinksLorsque défini sur True, inclut les liens multiples lors de la lecture d'un graphe d'entrée.
nodesSpécifie la table de données d'entrée qui contient les informations sur les nœuds du graphe.
nodesVarSpécifie les noms des variables de données pour la table des nœuds.
nThreadsSpécifie le nombre maximal de threads à utiliser pour le traitement multithread.
outCutSetsSpécifie la table de données de sortie pour contenir les ensembles de coupe minimale.
outGraphListSpécifie la table de données de sortie pour contenir des informations récapitulatives sur les graphes en mémoire.
outLinksSpécifie la table de données de sortie pour contenir les informations sur les liens du graphe ainsi que les résultats des algorithmes.
outNodesSpécifie la table de données de sortie pour contenir les informations sur les nœuds du graphe ainsi que les résultats des algorithmes.
outPartitionsSpécifie la table de données de sortie pour contenir les partitions de la coupe minimale.
outputTablesListe les noms des tables de résultats à sauvegarder en tant que tables CAS sur le serveur.
selfLinksLorsque défini sur True, inclut les liens réflexifs (boucles) lors de la lecture d'un graphe d'entrée.
sinkSpécifie le nœud de destination (puits) de la coupe minimale.
sourceSpécifie le nœud de départ (source) de la coupe minimale.
standardizedLabelsLorsque défini sur True, spécifie que les données du graphe d'entrée sont dans un format standardisé.
standardizedLabelsOutLorsque défini sur True, demande que les données du graphe de sortie incluent un format standardisé.
Préparation des Données Voir la fiche de ce code dataprep
Création d'un Graphe de Réseau

Ce code crée une table CAS nommée 'mycas.LinkSetIn' qui représente un réseau simple avec 6 nœuds et des arêtes pondérées. Les poids peuvent être interprétés comme la capacité maximale de flux entre les nœuds.

Copié !
1DATA mycas.LinkSetIn;
2 INFILE DATALINES delimiter=',';
3 INPUT from $ to $ weight;
4 DATALINES;
5A,B,2
6A,C,7
7A,D,4
8B,C,3
9B,E,1
10C,E,2
11C,D,2
12D,F,6
13E,F,3
14;

Exemples

Cet exemple calcule la coupe minimale entre le nœud 'A' (source) et le nœud 'F' (puits) dans le graphe non orienté. La coupe minimale identifie l'ensemble d'arêtes de capacité totale minimale qui, si elles étaient supprimées, déconnecteraient 'F' de 'A'.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 ACTION optNetwork.minCut /
3 direction = "UNDIRECTED"
4 links = {name = "LinkSetIn"}
5 SOURCE = "A"
6 sink = "F"
7 outCutSets = {name="MinCut" replace=true}
8 outPartitions = {name="Partitions" replace=true};
9 RUN;
10 ACTION TABLE.fetch / TABLE = "MinCut";
11 RUN;
12 ACTION TABLE.fetch / TABLE = "Partitions";
13 RUN;
14QUIT;
Résultat :
Le résultat affichera la valeur de la coupe minimale, qui est de 6. La table 'MinCut' listera les arêtes qui composent cette coupe ({A,D}, {C,D}, {E,F}). La table 'Partitions' montrera que les nœuds {A, B, C, E} sont dans la partition source (partition=1) et les nœuds {D, F} sont dans la partition puits (partition=2).

Cet exemple illustre comment trouver jusqu'à 2 coupes minimales ('maxCuts'=2) dont le poids total est inférieur ou égal à 7 ('maxWeight'=7.0) dans un graphe orienté. Cela permet d'identifier plusieurs ensembles de goulots d'étranglement potentiels.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 ACTION optNetwork.minCut /
3 direction = "DIRECTED"
4 links = {name = "LinkSetIn"}
5 SOURCE = "A"
6 sink = "F"
7 maxCuts = 2
8 maxWeight = 7.0
9 outCutSets = {name="MinCutMulti" replace=true}
10 outPartitions = {name="PartitionsMulti" replace=true};
11 RUN;
12 PRINT cas.results.SolutionSummary;
13 ACTION TABLE.fetch / TABLE = "MinCutMulti";
14 RUN;
15 ACTION TABLE.fetch / TABLE = "PartitionsMulti";
16 RUN;
17QUIT;
Résultat :
Le journal affichera un résumé indiquant que l'algorithme a trouvé 2 coupes. La première coupe (cut=1) a une valeur de 6 et est composée des arêtes {A,D}, {C,D}, {E,F}. La deuxième coupe (cut=2) a une valeur de 7 et est composée des arêtes {D,F}, {E,F}, {C,E}, {B,E}. Les tables 'MinCutMulti' et 'PartitionsMulti' contiendront les détails de ces deux coupes, permettant une analyse comparative des vulnérabilités du réseau.

FAQ

À quoi sert l'action `minCut` ?
Comment spécifier le nœud de départ pour la coupe minimale ?
Comment spécifier le nœud d'arrivée pour la coupe minimale ?
Est-il possible de trouver plusieurs coupes et comment faire ?
Peut-on filtrer les coupes en fonction de leur poids ?
Quelles tables de sortie peuvent être générées par cette action ?
Comment l'action gère-t-elle les graphes orientés et non orientés ?