Sets
A set-ek a GAMS-modellek alapvető építőkövei, amelyek pontosan megfelelnek a modellek algebrai reprezentációinak indexeinek. A fenti Szállítási példa egyetlen Set utasítást tartalmaz:
Sets i canning plants / Seattle, San-Diego / j markets / New-York, Chicago, Topeka / ;
Az utasítás hatása valószínűleg magától értetődő. Két halmazt deklaráltunk, és adtunk nekik $i$ és $j$ nevet. A halmazok tagjait is hozzárendeltük a következőképpen:
$i =$ {Seattle, San Diego}
$j =$ {New York, Chicago, Topeka}.
Figyeljünk a kötőjelek használatára a halmaz tagjainak számozására. A matematikai jelölésekben és más programozási nyelvekben ezt gyakran görbe zárójelekkel tennénk helyette.
Paraméterek
A paraméterek az adatok megadásának egyik módja a GAMS-ban. Ebben az esetben a $a$ és $b$ paramétereket a $i$ és $j$ halmazok felett definiáljuk.
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 / ;
A GAMS lehetővé teszi, hogy a modell fejlesztése során magyarázó szöveget (kisbetűvel feltüntetve) helyezzünk el a modellben. A megjegyzései automatikusan beépülnek a kimeneti jelentésbe, a megfelelő helyeken.
Táblázat
Az adatokat kényelmes táblázatos formában is megadhatjuk. A GAMS lehetővé teszi, hogy az adatokat alapformájukban adjuk meg – a transzformációkat algebrai úton adjuk meg.
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 ;
Skalár
A konstansokat egyszerűen deklarálhatjuk skalárként:
Scalar f freight in dollars per case per thousand miles /90/ ;
Adatmanipuláció
Ha adatértékeket kell kiszámítani, akkor először deklaráljuk a paramétert (azaz adunk neki egy szimbólumot és opcionálisan indexet), majd megadjuk az algebrai formuláját. A GAMS automatikusan elvégzi a számításokat.
Parameter c(i,j) transport cost in thousands of dollars per case ;c(i,j) = f * d(i,j) / 1000 ;
Változók
A döntési változókat algebrailag fejezzük ki, indexük megadásával. Ebből az általános formából a GAMS generálja a változó minden egyes példányát a tartományban.A változókat típus szerint adjuk meg: A változókat a következőképpen kell megadni: INGYENES, POSITÍV, NEGATÍV, BINÁRIS vagy INTEGER. Az alapértelmezett a FREE.A célváltozót (itt z) egyszerűen index nélkül deklaráljuk.
Variables x(i,j) shipment quantities in cases z total transportation costs in thousands of dollars ;Positive variables x ;
Egyenletek
A célfüggvény és a kényszeregyenleteket először a nevük megadásával deklaráljuk. Ezután általános algebrai képleteiket írjuk le. A GAMS most már elegendő információval rendelkezik (a fent megadott adatokból és az egyenletekben megadott algebrai összefüggésekből) ahhoz, hogy automatikusan generáljon minden egyes kényszerkijelentést – amint azt az alábbi kimeneti jelentésben láthatjuk. Az eszközök kiterjedt készlete lehetővé teszi minden olyan kifejezés modellezését, amely algebrai úton megadható: aritmetika, indexelés, függvények és kivételkezelő log (pl. if-then-else és such-that konstrukciók).
=E= ‘egyenlő’
=L= ‘kisebb vagy egyenlő’
=G= ‘nagyobb vagy egyenlő’
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) ;
Modell állítás
A modellnek egyedi nevet adunk (itt TRANSPORT), és a modellező megadja, hogy mely egyenletek szerepeljenek az adott megfogalmazásban. Ebben az esetben ALL-t adtunk meg, ami azt jelzi, hogy az összes egyenlet része a modellnek. Ez a következővel lenne egyenértékű: MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . Ez az egyenletválasztás lehetővé teszi, hogy egyetlen GAMS bemeneti fájlon belül különböző modelleket fogalmazzunk meg, azonos vagy különböző adott adatok alapján.
Model transport /all/ ;
Solve utasítás
A solve utasítás (1) megmondja a GAMS-nak, hogy melyik modellt kell megoldani, (2) kiválasztja a használandó solvert (ebben az esetben egy LP solvert), (3) megadja az optimalizálás irányát, vagy MINIMÁLÁS vagy MAXIMÁLÁS , és (4) megadja a célváltozót.
Solve transport using LP minimizing z ;
.