Zestawy
Zestawy są podstawowymi elementami konstrukcyjnymi modelu GAMS, odpowiadającymi dokładnie indeksom w algebraicznych reprezentacjach modeli. Powyższy przykład Transportu zawiera tylko jedną deklarację Set:
Sets i canning plants / Seattle, San-Diego / j markets / New-York, Chicago, Topeka / ;
Skutek tej deklaracji jest chyba oczywisty. Zadeklarowaliśmy dwa zbiory i nadaliśmy im nazwy $i$ i $j$. Przypisaliśmy również członków do zbiorów w następujący sposób:
$i =$ {Seattle, San Diego}
$j =$ {Nowy Jork, Chicago, Topeka}.
Zauważ użycie myślników do numerowania członków zbioru. W notacji matematycznej i innych językach programowania często robi się to za pomocą nawiasów klamrowych.
Parametry
Parametry są jednym ze sposobów wprowadzania danych w GAMS. W tym przypadku, parametry $a$ i $b$ są zdefiniowane na zbiorach $i$ i $j$.
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 pozwala Ci umieścić tekst wyjaśniający (pokazany małymi literami) w całym modelu, jak go rozwijasz. Twoje komentarze są automatycznie włączane do raportu wyjściowego, w odpowiednich miejscach.
Table
Dane mogą być również wprowadzane w wygodnej formie tabeli. GAMS pozwala wprowadzać dane w ich podstawowej postaci – przekształcenia są określane algebraicznie.
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 ;
Scalar
Stałe mogą być po prostu deklarowane jako skalary:
Scalar f freight in dollars per case per thousand miles /90/ ;
Data Manipulation
Gdy wartości danych mają być obliczone, najpierw deklarujemy parametr (tzn. nadajemy mu symbol i, opcjonalnie, indeksujemy go), a następnie podajemy jego sformułowanie algebraiczne. GAMS automatycznie wykona obliczenia.
Parameter c(i,j) transport cost in thousands of dollars per case ;c(i,j) = f * d(i,j) / 1000 ;
Zmienne
Zmienne decyzyjne są wyrażone algebraicznie, z określonymi ich indeksami. Z tej ogólnej postaci, GAMS generuje każdą instancję zmiennej w dziedzinie.Zmienne są określone co do typu: FREE, POSITIVE, NEGATIVE, BINARY lub INTEGER. The default is FREE.The objective variable (z, here) is simply declared without an index.
Variables x(i,j) shipment quantities in cases z total transportation costs in thousands of dollars ;Positive variables x ;
Equations
Równania funkcji celu i równania ograniczeń są najpierw deklarowane przez nadanie im nazw. Następnie opisuje się ich ogólne wzory algebraiczne. GAMS posiada teraz wystarczająco dużo informacji (z danych wprowadzonych powyżej oraz z zależności algebraicznych określonych w równaniach), aby automatycznie wygenerować każde indywidualne wyrażenie ograniczenia – jak widać na poniższym raporcie wyjściowym. Rozbudowany zestaw narzędzi pozwala na modelowanie dowolnego wyrażenia, które może być wyrażone algebraicznie: arytmetyka, indeksowanie, funkcje i rejestr obsługi wyjątków (np. konstrukcje if-then-else i such-that).
=E= oznacza ‘równy’
=L= oznacza ‘mniejszy lub równy’
=G= oznacza ‘większy lub równy’
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) ;
Określenie modelu
Model otrzymuje unikalną nazwę (tutaj TRANSPORT), a modeler określa, które równania powinny być zawarte w tym konkretnym sformułowaniu. W tym przypadku określiliśmy ALL, co oznacza, że wszystkie równania są częścią modelu. Byłoby to równoznaczne z MODELEM TRANSPORTU /COST, SUPPLY, DEMAND/ . Ten wybór równań umożliwia formułowanie różnych modeli w ramach jednego pliku wejściowego GAMS, w oparciu o te same lub różne dane.
Model transport /all/ ;
Konstrukcja solve
Konstrukcja solve (1) mówi GAMS, który model ma rozwiązać, (2) wybiera solver do użycia (w tym przypadku solver LP), (3) wskazuje kierunek optymalizacji, albo MINIMALIZOWANIE albo MAKSYMALIZOWANIE , i (4) określa zmienną celu.
Solve transport using LP minimizing z ;
.