GAMS

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 ; 

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.