You are on page 1of 6

TALLER Lenguaje de Programacin GAMS GENERALIDADES DEL LENGUAJE DE PROGRAMACIN GAMS GAMS es un lenguaje de programacin matemtica.

Los lenguajes de programacin son lenguajes que permiten la formulacin de problemas de optimizacin complejos. Son muy potentes por su capacidad de resolucin y la indexacin de las variables y ecuaciones. Entre los lenguajes de modelado ms conocidos se pueden mencionar: GAMS (www.gams.com) y AMPL (www.ampl.com) de origen estadounidense y AIMMS (www.aimms.com) y XPRESS-MP (www.dash.co.uk) de origen europeo, por citar algunos. GAMS es el lenguaje ms ampliamente difundido comercialmente con su propia lista de discusin de usuarios (gams-l@listserv.gmd.de) mientras que AMPL se est potenciando mucho en las universidades estadounidenses. Existe un proyecto denominado NEOS (www.neos.mcs.anl.gov) para el clculo distribuido que permite el envo de problemas de optimizacin escritos en AMPL o GAMS a travs de internet y stos son resueltos en servidores de la red devolviendo los resultados de la optimizacin. GAMS es un lenguaje de modelizacin, ms que un programa para resolver problemas de optimizacin. La ventaja que presenta este programa GAMS, es que junto al mdulo de modelizacin (base) incorpora diferentes solver (algoritmos de resolucin de problemas) tanto de programacin no lineal, como lineal y entera. INFORMACION BASICA Para resolver un problema de optimizacin mediante GAMS es necesario preparar un proyecto. Para ello elige file Project New Project. A este proyecto se vincularn todos los archivos que tengan que ver con el proyecto: archivo de modelos, archivos de datos, archivos de opciones, etc que se debern almacenar todos en la misma carpeta. Los modelos se editan en un input file en donde se definen todos los elementos bsicos: VARIABLES, EQUATIONS, MODEL, SOLVE, etc. En este archivo pueden ir todos los datos y opciones, o estos pueden estar en otros archivos a los que se vincula con el cdigo: $include Nombredelarchivo Para construir el archivo, se abre GAMSIDE y en la pgina en blanco que ofrece, se escribe, no el problema de forma explicita sino la siguiente informacin porque luego, cuando se compila, GAMS formula el problema en forma explicita (estndar). En la pgina en blanco es necesario declarar: 1. 2. 3. 4. 5. 6. 7. 8. Los sets (subndices: i, j, etc.) scalars, parmetros del problema Parameters , datos en matrices de una dimensin table, datos en matrices de varias dimensiones Las variables que aparecen en el problema tipo de las variables (no negativas, enteras, binarias, etc.). El nombre de las ecuaciones: funcin objetivo y restricciones (equations) la expresin matemtica de estas ecuaciones (incluye a la funcin objetivo y a las restricciones) 1

9. El nombre del modelo general y las ecuaciones que forman el modelo (all si son todas). 10. La declaracin de resolucin, el solver (NLP, LP, MIP, ...que significan no lineal, lineal programacin mixta, respectivamente) y si se quiere maximizar o minimizar la variable correspondiente a la funcin objetivo 11. Declaracin de cmo se desea que muestre los resultados. En las ecuaciones los signos relacionales usados son: =e= (igual), =l= (menor o igual que), =g= (mayor o igual que), =lt= (menor que). Los tipos de variables posibles son: Free, positive, negative, binary e integer. Para expresar el tipo de variable debe colocarse, en la seccin de tipo de variables, por ejemplo: Positive variable X; o Binary Variable Y. Los operadores ms usados son: + (suma), - (resta), * (multiplicacin), / (divisin) y **(Exponenciacin). sum (i,funcin) o sum((i,j), funcin), prod() Complementos del lenguaje: 1. Cuando se desea introducir en una funcin todos los valores de un subndice, en la funcin correspondiente se introduce el nombre del subndice, por ejemplo x(i) 2. Cuando se desea introducir un subndice especfico se pone entre comillas, por ejemplo x(3). 3. Cuando se desea establecer una condicin se hace mediante el signo $. Por ejemplo, si se desea hacer una sumatoria de las variables de decisin Xij pero solo con los trminos en los que i menor que j se expresa de la siguiente manera: sum((i,j)$(ord(i) lt ord(j)), x(j,j)) 4. Cuando se desea hacer un comentario, o volver inactivo provisionalmente una lnea de cdigo se pone al inicio de la lnea el signo * 5. Si se desea hacer un loop de operaciones (incluyendo optimizaciones en varias iteraciones) se usa la funcin Loop ( ); 6. si se desea usar el valor arrojado para una variable de decisin x(i) como parmetro de otra operacin se usa la expresin x.l(i) (l de level) Problema 1: Problema del transporte: Minimizar el costo de llevar una mercanca desde 2 plantas a 3 mercados. Indices: i=plantas, J=mercados Datos: Oi= oferta de la planta i 2

Dj =demanda del mercado j dij = distancia entre planta i y mercado j Distancias (miles de millas) Mercados Plantas New York Chica Tope Ofert go ka a 1.7 1.8 300 1.8 1.4 275 350 600

Seattle 2.5 San 2.5 Diego Deman 325 da

