44
(General Algebraic Modeling System) Verano Científico 2012 PISIS L.M. Nancy Maribel Arratia Martínez L.I.A. Cristina Maya Padrón

Como entender Gams

  • Upload
    yli-sc

  • View
    91

  • Download
    4

Embed Size (px)

DESCRIPTION

Manual para aprender a programar en gams.

Citation preview

Page 1: Como entender Gams

(General Algebraic Modeling System)

Verano Científico 2012 PISIS

L.M. Nancy Maribel Arratia Martínez

L.I.A. Cristina Maya Padrón

Page 2: Como entender Gams

VERANO CIENTÍFICO 2012 PISIS

L.M. NANCY MARIBEL ARRATIA MARTÍNEZ L.I.A. CRISTINA MAYA PADRÓN

INTRODUCCIÓN A GAMS

Page 3: Como entender Gams

La herramienta GAMS

Es un lenguaje, soportado por un paquete informático, que permite especificar un problema de programación matemática independientemente del método de resolución asociado al mismo. Los problemas a tratar han de ser de naturaleza algebraica no pudiendo especificarse problemas de optimización con ecuaciones diferenciales de forma directa.

GAMS está diseñado específicamente para el modelado de problemas de optimización lineales, no lineales, enteros y mixtos. El sistema es especialmente útil con problemas grandes y complejos.

Page 4: Como entender Gams

La herramienta GAMS

GAMS se utiliza en una gran variedad de áreas como los son: ingeniería agrícola, ingeniería química, econometría, finanzas, economía ambiental, energía, logística, matemáticas, física, comercio internacional, micro/macro economía, investigación de operaciones, etc.

Page 5: Como entender Gams

Windows

En Windows, Gams tiene un IDE (ambiente integrado de desarrollo) que permite, entre muchas cosas más, editar (escribir) el archivo y ejecutar Gams. Este archivo donde se escribe el problema tiene extensión .gms.

El archivo .gms es de tipo ASCII y puede ser escrito con cualquier editor para este tipo de archivos (Emacs, Bloc de notas, ...). El editor del ambiente Gams tiene una gran ventaja, resalta con diferente color las palabras específicas de Gams.

Page 6: Como entender Gams

Windows

Gams utiliza el archivo .gms y si está bien escrito resuelve el problema. Creando un archivo .lst donde está la información sobre la solución.

Si en el archivo .gms hay errores, entonces en el archivo .lst aparece una transcripción , con numeración de los renglones, e inmediatamente después de una línea errónea, aparece algo semejante a :

**** $409

El valor 409 (u otro valor) es un código de error. Un poco más adelante, en el archivo .lst, aparece el significado de cada uno de los códigos de los errores ocurridos.

Page 7: Como entender Gams

Linux

En Linux, Gams no viene con ambiente integrado. El archivo .gms se puede escribir con cualquier editor de texto (Emacs, vi, Kate, ... ). Para invocar Gams, desde una ventana se da la orden

gams archivo.gms

También se puede dar la orden sin explicitar la extensión gams archivo

De nuevo, se crea un archivo .lst donde está el resultado, bien sea la solución, o bien información sobre los errores de la misma manera que en Windows (ver sección anterior).

Page 8: Como entender Gams

EJEMPLO 1: PRODUCCIÓN DE 2 ARTÍCULOS.

Page 9: Como entender Gams

Toys enterprises produce dos tipos de juguetes: camiones y muñecas.

Los camiones aportan $3 a la ganancia y las muñecas $2.

De material se dispone de 100 unidades de madera, de las cuales cada camión requiere 2 unidades y cada muñeca 1. De metal se cuenta con 80 piezas de las cuales se requiere una pieza por juguete. Un análisis de mercado determino que el numero de camiones no puede exceder las 40 unidades.

¿Cuántos camiones y muñecas deberá producir para tener mayor ganancia?

Modelo matemático

Función objetivo: Max Z=3X1 + 2X2

Restricciones: 2X1 + X2 <=100

X1 + X2 <=80

X1 <=40

X1 , X2 >=0

Problema

X1 : # de camiones

X2 : # de muñecas

Page 10: Como entender Gams

Formulación en GAMS • $TITLE Problema_Produccion_Juguetes

• VARIABLES

• Z ganancia total;

• POSITIVE VARIABLES

• X1 # de camiones

• X2 # de muñecas;

• EQUATIONS

• OBJ funcion objetivo

• R1 referente a la capacidad de Madera

• R2 referente a la capacidad de Metal

