Mängder
Mängder är de grundläggande byggstenarna i en GAMS-modell och motsvarar exakt indexen i modellernas algebraiska representationer. Transportexemplet ovan innehåller bara ett Set-uttalande:
Sets i canning plants / Seattle, San-Diego / j markets / New-York, Chicago, Topeka / ;
Effekten av detta uttalande är förmodligen självklar. Vi deklarerade två uppsättningar och gav dem namnen $i$ och $j$. Vi tilldelade också medlemmarna till uppsättningarna på följande sätt:
$i =$ {Seattle, San Diego}
$j =$ {New York, Chicago, Topeka}.
Bemärk användningen av streck för numrering av medlemmarna i en uppsättning. I matematisk notation och andra programmeringsspråk skulle detta ofta göras med parenteser istället.
Parametrar
Parametrar är ett sätt att ange data i GAMS. I det här fallet definieras parametrarna $a$ och $b$ över uppsättningarna $i$ och $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 låter dig placera förklarande text (som visas med små bokstäver) i hela din modell när du utvecklar den. Dina kommentarer införlivas automatiskt i utdatarapporten, på lämpliga ställen.
Tabell
Data kan också föras in i praktisk tabellform. GAMS låter dig mata in data i deras grundform – transformationer specificeras algebraiskt.
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
Konstanter kan helt enkelt deklareras som skalarer:
Scalar f freight in dollars per case per thousand miles /90/ ;
Datahantering
När datavärden ska beräknas deklarerar du först parametern (dvs. du ger den en symbol och, eventuellt, indexerar den) och anger sedan dess algebraiska formulering. GAMS gör beräkningarna automatiskt.
Parameter c(i,j) transport cost in thousands of dollars per case ;c(i,j) = f * d(i,j) / 1000 ;
Variabler
Beslutsvariabler uttrycks algebraiskt och deras index anges. Från denna allmänna form genererar GAMS varje instans av variabeln i domänen.Variabler specificeras med avseende på typ: Variablerna anges i form av typen FREE, POSITIV, NEGATIV, BINÄR eller INTEGER. Standardvärdet är FREE.Den objektiva variabeln (z, här) deklareras helt enkelt utan index.
Variables x(i,j) shipment quantities in cases z total transportation costs in thousands of dollars ;Positive variables x ;
Ekvationer
Objektivfunktions- och begränsningsekvationer deklareras först genom att ge dem namn. Därefter beskrivs deras allmänna algebraiska formler. GAMS har nu tillräckligt med information (från de uppgifter som angetts ovan och från de algebraiska förhållanden som anges i ekvationerna) för att automatiskt generera varje enskilt tvångsuttalande – vilket du kan se i utdatarapporten nedan. En omfattande uppsättning verktyg gör det möjligt att modellera alla uttryck som kan anges algebraiskt: aritmetik, indexering, funktioner och loggbok för undantagshantering (t.ex. if-then-else och such-that-konstruktioner).
=E= anger ‘lika med’
=L= anger ‘mindre än eller lika med’
=G= anger ‘större än eller lika med’
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) ;
Modellangivelse
Modellen ges ett unikt namn (här TRANSPORT), och modellören specificerar vilka ekvationer som ska ingå i just denna formulering. I det här fallet har vi angett ALL vilket anger att alla ekvationer ingår i modellen. Detta skulle motsvara MODELL TRANSPORT /COST, SUPPLY, DEMAND/ . Detta ekvationsval gör det möjligt att formulera olika modeller inom en enda GAMS-inmatningsfil, baserat på samma eller olika givna data.
Model transport /all/ ;
Solve statement
Solve statement (1) talar om för GAMS vilken modell som ska lösas, (2) väljer vilken lösare som ska användas (i det här fallet en LP-lösare), (3) anger riktningen för optimeringen, antingen MINIMIZING eller MAXIMIZING , och (4) specificerar målvariabeln.
Solve transport using LP minimizing z ;