El costo por articulo por mil millas es F=$90. Abra archivo problema de tte.gms. Al correr GAMS (File, Run o usando el icono con una flecha roja), y si no se encuentra algn error se genera automticamente el problema formulado se compila y se resuelve (en el caso de que encuentre algn error el aclara en letra roja la causa. Haciendo clic en el texto rojo lo redirecciona al lugar donde hay un error. Cuide que no falte ; o espacios, o que escriba correctamente los nombres de las variables y las ecuaciones. No llame con el mismo nombre a variables y a ecuaciones). Cierre la informacin de compilacin (Close) y mire el archivo problema de tte.gms.lst. Tanto el problema formulado como su solucin se guardan en este archivo y en l se indica (entre muchas ms cosas pero solo concntrese en lo siguiente): a) inicialmente el mismo cdigo que usted introdujo en problema de tte.gms b) luego la formulacin del problema de forma estndar (Max Z(x), sujeto a : g(x)). c) SOLVE SUMMARY: aqu aparece la solucin ptima del problema. En OBJECTIVE VALUE indica el valor obtenido para la funcin objetivo, luego aparecen los valores que toman todas las restricciones, y luego los valores que toman las variables de decisin. Para cada valor muestra cuatro columnas: LOWER, LEVEL, UPPER, MARGINAL. Cuando el valor de la variable se ha condicionado a un mnimo o a un mximo, aparece ese valor en la columna LOWER y UPPER respectivamente, de lo contrario aparece un punto (.). LEVEL es el valor que toma la restriccin o la variable de decisin en la solucin ptima. MARGINAL se refiere los coeficientes de lagrange de las restricciones o a los costos marginales para las variables de decisin. Respecto a los costos marginales de las variables de decisin: Si el problema es para maximizar, salen negativos. En GAMS se interpreta de la siguiente manera. Si los costos marginales son cero es porque la variable sali bsica (>0) en la solucin ptima. Si los costos marginales son diferentes de cero es porque la variable sali No bsica (=0) en la solucin ptima (es decir, no justifica hacer de ella porque seguramente sus beneficios unitarios son bajos), as el valor absoluto es la cantidad que tendra que aumentar el Ci (coeficiente de la Funcin objetivo) para que la variable Xi se vuelva bsica. Si el problema es para minimizar, salen positivos. En GAMS se interpreta de la siguiente manera. Si los costos marginales son 3

cero es porque la variable sali bsica (>0) en la solucin ptima. Si los costos marginales son diferentes de cero es porque la variable sali No bsica (=0) en la solucin ptima (es decir, no justifica hacer de ella porque seguramente sus costos unitarios son muy altos), as, el valor absoluto es la cantidad que tendra que disminuir el Ci (coeficiente de la Funcin objetivo) para que la variable Xi se vuelva bsica. Respecto a los precios sombra de las restricciones. Se pueden interpretar as: Si el problema es para maximizar y la restriccin es tipo <=, ellos son positivos, lo que se puede interpretar como que si los recursos disponibles aumentan, la Z aumenta. Si la restriccin es tipo >= ellos son negativos, lo que se puede interpretar como que si la b aumenta, toca incurrir en mas costos y los beneficios disminuyen. Si el problema es para minimizar y la restriccin es tipo <=, ellos son negativos, lo que se puede interpretar como que si los recursos disponibles aumentan, los costos disminuyen porque puede haber mejor uso y eficiencia en la produccin. Si la restriccin es tipo >= ellos son positivos, lo que se puede interpretar como que si la b aumenta, toca incurrir en mas costos por lo que Z aumenta.

Para Mostrar Resultados amigables al usuario Uno puede hacer que se genere un archivo donde se escriban en la forma que el modelador desee los resultados. Para ello, debe indicar el nombre del archivo y luego mediante la palabra put, escribe lo que desea y como lo desee en l. Algunas Ayudas para esto son : Escribir una palabra con un tab de 20. Put @20, palabra; Pasar dos lineas sin texto Put //; Mostrar los valores de una variable x(i,j) Put x.l(i,j); Mostrar los valores de los precios sombra (o variables duales) Put nombre_de_equation.m; 2. EJERCICIO A REALIZAR Formular y resolver mediante GAMS el siguiente problema : planificacin de la produccin de una fbrica de papel:

Se dispone de 3 mquinas para producir 4 tipos de papel. Se trata de determinar cules son las cantidades ptimas a producir de cada tipo de papel en cada mquina para maximizar el beneficio. La demanda de cada tipo de papel se considera fija y conocida y existen limitaciones en el tiempo de produccin disponible en cada mquina. Tasa de produccin de cada tipo de papel en cada mquina (ton/h) Papel Mquina 1 Mquina 2 Mquina 3 Prensa 53 52 49 Folio 51 49 44 imprenta 52 45 47 reciclado 42 44 40 Llamaremos a este parmetro TASAPROD(p,m) Los costos de produccin se dan en la siguiente tabla Costo de producir 1 tonelada de papel en cada mquina ($/ton) Papel Mquina 1 Mquina 2 Mquina 3 Prensa 76 75 73 Folio 82 80 78 imprenta 96 95 92 reciclado 72 71 70 A este parmetro lo llamaremos COSTEPROD (p,m) Los precios de venta PDV(p) son: Precios de venta ($/ton) Papel Precio de venta Prensa 30000 Folio 20000 imprenta 12000 reciclado 8000 Y las demandas (deben cumplirse como minimo) DATDEM (p) son Papel Demanda (ton) Prensa 77 Folio 81 imprenta 99 reciclado 105

Los tiempos disponibles TIEMPOMAQ de cada mquina son (h) Mquina Demanda Mquina 1 672 Mquina 2 600 Mquina 3 480 EL problema correspondera a: Xpm= cantidad de papel tipo p producido en la maquina m (ton) Max

( PDV
p m

( p ) COSTEPROD

( p, m)) x pm

Sujeto a:

TASAPROD
p

x pm

( p, m)

TIEMPOMAQ (m) , para todo m

x
m

pm

= DATDEM ( p ) , para todo p

toda xpm es una variable positiva.