• R3 el # de camiones no exceda 40 unidades;

• OBJ .. Z=E=3*X1+2*X2;

• R1 .. 2*X1+1*X2=L=100;

• R2 .. 1*X1+1*X2=L=80;

• R3 .. X1=L=40;

• MODEL Problema_Produccion_Juguetes /ALL/;

• SOLVE Problema_Produccion_Juguetes USING MIP MAXIMIZING Z;

• DISPLAY Z.L, X1.L, X2.L

Page 11: Como entender Gams

• En GAMS, la terminología adoptada es la siguiente:

– los índices son llamados conjuntos,

– los datos dados se llaman parámetros,

– variables de decisión se llaman variables,

– y las restricciones y la función objetivo se llaman ecuaciones.

Page 12: Como entender Gams

Estructura de un Modelo de GAMS

Page 13: Como entender Gams

Componentes básicos de un modelo GAMS

Page 14: Como entender Gams

Estructura de un Modelo de GAMS

• 1.1 Sets: Los conjuntos son los bloques de construcción básicos de un modelo GAMS, que corresponde exactamente a los índices en las representaciones algebraica de los modelos.

1. INPUTS

Page 15: Como entender Gams

Estructura de un Modelo de GAMS

• 1.2 Datos: Hay tres

formatos fundamentales que son: 1.Listas

2.Tablas

3. Las asignaciones directas

1. INPUTS

Page 16: Como entender Gams

Estructura de un Modelo de GAMS

1.2.1 Un escalar es considerado como un parámetro que no

tiene dominio. Se puede declarar y asignar con una declaración de escalar que contiene una lista degenerada de un solo valor.

Page 17: Como entender Gams

Estructura de un Modelo de GAMS

• 1.3 Variables: Las variables de decisión (o variables

endógenas) de un modelo GAMS-expresado se debe declarar con una declaración de variables. Cada variable se le asigna un nombre, un dominio en su caso, y el texto (opcional).

Tipos de variables permitidas

Page 18: Como entender Gams

• 1.4 Equations:

– Declaración de ecuaciones:

Las ecuaciones deben ser declaradas y definidas en declaraciones separadas.

Primero se pone la palabra clave “Equations” seguida por el nombre, dominio y texto de uno o mas grupos de ecuaciones o desigualdades han sido declaradas.

Estructura de un Modelo de GAMS

Page 19: Como entender Gams

• 1.4 Equations: – Notación de Sumatorias (y Productos) en GAMS:

Se puede utilizar para expresiones simples y complejas. El formato se basa en la idea de pensar siempre en una suma como operador con dos argumentos: Suma (índice de la suma, sumando). Una coma separa los dos argumentos y si el 1° argumento requiere una coma debe estar entre parentesis. El segundo argumento puede ser cualquier expresión matemática incluida otra suma.

Estructura de un Modelo de GAMS

Page 20: Como entender Gams

– Definición de Ecuación:

Los componentes de una definición de la ecuación son: 1. El nombre de la ecuación que se está definiendo 2. El dominio 3. Condición de restricción de dominio (opcional) 4. El símbolo '..' 5. La expresión Left-hand-side. 6. Operador relacional:

= l = menor que o igual a = g = mayor que o igual a = e = igual a 7. La expresión Right-hand-side.

Estructura de un Modelo de GAMS

Page 21: Como entender Gams

- Objective Function: Esto es sólo un recordatorio de que GAMS no tiene entidad explícita que llama a la función objetivo. Para especificar la función a ser optimizada, debe crear una variable, que es libre (sin restricciones de signo) y el valor escalar (no de dominio) y que aparece en una ecuación de definición que equivale a la función objetivo.

Estructura de un Modelo de GAMS

Page 22: Como entender Gams

• 1.5 Model : La palabra model tiene un significado muy preciso en GAMS. Se trata simplemente de un conjunto de ecuaciones. Al igual que otras entidades GAMS, se le debe dar un nombre en una declaración. El formato de la declaración es la palabra clave “model” seguido por el nombre del modelo, seguido por una lista de nombres de ecuación encerradas en barras. Si todas las ecuaciones previamente definidas se deben incluir, puede introducir / all/ en lugar de la lista explícita.

Estructura de un Modelo de GAMS

Page 23: Como entender Gams

• 1.7 Solve : El formato de la instrucción Solve es el siguiente:

1. La palabra clave “solve”. 2. El nombre del modelo que hay que resolver 3. La palabra clave “using” 4. Un procedimiento de solución disponible.

