Seturi
Seturile sunt elementele de bază ale unui model GAMS, corespunzând exact indicilor din reprezentările algebrice ale modelelor. Exemplul de transport de mai sus conține doar un singur enunț Set:
Sets i canning plants / Seattle, San-Diego / j markets / New-York, Chicago, Topeka / ;
Efectul acestui enunț este probabil de la sine înțeles. Am declarat două seturi și le-am dat numele $i$ și $j$. De asemenea, am atribuit membrii seturilor după cum urmează:
$i =$ {Seattle, San Diego}
$j =$ {New York, Chicago, Topeka}.
Rețineți utilizarea liniuțelor pentru numerotarea membrilor unui set. În notația matematică și în alte limbaje de programare, acest lucru s-ar face adesea cu paranteze curbe în loc de paranteze curbe.
Parametri
Parametrii sunt o modalitate de introducere a datelor în GAMS. În acest caz, parametrii $a$ și $b$ sunt definiți peste seturile $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 vă permite să plasați text explicativ (afișat cu minuscule) pe tot parcursul modelului dumneavoastră, pe măsură ce îl dezvoltați. Comentariile dumneavoastră sunt încorporate automat în raportul de ieșire, în locurile corespunzătoare.
Tabele
Datele pot fi, de asemenea, introduse într-o formă convenabilă de tabel. GAMS vă permite să introduceți datele în forma lor de bază – transformările sunt specificate algebric.
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
Constantele pot fi declarate pur și simplu ca scalari:
Scalar f freight in dollars per case per thousand miles /90/ ;
Manipulare de date
Când valorile datelor trebuie calculate, mai întâi declarați parametrul (adică îi dați un simbol și, opțional, îl indexați), apoi dați formularea sa algebrică. GAMS va efectua automat calculele.
Parameter c(i,j) transport cost in thousands of dollars per case ;c(i,j) = f * d(i,j) / 1000 ;
Variabile
Variabilele de decizie sunt exprimate algebric, cu indicii lor specificați. Din această formă generală, GAMS generează fiecare instanță a variabilei în domeniu. variabilele sunt specificate în ceea ce privește tipul: FREE, POSITIVE, NEGATIVE, BINARY sau INTEGER. Valoarea implicită este FREE.Variabila obiectiv (z, aici) este pur și simplu declarată fără un indice.
Variables x(i,j) shipment quantities in cases z total transportation costs in thousands of dollars ;Positive variables x ;
Equations
Equațiile funcției obiective și ale constrângerilor sunt declarate mai întâi prin atribuirea de nume. Apoi se descriu formulele lor algebrice generale. GAMS are acum suficiente informații (din datele introduse mai sus și din relațiile algebrice specificate în ecuații) pentru a genera automat fiecare declarație de constrângere individuală – așa cum se poate vedea în raportul de ieșire de mai jos. Un set extins de instrumente vă permite să modelați orice expresie care poate fi enunțată algebric: aritmetică, indexare, funcții și logică de tratare a excepțiilor (de exemplu, construcțiile if-then-else și such-that).
=E= indică “egal cu”
=L= indică “mai mic sau egal cu”
=G= indică “mai mare sau egal cu”
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) ;
Declarație de model
Modelul primește un nume unic (aici, TRANSPORT), iar modelatorul specifică ce ecuații trebuie incluse în această formulare particulară. În acest caz am specificat ALL, ceea ce indică faptul că toate ecuațiile fac parte din model. Acest lucru ar fi echivalent cu MODEL TRANSPORT /COST, SUPPLY, DEMAND/ . Această selecție de ecuații vă permite să formulați diferite modele în cadrul unui singur fișier de intrare GAMS, pe baza acelorași date date sau a unor date diferite.
Model transport /all/ ;
Solve statement
Explicația solve (1) îi spune lui GAMS ce model să rezolve, (2) selectează soluționatorul care trebuie utilizat (în acest caz un soluționator LP), (3) indică direcția optimizării, fie MINIMIZARE sau MAXIMIZARE , și (4) specifică variabila obiectiv.
Solve transport using LP minimizing z ;