optNetwork

maxFlow

Beschreibung

Die Aktion `maxFlow` berechnet den maximalen Fluss in einem Graphen zwischen einem angegebenen Quellknoten und einem Senkenknoten. Der maximale Fluss ist die größte Menge an 'Material', die von der Quelle zur Senke durch das Netzwerk von Kanten mit begrenzten Kapazitäten transportiert werden kann. Dieses Problem ist fundamental in der Netzwerkoptimierung und findet Anwendung in Logistik, Telekommunikation und vielen anderen Bereichen.

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;
Einstellungen
ParameterBeschreibung
deterministicWenn auf True gesetzt, stellt sicher, dass jeder Aufruf (mit der gleichen Maschinenkonfiguration und Parametereinstellungen) das gleiche Endergebnis liefert.
directionGibt an, ob der Eingabegraph als gerichtet oder ungerichtet betrachtet werden soll.
displayGibt eine Liste von Ergebnistabellen an, die zur Anzeige an den Client gesendet werden sollen.
distributedWenn auf True gesetzt, wird ein verteilter Graph verwendet.
graphGibt den zu verwendenden In-Memory-Graphen an.
indexOffsetGibt den Index-Offset für Bezeichner in den Protokoll- und Ergebnisausgabetabellen an.
linksGibt die Eingabedatentabelle an, die die Informationen zu den Graphkanten enthält.
linksVarGibt die Namen der Datenvariablen für die Kantentabelle an.
logFreqTimeSteuert die Frequenz n (in Sekunden) für die Anzeige von Iterationsprotokollen für einige Algorithmen.
logLevelSteuert die Menge der im SAS-Protokoll angezeigten Informationen.
multiLinksWenn auf True gesetzt, werden Mehrfachkanten beim Einlesen eines Graphen berücksichtigt.
nodesGibt die Eingabedatentabelle an, die die Informationen zu den Graphknoten enthält.
nodesVarGibt die Namen der Datenvariablen für die Knotentabelle an.
nThreadsGibt die maximale Anzahl von Threads an, die für die Multithread-Verarbeitung verwendet werden sollen.
outGraphListGibt die Ausgabedatentabelle an, die Zusammenfassungsinformationen über In-Memory-Graphen enthalten soll.
outLinksGibt die Ausgabedatentabelle an, die die Kanteninformationen des Graphen zusammen mit allen Ergebnissen der Algorithmen enthält, die Metriken für Kanten berechnen.
outNodesGibt die Ausgabedatentabelle an, die die Knoteninformationen des Graphen zusammen mit allen Ergebnissen der Algorithmen enthält, die Metriken für Knoten berechnen.
outputTablesListet die Namen der Ergebnistabellen auf, die als CAS-Tabellen auf dem Server gespeichert werden sollen.
selfLinksWenn auf True gesetzt, werden Eigenschleifen beim Einlesen eines Graphen berücksichtigt.
sinkGibt den Senkenknoten für die Berechnungen des maximalen Netzwerkflusses an.
sourceGibt den Quellenknoten für die Berechnungen des maximalen Netzwerkflusses an.
standardizedLabelsWenn auf True gesetzt, wird angegeben, dass die Eingabegraphendaten in einem standardisierten Format vorliegen.
standardizedLabelsOutWenn auf True gesetzt, wird angefordert, dass die Ausgabegraphendaten ein standardisiertes Format enthalten.
Erstellung von Beispieldaten für den maximalen Fluss

Dieser SAS-Code erstellt eine CAS-Tabelle namens `LinkData`, die einen gerichteten Graphen mit Kantenkapazitäten darstellt. Diese Daten werden verwendet, um den maximalen Fluss von einem Quell- zu einem Senkenknoten zu berechnen.

Kopiert!
1DATA casuser.LinkData;
2 INFILE DATALINES delimiter=',';
3 INPUT from $ to $ capacity;
4 DATALINES;
5A,B,3
6A,C,2
7B,D,2
8B,E,3
9C,D,3
10C,F,2
11E,G,1
12D,G,4
13F,G,3
14;
15RUN;

Beispiele

Dieses Beispiel berechnet den maximalen Fluss von einem Quellknoten 'A' zu einem Senkenknoten 'G' unter Verwendung der zuvor erstellten `LinkData`-Tabelle. Die Ergebnisse, einschließlich des Flusses auf jeder Kante, werden in der Tabelle `MaxFlowLinks` gespeichert.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 ACTION optNetwork.maxFlow /
3 links={name='LinkData'},
4 SOURCE='A',
5 sink='G',
6 outLinks={name='MaxFlowLinks', replace=true};
7 RUN;
8QUIT;
Ergebnis :
Die Aktion gibt den Gesamtwert des maximalen Flusses zurück. Die Tabelle `MaxFlowLinks` wird erstellt und enthält die ursprünglichen Kanteninformationen sowie eine neue Spalte 'flow', die den optimalen Fluss für jede Kante angibt, der zum maximalen Gesamtfluss beiträgt.

Dieses Beispiel erweitert die einfache Berechnung, indem es auch die minimale Schnittpartition ausgibt. Die Partition trennt die Knoten in zwei Mengen: eine, die von der Quelle aus im Residualgraphen erreichbar ist, und eine, die es nicht ist. Dies ist nützlich, um Engpässe im Netzwerk zu identifizieren.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 ACTION optNetwork.maxFlow /
3 links={name='LinkData'},
4 SOURCE='A',
5 sink='G',
6 outLinks={name='MaxFlowLinks', replace=true},
7 outNodes={name='MinCutNodes', replace=true};
8 RUN;
9QUIT;
Ergebnis :
Zusätzlich zu den Ergebnissen des einfachen Beispiels wird eine Tabelle namens `MinCutNodes` erstellt. Diese Tabelle enthält eine Spalte 'partition', die für jeden Knoten angibt, ob er zur Quellpartition (Wert 1) oder zur Senkenpartition (Wert 0) des minimalen Schnitts gehört.

FAQ

Was ist der Zweck der `maxFlow`-Aktion?
Welche Eingabedatentabellen sind für die `maxFlow`-Aktion erforderlich?
Wie gibt man den Quell- und Senkenknoten für die Maximalflussberechnung an?
Welche Ausgabetabellen generiert die `maxFlow`-Aktion, um die Ergebnisse darzustellen?
Kann die `maxFlow`-Aktion sowohl mit gerichteten als auch mit ungerichteten Graphen arbeiten?
Was stellt die Spalte `flow` in der `outLinks`-Ausgabetabelle dar?