5. La palabra clave 'minimizar' o 'maximizar' 6. El nombre de la variable que se optimiza

Estructura de un Modelo de GAMS

Page 24: Como entender Gams

Tipos de procedimientos de solución: •lp :para programación lineal •qcp : programación con restricciones cuadrática •nlp : para programación no lineal •dnlp : para programación no lineal con derivadas discontinuas •mip : para programación entera mixta •rmip :para programación relajada entera mixta •miqcp : para programación entera mixta restricción cuadrática •minlp : para programación no lineal entera mixta •rmiqcp :para programación entera mixta relajada restricción cuadrática •rminlp : programación no lineal entera mixta relajada •mcp: para los problemas de complementariedad mixta •mpec : para los programas matemáticos con restricciones de equilibrio •cns : para limitaciones de los sistemas no lineales

Estructura de un Modelo de GAMS

Page 25: Como entender Gams

• 1.8 Display Statements: La declaración “solve”

causará que varias cosas sucedan cuando se ejecuta. Se generará la instancia específica de interés del modelo, se crearán las estructuras de datos adecuadas para la entrada de este problema, será invocado el editor de resolución, y la salida del solucionador se imprimirá en un archivo.

Para obtener los valores óptimos de las variables primarias y / o dobles, podemos mirar la salida de solución, o, si lo deseamos, podemos solicitar una presentación de estos resultados de GAMS.

Estructura de un Modelo de GAMS

Page 26: Como entender Gams

GAMS se ha diseñado con un sistema de base de datos pequeño en el que se llevan registros de las variables y ecuaciones. Los campos más importantes de cada registro son los siguientes: . lo : el límite inferior . l : el nivel o valor primal .up : límite superior . m : marginal o valor dual

Estructura de un Modelo de GAMS

Page 27: Como entender Gams

GA

MSid

e Ejem

plo

de

Inp

uts

Nota: La descripción de este ejemplo se encuentra anexada al final de la presentación.

Page 28: Como entender Gams

ejemplo4_mochila.gms

• El problema de la mochila (knapsack problem).

El problema de la mochila consiste en elegir un conjunto de objetos que proporcionen el beneficio máximo, sin sobrepasar la capacidad de la mochila. Considérese el siguiente modelo, donde los coeficientes en la función objetivo representan los beneficios de cada objeto y los coeficientes de la restricción sus respectivos pesos.

