Sets
Los sets son los bloques básicos de construcción de un modelo GAMS, que corresponden exactamente a los índices en las representaciones algebraicas de los modelos. El ejemplo de Transporte anterior contiene sólo una declaración de Set:
Sets i canning plants / Seattle, San-Diego / j markets / New-York, Chicago, Topeka / ;
El efecto de esta declaración es probablemente evidente. Hemos declarado dos conjuntos y les hemos dado los nombres $i$ y $j$. También asignamos miembros a los conjuntos como sigue:
$i =$ {Seattle, San Diego}
$j =$ {New York, Chicago, Topeka}.
Nótese el uso de guiones para numerar los miembros de un conjunto. En la notación matemática y otros lenguajes de programación esto se haría a menudo con llaves rizadas en su lugar.
Parámetros
Los parámetros son una forma de introducir datos en GAMS. En este caso, los parámetros $a$ y $b$ se definen sobre los conjuntos $i$ y $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 le permite colocar texto explicativo (mostrado en minúsculas) a lo largo de su modelo, mientras lo desarrolla. Sus comentarios se incorporan automáticamente en el informe de salida, en los lugares apropiados.
Tabla
Los datos también se pueden introducir en forma de tabla conveniente. GAMS le permite introducir los datos en su forma básica – las transformaciones se especifican algebraicamente.
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
Las constantes pueden ser simplemente declaradas como escalares:
Scalar f freight in dollars per case per thousand miles /90/ ;
Manipulación de Datos
Cuando los valores de los datos deben ser calculados, primero se declara el parámetro (es decir, darle un símbolo y, opcionalmente, indexarlo), a continuación, dar su formulación algebraica. GAMS hará automáticamente los cálculos.
Parameter c(i,j) transport cost in thousands of dollars per case ;c(i,j) = f * d(i,j) / 1000 ;
Variables
Las variables de decisión se expresan algebraicamente, con sus índices especificados. A partir de esta forma general, GAMS genera cada instancia de la variable en el dominio.Las variables se especifican en cuanto al tipo: LIBRE, POSITIVO, NEGATIVO, BINARIO o INTEGRO. La variable objetivo (z, aquí) se declara simplemente sin índice.
Variables x(i,j) shipment quantities in cases z total transportation costs in thousands of dollars ;Positive variables x ;
Ecuaciones
Las ecuaciones de las funciones objetivas y de las restricciones se declaran primero dándoles nombres. Luego se describen sus fórmulas algebraicas generales. GAMS tiene ahora suficiente información (de los datos introducidos anteriormente y de las relaciones algebraicas especificadas en las ecuaciones) para generar automáticamente cada declaración de restricción individual – como se puede ver en el informe de salida a continuación. Un amplio conjunto de herramientas le permite modelar cualquier expresión que pueda enunciarse algebraicamente: aritmética, indexación, funciones y registro de manejo de excepciones (por ejemplo, construcciones if-then-else y such-that).
=E= indica ‘igual a’
=L= indica ‘menor o igual a’
=G= indica ‘mayor o igual a’
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) ;
Declaración del modelo
El modelo recibe un nombre único (aquí, TRANSPORTE), y el modelador especifica qué ecuaciones deben incluirse en esta formulación particular. En este caso especificamos ALL que indica que todas las ecuaciones forman parte del modelo. Esto equivaldría a MODELO TRANSPORTE /COST, OFERTA, DEMANDA/ . Esta selección de ecuaciones permite formular diferentes modelos dentro de un mismo fichero de entrada de GAMS, basándose en los mismos o diferentes datos dados.
Model transport /all/ ;
Declaración solve
La declaración solve (1) indica a GAMS qué modelo debe resolver, (2) selecciona el solver a utilizar (en este caso un solver LP), (3) indica la dirección de la optimización, ya sea MINIMIZING o MAXIMIZING , y (4) especifica la variable objetivo.
Solve transport using LP minimizing z ;