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.
| Parameter | Beschreibung |
|---|---|
| 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. |
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.
| 1 | DATA mycas.LinkSetIn; |
| 2 | FORMAT from $1. to $1.; |
| 3 | INPUT from $ to $ weight lower_bound upper_bound; |
| 4 | DATALINES; |
| 5 | A B 2 1 4 |
| 6 | A C 1 0 2 |
| 7 | B C 1 0 1 |
| 8 | B D 3 1 3 |
| 9 | C E 4 0 2 |
| 10 | D E 1 0 3 |
| 11 | D F 2 1 2 |
| 12 | E F 1 0 3 |
| 13 | ; |
| 14 | DATA mycas.NodeSetIn; |
| 15 | INPUT node $ supply; |
| 16 | DATALINES; |
| 17 | A 10 |
| 18 | F -10 |
| 19 | ; |
| 20 |
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.
| 1 | |
| 2 | PROC CAS; |
| 3 | optNetwork.minCostFlow / links={name="LinkSetIn", linksVar={upper="upper_bound"}} nodes={name="NodeSetIn"} outLinks={name="MinCostFlow"}; |
| 4 | |
| 5 | RUN; |
| 6 |
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.
| 1 | |
| 2 | PROC CAS; |
| 3 | optNetwork.minCostFlow / links={name="LinkSetIn", linksVar={lower="lower_bound", upper="upper_bound"}} nodes={name="NodeSetIn"} direction="UNDIRECTED" outLinks={name="MinCostFlowDetail"}; |
| 4 | |
| 5 | RUN; |
| 6 |