Sets
Sets sind die Grundbausteine eines GAMS-Modells und entsprechen genau den Indizes in den algebraischen Darstellungen von Modellen. Das obige Transport-Beispiel enthält nur eine einzige Set-Anweisung:
Sets i canning plants / Seattle, San-Diego / j markets / New-York, Chicago, Topeka / ;
Die Wirkung dieser Anweisung ist wahrscheinlich selbsterklärend. Wir haben zwei Mengen deklariert und ihnen die Namen $i$ und $j$ gegeben. Außerdem haben wir den Mengen die Mitglieder wie folgt zugeordnet:
$i =$ {Seattle, San Diego}
$j =$ {New York, Chicago, Topeka}.
Beachten Sie die Verwendung von Bindestrichen zur Durchnummerierung der Mitglieder einer Menge. In der mathematischen Notation und in anderen Programmiersprachen wird dies oft durch geschweifte Klammern ersetzt.
Parameter
Parameter sind eine Möglichkeit, Daten in GAMS einzugeben. In diesem Fall werden die Parameter $a$ und $b$ über die Mengen $i$ und $j$ definiert.
Parameters a(i) capacity of plant i in cases / Seattle 350 San-Diego 600 / b(j) demand at market j in cases / New-York 325 Chicago 300 Topeka 275 / ;
GAMS ermöglicht es Ihnen, während der Entwicklung Ihres Modells erläuternden Text (in Kleinbuchstaben) zu platzieren. Ihre Kommentare werden automatisch in den Ausgabebericht an den entsprechenden Stellen eingefügt.
Tabelle
Daten können auch in praktischer Tabellenform eingegeben werden. Mit GAMS können Sie Daten in ihrer Grundform eingeben – Transformationen werden algebraisch angegeben.
Table d(i,j) distance in thousands of miles New-York Chicago Topeka Seattle 2.5 1.7 1.8 San-Diego 2.5 1.8 1.4 ;
Skalar
Konstanten können einfach als Skalare deklariert werden:
Scalar f freight in dollars per case per thousand miles /90/ ;
Datenmanipulation
Wenn Datenwerte berechnet werden sollen, deklarieren Sie zunächst den Parameter (d.h. geben Sie ihm ein Symbol und optional einen Index) und geben dann seine algebraische Formulierung an. GAMS führt die Berechnungen automatisch durch.
Parameter c(i,j) transport cost in thousands of dollars per case ;c(i,j) = f * d(i,j) / 1000 ;
Variablen
Entscheidungsvariablen werden algebraisch ausgedrückt, wobei ihre Indizes angegeben werden. Aus dieser allgemeinen Form generiert GAMS jede Instanz der Variablen in der Domäne.Variablen werden nach ihrem Typ spezifiziert: FREE, POSITIVE, NEGATIVE, BINARY, oder INTEGER. Die Standardeinstellung ist FREE.Die Zielvariable (hier z) wird einfach ohne Index deklariert.
Variables x(i,j) shipment quantities in cases z total transportation costs in thousands of dollars ;Positive variables x ;
Gleichungen
Zielfunktionen und Zwangsbedingungen werden zunächst deklariert, indem man ihnen Namen gibt. Dann werden ihre allgemeinen algebraischen Formeln beschrieben. GAMS verfügt nun über genügend Informationen (aus den oben eingegebenen Daten und den in den Gleichungen spezifizierten algebraischen Beziehungen), um automatisch jede einzelne Constraint-Anweisung zu generieren – wie Sie im unten stehenden Ausgabebericht sehen können. Ein umfangreicher Satz von Werkzeugen ermöglicht es Ihnen, jeden Ausdruck zu modellieren, der algebraisch angegeben werden kann: Arithmetik, Indexierung, Funktionen und Ausnahmebehandlungsprotokoll (z.B. if-then-else und such-that-Konstrukte).
=E= bedeutet ‘gleich’
=L= bedeutet ‘kleiner oder gleich’
=G= bedeutet ‘größer oder gleich’
Equations cost define objective function supply(i) observe supply limit at plant i demand(j) satisfy demand at market j ;cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ;supply(i) .. sum(j, x(i,j)) =l= a(i) ;demand(j) .. sum(i, x(i,j)) =g= b(j) ;
Modellanweisung
Das Modell erhält einen eindeutigen Namen (hier TRANSPORT), und der Modellierer gibt an, welche Gleichungen in diese spezielle Formulierung aufgenommen werden sollen. In diesem Fall haben wir ALL angegeben, was bedeutet, dass alle Gleichungen Teil des Modells sind. Dies wäre gleichbedeutend mit MODELL TRANSPORT /COST, SUPPLY, DEMAND/ . Diese Gleichungsauswahl ermöglicht es, innerhalb einer einzigen GAMS-Eingabedatei verschiedene Modelle zu formulieren, die auf denselben oder unterschiedlichen gegebenen Daten basieren.
Model transport /all/ ;
Solve-Anweisung
Die solve-Anweisung (1) teilt GAMS mit, welches Modell gelöst werden soll, (2) wählt den zu verwendenden Solver aus (in diesem Fall einen LP-Solver), (3) gibt die Richtung der Optimierung an, entweder MINIMIEREN oder MAXIMIEREN , und (4) gibt die Zielvariable an.
Solve transport using LP minimizing z ;