optNetwork

minCostFlow

Beschreibung

Berechnet den minimalen Kostenfluss eines Graphen. Diese Aktion ist nützlich für Logistik- und Lieferkettenprobleme, um den kostengünstigsten Weg zum Transport von Gütern von Quellen (Angebotsknoten) zu Zielen (Nachfrageknoten) unter Berücksichtigung von Kapazitäts- und Kostenbeschränkungen der Routen zu finden.

optNetwork.minCostFlow <result=results> <status=rc> / deterministic=TRUE | FALSE, direction="DIRECTED" | "UNDIRECTED", display={...}, distributed=TRUE | FALSE, graph=integer, indexOffset=integer, links={...}, linksVar={...}, logFreq=integer, logFreqTime=integer, logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE", maxTime=double, multiLinks=TRUE | FALSE, nodes={...}, nodesVar={...}, nThreads=integer, outGraphList={...}, outLinks={...}, outNodes={...}, outputTables={...}, selfLinks=TRUE | FALSE, standardizedLabels=TRUE | FALSE, standardizedLabelsOut=TRUE | FALSE, timeType="CPU" | "REAL";
Einstellungen
ParameterBeschreibung
deterministicWenn diese Option auf TRUE gesetzt ist, wird sichergestellt, dass jeder Aufruf (bei gleicher Maschinenkonfiguration und gleichen Parametereinstellungen) dasselbe 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 diese Option auf TRUE gesetzt ist, 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 Linkinformationen des Graphen enthält.
linksVarGibt die Datenvariablennamen für die Linktabelle an.
logFreqGibt die Häufigkeit für die Anzeige von Iterationsprotokollen für Berechnungen des minimalen Kostenflusses an, die den Netzwerk-Simplex-Algorithmus verwenden.
logFreqTimeSteuert die Häufigkeit n (in Sekunden) für die Anzeige von Iterationsprotokollen für einige Algorithmen, wobei n eine beliebige ganze Zahl größer oder gleich 1 sein kann.
logLevelSteuert die Menge der Informationen, die im SAS-Protokoll angezeigt werden.
maxTimeGibt die maximale Zeit an, die der Algorithmus aufwenden darf.
multiLinksWenn diese Option auf TRUE gesetzt ist, werden Multilinks beim Lesen eines Eingabegraphen berücksichtigt.
nodesGibt die Eingabedatentabelle an, die die Knoteninformationen des Graphen enthält.
nodesVarGibt die Datenvariablennamen 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 zusammenfassende Informationen über In-Memory-Graphen enthalten soll.
outLinksGibt die Ausgabedatentabelle an, die die Linkinformationen des Graphen zusammen mit allen Ergebnissen der Algorithmen enthalten soll, die Metriken für Links berechnen.
outNodesGibt die Ausgabedatentabelle an, die die Knoteninformationen des Graphen zusammen mit allen Ergebnissen der Algorithmen enthalten soll, die Metriken für Knoten berechnen.
outputTablesListet die Namen der Ergebnistabellen auf, die als CAS-Tabellen auf dem Server gespeichert werden sollen.
selfLinksWenn diese Option auf TRUE gesetzt ist, werden Self-Links beim Lesen eines Eingabegraphen berücksichtigt.
standardizedLabelsWenn diese Option auf TRUE gesetzt ist, gibt sie an, dass die Eingabegraphdaten in einem standardisierten Format vorliegen.
standardizedLabelsOutWenn diese Option auf TRUE gesetzt ist, wird angefordert, dass die Ausgabegraphdaten ein standardisiertes Format enthalten.
timeTypeGibt an, ob CPU-Zeit oder Echtzeit für das maximale Zeitlimit verwendet werden soll.
Erstellung der Graphen-Datensätze

Diese SAS-Datenschritte erstellen die Tabellen `LinkSetIn` und `NodeSetIn`. `LinkSetIn` beschreibt die Verbindungen (Kanten) des Netzwerks, einschließlich Kosten (`weight`), unterer (`lower_bound`) und oberer (`upper_bound`) Kapazitätsgrenzen. `NodeSetIn` legt das Angebot oder die Nachfrage (`supply`) für jeden Knoten fest. Ein positiver Wert ist ein Angebot, ein negativer Wert eine Nachfrage.

Kopiert!
1DATA mycas.LinkSetIn;
2 FORMAT from $1. to $1.;
3 INPUT from $ to $ weight lower_bound upper_bound;
4 DATALINES;
5A B 2 1 4
6A C 1 0 2
7B C 1 0 1
8B D 3 1 3
9C E 4 0 2
10D E 1 0 3
11D F 2 1 2
12E F 1 0 3
13;
14DATA mycas.NodeSetIn;
15 INPUT node $ supply;
16 DATALINES;
17A 10
18F -10
19;
20 

Beispiele

Dieses Beispiel berechnet den minimalen Kostenfluss für einen gerichteten Graphen. Es werden nur die oberen Kapazitätsgrenzen ('upper') aus der `LinkSetIn`-Tabelle verwendet. Das Ergebnis wird in die Tabelle `MinCostFlow` geschrieben.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1 
2PROC CAS;
3optNetwork.minCostFlow / links={name="LinkSetIn", linksVar={upper="upper_bound"}} nodes={name="NodeSetIn"} outLinks={name="MinCostFlow"};
4 
5RUN;
6 
Ergebnis :
Die Aktion berechnet die Gesamtkosten des Flusses und den Flusswert für jede Kante, der die Kosten minimiert, unter Berücksichtigung der oberen Kapazitätsgrenzen in einem gerichteten Graphen. Die Ausgabetabelle 'MinCostFlow' enthält die Details des Flusses.

Dieses Beispiel löst ein Problem des minimalen Kostenflusses in einem ungerichteten Graphen (`direction='UNDIRECTED'`). Es werden sowohl untere (`lower='lower_bound'`) als auch obere (`upper='upper_bound'`) Kapazitätsgrenzen für die Kanten verwendet. Dies ermöglicht eine flexiblere Modellierung, bei der der Fluss in beide Richtungen fließen kann.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1 
2PROC CAS;
3optNetwork.minCostFlow / links={name="LinkSetIn", linksVar={lower="lower_bound", upper="upper_bound"}} nodes={name="NodeSetIn"} direction="UNDIRECTED" outLinks={name="MinCostFlowDetail"};
4 
5RUN;
6 
Ergebnis :
Das Ergebnis ist der minimale Gesamtkostenfluss für den ungerichteten Graphen unter Einhaltung der unteren und oberen Kapazitätsgrenzen. Die Ausgabetabelle 'MinCostFlowDetail' zeigt den Fluss und die reduzierten Kosten für jede Kante, was anzeigt, wie sich die Kosten ändern würden, wenn der Fluss um eine Einheit erhöht würde.

FAQ

Was ist die Aktion `minCostFlow`?
Welche Art von Problem löst die Aktion `minCostFlow`?
Welche Haupteingabedaten werden für die `minCostFlow`-Aktion benötigt?
Kann die `minCostFlow`-Aktion mit gerichteten und ungerichteten Graphen umgehen?
Welchen Algorithmus verwendet die `minCostFlow`-Aktion?
Was sind die Hauptausgabetabellen der `minCostFlow`-Aktion?