Množiny
Množiny jsou základní stavební kameny modelu GAMS, které přesně odpovídají indexům v algebraických reprezentacích modelů. Výše uvedený příklad dopravy obsahuje právě jeden příkaz Set:
Sets i canning plants / Seattle, San-Diego / j markets / New-York, Chicago, Topeka / ;
Důsledek tohoto příkazu je pravděpodobně zřejmý. Deklarovali jsme dvě množiny a dali jim jména $i$ a $j$. Členy množin jsme také přiřadili takto:
$i =$ {Seattle, San Diego}
$j =$ {New York, Chicago, Topeka}.
Všimněte si použití pomlček pro číslování členů množiny. V matematické notaci a jiných programovacích jazycích by se to často místo toho provádělo pomocí kudrnatých závorek.
Parametry
Parametry jsou jedním ze způsobů zadávání dat v systému GAMS. V tomto případě jsou parametry $a$ a $b$ definovány nad množinami $i$ a $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 umožňuje umístit vysvětlující text (zobrazený malými písmeny) v celém modelu, jak jej rozvíjíte. Vaše komentáře se automaticky zapracují do výstupní zprávy na příslušných místech.
Tabulka
Data lze také zadávat v pohodlné tabulkové formě. GAMS umožňuje zadávat data v jejich základní podobě – transformace se zadávají algebraicky.
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
Konstanty lze jednoduše deklarovat jako skaláry:
Scalar f freight in dollars per case per thousand miles /90/ ;
Manipulace s daty
Pokud je třeba vypočítat hodnoty dat, nejprve deklarujete parametr (tj. dáte mu symbol a případně index), poté uvedete jeho algebraickou formulaci. GAMS provede výpočty automaticky.
Parameter c(i,j) transport cost in thousands of dollars per case ;c(i,j) = f * d(i,j) / 1000 ;
Proměnné
Proměnné pro rozhodování se vyjadřují algebraicky s uvedením jejich indexů. Z tohoto obecného tvaru GAMS vygeneruje každou instanci proměnné v doméně. proměnné jsou specifikovány co do typu: Volné, POZITIVNÍ, NEGATIVNÍ, BINÁRNÍ nebo INTEGER. Výchozí je FREE. objektivní proměnná (zde z) je jednoduše deklarována bez indexu.
Variables x(i,j) shipment quantities in cases z total transportation costs in thousands of dollars ;Positive variables x ;
Rovnice
Rovnice objektivní funkce a omezení se nejprve deklarují tak, že se pojmenují. Poté jsou popsány jejich obecné algebraické vzorce. GAMS má nyní dostatek informací (z údajů zadaných výše a z algebraických vztahů uvedených v rovnicích), aby mohl automaticky vygenerovat každý jednotlivý příkaz omezení – jak je vidět ve výstupní sestavě níže. Rozsáhlá sada nástrojů umožňuje modelovat jakýkoli výraz, který lze uvést algebraicky: aritmetiku, indexování, funkce a log. obsluhu výjimek (např. konstrukce if-then-else a such-that).
=E= označuje ‘rovná se’
=L= označuje ‘menší nebo rovno’
=G= označuje ‘větší nebo rovno’
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) ;
Modelový příkaz
Model má jedinečné jméno (zde TRANSPORT) a modelář určuje, které rovnice mají být zahrnuty do této konkrétní formulace. V tomto případě jsme zadali ALL, což znamená, že součástí modelu jsou všechny rovnice. Tomu by odpovídal MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . Tento výběr rovnic umožňuje formulovat různé modely v rámci jediného vstupního souboru systému GAMS na základě stejných nebo různých zadaných údajů.
Model transport /all/ ;
Příkaz solve
Příkaz solve (1) říká systému GAMS, který model se má řešit, (2) vybírá řešitel, který se má použít (v tomto případě řešitel LP), (3) udává směr optimalizace, buď MINIMALIZACE, nebo MAXIMALIZACE , a (4) určuje cílovou proměnnou.
Solve transport using LP minimizing z ;
.