.10,....1}1,0{

10018143331302914162733

83576101291011

10987654321

10987654321

iparax

xxxxxxxxxxasujeto

xxxxxxxxxxMaximizar

i

Page 29: Como entender Gams

OPTION Optcr = 0.0001

SET

i/1*10/;

BINARY VARIABLES

X(i);

VARIABLE

Z;

PARAMETERS

P(i) son los pesos de cada objeto i.

/1 33

2 27

3 16

4 14

5 29

6 30

7 31

8 33

9 14

10 18/

B(i) valor de beneficio de cada objeto.

/1 11

2 10

3 9

4 12

5 10

6 6

7 7

8 5

9 3

10 8/;

EQUATIONS

OBJ

R1;

OBJ .. Z=E=sum((i),X(i)*B(i));

R1 .. sum((i),X(i)*P(i))=L=100;

MODEL Ejemplo/all/;

SOLVE Ejemplo using mip maximizing Z;

DISPLAY X.l,Z.l;

OPTION Optcr = 0.0001;

BINARY VARIABLES

X1,X2,X3,X4,X5,X6,X7,X8,X9,X10;

VARIABLE

Z;

EQUATIONS

OBJ

R1;

OBJ ..

Z=E=X1*11+X2*10+X3*9+X4*12+X5*10+X6*6+X7

*7+X8*5+X9*3+X10*8;

R1 ..

X1*33+X2*27+X3*16+14*X4+X5*29+X6*30+X7*31

+X8*33+X9*14+X10*18=L=100;

MODEL Ejemplo/all/;

SOLVE Ejemplo using mip maximizing Z;

DISPLAY Z.l;

Formulación estructurada

Formulación no-estructurada

Page 30: Como entender Gams

Compilación en GAMS

Una vez que se corre un programa, GAMS crea un archivo con el mismo nombre del programa, pero con la extension .lst .

El archivo *.lst esta compuesto las siguientes partes:

Echo print

Mensajes de Error

Mapas de Referencia

Listado de Ecuaciones

Estadísticas del Modelo

Reporte de Estatus

Reporte de Solución

Page 31: Como entender Gams

Compilación en GAMS El echo print, es solo una versión copiada del modelo que estamos

resolviendo. Gams numera los renglones, lo cual es útil para cuando indica errores.

Los mensajes de error, aparecen al final del programa del echo, una lista con los errores con su código, indicando que error es y en que renglón se encuentra.

Los mapas de referencia indican las variables, su nombre, tipo y referencia de donde se utilizaron.

El listado de ecuaciones presenta en orden las ecuaciones utilizadas en el modelo con sus variables en especifico. Esta es la mejor herramienta útil cuando no se están obteniendo resultados esperados.

Page 32: Como entender Gams

Las estadísticas del modelo se refieren a su tamaño, numero de variables, numero de ecuaciones, etc.

Una vez que el modelo haya corriendo satisfactoriamente , se generan dos reportes. El reporte de estatus indica bajo que condiciones se detuvo la corrida. Es decir, si encontró solución, si es única, si no es factible, si llega al limite de memoria o de iteraciones, etc.

El reporte de solución es seguramente lo de mas interés para el usuario puesto que es donde se presentan los resultados de la corrida. Se presentan los resultados primero por ecuación, segundo por variable y por ultimo por petición del usuario.

Compilación en GAMS

Page 33: Como entender Gams

Ejemplo de Outputs

Page 34: Como entender Gams

Observaciones generales:

Un modelo GAMS es una colección de declaraciones en el lenguaje GAMS. La única regla que rige la ordenación de las declaraciones es que una entidad del modelo no se puede hacer referencia antes de que se declara que existe.

Se debe terminar cada sentencia con un punto y coma.

El compilador de GAMS no distingue entre mayúsculas y minúsculas.

Page 35: Como entender Gams

Limites de modelo:

Number of constraints and variables: 300

Number of nonzero elements: 2000 (of which 1000 nonlinear)

Number of discrete variables: 50

Global solver limits:

Number of constraints and variables: 10

Page 36: Como entender Gams

EJEMPLO PROBLEMA DE TRANSPORTE

Page 37: Como entender Gams

Problema de transporte

Consideremos un problema clásico de transporte con 3 fábricas y 4 destinos. En la siguiente tabla están los costos unitarios de transporte (en miles de pesos), las capacidades máximas de producción de cada fábrica y los pedidos o demandas de cada destino.

• Usualmente el planteamiento de este problema se hace con las variables xij , i = 1, ..., 3, j =1, ..., 4 que indican en número de unidades que van de la fábrica i al destino j. Denotemos por cij los costos unitarios de transporte, dj las demandas en los destinos y pi las capacidades máximas de producción en las fábricas.

Page 38: Como entender Gams

Minimizar Z= 23X11 +29X12 +19X13 + 31X14 +12X21 + 16X22 + 20X23 + 10X24 + 11X31 + 13X32 + 17X33 + 19X34 SUJETO A: (1) X11 + X12 + X13 + X14 <=200 (2) X21 + X22 + X23 + X24 <=180 (3) X31 + X32 + X24 + X34 <=100 (4) X11 + X21 + X31 = 105 (5) X12 + X22 + X32 = 180 (6) X13 + X23 + X33 = 99 (7) X14 + X24 + X34 = 135

(8) X11,X12,X13,X14,X21,X22,X23,X24,X31,X32

,X33,X34 >=0

El modelo matemático es:

Xij = Cantidad de producto para enviar de la planta i al cliente j.

Page 39: Como entender Gams
Page 40: Como entender Gams
Page 41: Como entender Gams

Referencias de consulta:

PAGINA OFICIAL DE GAMS http://www.gams.com/ PARA DESCARGA DE SOFTWARE http://www.gams.com/download/ TUTORIAL DE GAMS por Richard E. Rosenthal http://www.gams.com/dd/docs/gams/Tutorial.pdf

Dudas o comentarios: Lic. Nancy Maribel Arratia Martínez [email protected] Lic. Cristina Maya Padrón [email protected]

Page 42: Como entender Gams

Bibliografía

1. Héctor Manuel Mora Escobar, “GAMS, ejemplos introductorios”, Marzo de 2009.

2. Jose Ignacio Marín Alberdi, Introducción al lenguaje Gams, 2000.

3. Richard E. Rosenthal, GAMS - A User's Guide, January 2012.

Page 43: Como entender Gams

PROBLEMA DE ENVIO DE MERCANCIA DE LA PLANTA AL MERCADO

Page 44: Como entender Gams