optNetwork

maxFlow

Description

Calcule le flux maximum d'un graphe. Cette action trouve un flux réalisable entre un nœud source unique et un nœud puits unique qui maximise la valeur totale du flux, tout en respectant les capacités de chaque lien.

optNetwork.maxFlow <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", multiLinks=TRUE | FALSE, nodes={...}, nodesVar={...}, nThreads=integer, outGraphList={...}, outLinks={...}, outNodes={...}, 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
deterministic Lorsque défini sur True, assure que chaque invocation (avec la même configuration machine et les mêmes paramètres) produit le même résultat final.
direction Spécifie si le graphe d'entrée doit être considéré comme orienté ('DIRECTED') ou non orienté ('UNDIRECTED').
display Spécifie une liste de tables de résultats à envoyer au client pour affichage.
distributed Lorsque défini sur True, utilise un graphe distribué pour les calculs.
graph Spécifie le graphe en mémoire à utiliser pour l'analyse.
indexOffset Spécifie le décalage d'index pour les identifiants dans les journaux et les tables de résultats.
links Spécifie la table de données d'entrée qui contient les informations sur les liens du graphe.
linksVar Spécifie les noms des variables de données pour la table des liens.
logFreqTime Contrôle la fréquence (en secondes) d'affichage des journaux d'itération pour les algorithmes.
logLevel Contrôle la quantité d'informations affichées dans le journal SAS (NONE, BASIC, MODERATE, AGGRESSIVE).
multiLinks Lorsque défini sur True, inclut les liens multiples lors de la lecture d'un graphe d'entrée.
nodes Spécifie la table de données d'entrée qui contient les informations sur les nœuds du graphe.
nodesVar Spécifie les noms des variables de données pour la table des nœuds.
nThreads Spécifie le nombre maximum de threads à utiliser pour le traitement multithread.
outGraphList Spécifie la table de données de sortie pour contenir des informations récapitulatives sur les graphes en mémoire.
outLinks Spécifie la table de données de sortie pour contenir les informations sur les liens du graphe ainsi que les résultats des métriques calculées.
outNodes Spécifie la table de données de sortie pour contenir les informations sur les nœuds du graphe ainsi que les résultats des métriques calculées.
outputTables Liste les noms des tables de résultats à sauvegarder comme tables CAS sur le serveur.
selfLinks Lorsque défini sur True, inclut les auto-liens (boucles) lors de la lecture d'un graphe d'entrée.
sink Spécifie le nœud puits (destination) pour les calculs de flux maximum.
source Spécifie le nœud source (origine) pour les calculs de flux maximum.
standardizedLabels Lorsque défini sur True, spécifie que les données du graphe d'entrée sont dans un format standardisé.
standardizedLabelsOut Lorsque 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 des données de liens

Cet exemple de code SAS crée une table CAS nommée 'ArcData'. Cette table définit les liens (arcs) d'un graphe orienté. Chaque ligne représente un lien avec son nœud d'origine ('from'), son nœud de destination ('to') et la capacité maximale de flux ('weight').

Copié !
1DATA mycas.ArcData;
2 informat from to $1. weight;
3 DATALINES;
4 A B 2
5 A C 7
6 A D 3
7 B E 5
8 B F 4
9 B G 2
10 C E 4
11 C F 1
12 D F 6
13 D G 5
14 E H 8
15 F H 6
16 G H 4
17 ;
18RUN;

Exemples

Cet exemple illustre comment trouver le flux maximum entre un nœud source 'A' et un nœud puits 'H' dans un graphe orienté. Les résultats, y compris le flux sur chaque lien et la coupe minimale, sont stockés dans les tables 'MaxFlow' et 'MinCut' respectivement.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 ACTION optNetwork.maxFlow /
3 direction = "directed"
4 SOURCE = "A"
5 sink = "H"
6 links = {name = "ArcData"}
7 outLinks = {name = "MaxFlow", replace = true}
8 outNodes = {name = "MinCut", replace = true};
9RUN;
Résultat :
L'action calcule la valeur du flux maximum, qui est de 10. La table de sortie 'MaxFlow' contient les flux optimaux pour chaque lien, et la table 'MinCut' identifie les nœuds appartenant à la coupe minimale, qui sépare la source du puits.

FAQ

À quoi sert l'action maxFlow ?
Quels sont les paramètres essentiels pour utiliser l'action maxFlow ?
Quelles tables de données sont nécessaires en entrée pour l'action maxFlow ?
Que spécifie le paramètre 'direction' ?
Comment l'action maxFlow retourne-t-elle le résultat du calcul ?