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
deterministic Wenn diese Option auf TRUE gesetzt ist, wird sichergestellt, dass jeder Aufruf (bei gleicher Maschinenkonfiguration und gleichen Parametereinstellungen) dasselbe Endergebnis liefert.
direction Gibt an, ob der Eingabegraph als gerichtet oder ungerichtet betrachtet werden soll.
display Gibt eine Liste von Ergebnistabellen an, die zur Anzeige an den Client gesendet werden sollen.
distributed Wenn diese Option auf TRUE gesetzt ist, wird ein verteilter Graph verwendet.
graph Gibt den zu verwendenden In-Memory-Graphen an.
indexOffset Gibt den Index-Offset für Bezeichner in den Protokoll- und Ergebnisausgabetabellen an.
links Gibt die Eingabedatentabelle an, die die Linkinformationen des Graphen enthält.
linksVar Gibt die Datenvariablennamen für die Linktabelle an.
logFreq Gibt die Häufigkeit für die Anzeige von Iterationsprotokollen für Berechnungen des minimalen Kostenflusses an, die den Netzwerk-Simplex-Algorithmus verwenden.
logFreqTime Steuert 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.
logLevel Steuert die Menge der Informationen, die im SAS-Protokoll angezeigt werden.
maxTime Gibt die maximale Zeit an, die der Algorithmus aufwenden darf.
multiLinks Wenn diese Option auf TRUE gesetzt ist, werden Multilinks beim Lesen eines Eingabegraphen berücksichtigt.
nodes Gibt die Eingabedatentabelle an, die die Knoteninformationen des Graphen enthält.
nodesVar Gibt die Datenvariablennamen für die Knotentabelle an.
nThreads Gibt die maximale Anzahl von Threads an, die für die Multithread-Verarbeitung verwendet werden sollen.
outGraphList Gibt die Ausgabedatentabelle an, die zusammenfassende Informationen über In-Memory-Graphen enthalten soll.
outLinks Gibt die Ausgabedatentabelle an, die die Linkinformationen des Graphen zusammen mit allen Ergebnissen der Algorithmen enthalten soll, die Metriken für Links berechnen.
outNodes Gibt die Ausgabedatentabelle an, die die Knoteninformationen des Graphen zusammen mit allen Ergebnissen der Algorithmen enthalten soll, die Metriken für Knoten berechnen.
outputTables Listet die Namen der Ergebnistabellen auf, die als CAS-Tabellen auf dem Server gespeichert werden sollen.
selfLinks Wenn diese Option auf TRUE gesetzt ist, werden Self-Links beim Lesen eines Eingabegraphen berücksichtigt.
standardizedLabels Wenn diese Option auf TRUE gesetzt ist, gibt sie an, dass die Eingabegraphdaten in einem standardisierten Format vorliegen.
standardizedLabelsOut Wenn diese Option auf TRUE gesetzt ist, wird angefordert, dass die Ausgabegraphdaten ein standardisiertes Format enthalten.
timeType Gibt 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?