GAMS

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 ; 

.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.