10
INTRODUCCION A GAMS GAMS: GENERIC ALGEBRAIC MODELING SYSTEM Es un lenguaje de programación que sirve: La modelización de cierto problema de optimización Su resolución(mediante otros programas llamados SOLVERS) y el análisis de la solución Características: Las formas en que GAMS representa un problema es casi idéntica a la que se espera en el pizarrón Índices: arreglos matriciales Datos: matrices , vectores y parámetros Variables y función objetivo Naturaleza de las variables Cotas superiores e inferiores Restricciones +funciones objetivo Llamaremos al SOLVER y desplegaremos las soluciones (o parte de ella) Permite pasar de un modelo de pocas variables (<=200) a un modelo de talla mayor sin modificaciones substanciales del modelo. Separa el PROCESO DE MODELIZACIÓN de la RESOLUCION Una vez resuelto el modelo siguiendo las sintaxis se llama a un programa específico de resolución Ej: para la PL usaremos el paquete CPLEX GAMS permite resolver problemas estructurales Reglas para producir un archivo .gams GAMS no distingue entre mayúsculas o minúsculas Cada comando debe terminar en ; Los comandos pueden aparecer en “cualquier parte del programa” siempre y cuando las variables que utilizan se hayan definido posteriormente Los IDENTIFICADORES (nombres para variables , indices ) no pueden ser las palabras restringidas de GAMS Los identificadores pueden tener hasta 9 caracteres alfanuméricos y debe comenzar con una letra No usar tildes ñ / * En algunos comandos es indeferente usando en plural o singular Ej:Parameter o Parameters Set o Sets Es posible escribir varios comandos en un misma línea siempre y cuando esten separados por ;

Introduccion a gams

Embed Size (px)

Citation preview

Page 1: Introduccion a gams

INTRODUCCION A GAMS

GAMS: GENERIC ALGEBRAIC MODELING SYSTEM

Es un lenguaje de programación que sirve:

La modelización de cierto problema de optimización Su resolución(mediante otros programas llamados SOLVERS) y el análisis de la solución

Características:

Las formas en que GAMS representa un problema es casi idéntica a la que se espera en el pizarrón Índices: arreglos matriciales Datos: matrices , vectores y parámetros Variables y función objetivo

Naturaleza de las variables Cotas superiores e inferiores

Restricciones +funciones objetivo Llamaremos al SOLVER y desplegaremos las soluciones (o parte de ella)

Permite pasar de un modelo de pocas variables (<=200) a un modelo de talla mayor sin modificaciones substanciales del modelo.

Separa el PROCESO DE MODELIZACIÓN de la RESOLUCION Una vez resuelto el modelo siguiendo las sintaxis se llama a un programa específico de resoluciónEj: para la PL usaremos el paquete CPLEX

GAMS permite resolver problemas estructurales

Reglas para producir un archivo .gams

GAMS no distingue entre mayúsculas o minúsculas Cada comando debe terminar en ; Los comandos pueden aparecer en “cualquier parte del programa” siempre y cuando las variables que utilizan se

hayan definido posteriormente Los IDENTIFICADORES (nombres para variables , indices ) no pueden ser las palabras restringidas de GAMS Los identificadores pueden tener hasta 9 caracteres alfanuméricos y debe comenzar con una letra No usar tildes ñ / * En algunos comandos es indeferente usando en plural o singular

Ej:Parameter o ParametersSet o Sets

Es posible escribir varios comandos en un misma línea siempre y cuando esten separados por ; Cuando se quiere poner un comando o no incluir algunas líneas del programa las instrucciones debe comenzar

con **El peso en kg

Un comando es válido para declarar o definir varios elementos al mismo tiempo La mayoría de los comandos sirve para la DECLARACIÓN de sus elementos y/o para asignarles valores

COMANDOS OBJETIVO

INDICES: Set

Declarar conjuntos de índices de vectores o matrices

Page 2: Introduccion a gams

DATOS:Scala

Declara un parámetro (numero o cte del modelo) y/o les asigna un valor

Parameters Declara vectores de datos y/o les asigna un valor

Table Declara y asigna matrices

Variables Declara las variables del modelo, sin tipo y cotas superiores e inferiores o preasigna valores

RESTRICCIONES:Equations

Declara las restricciones y la función objetiva

Model Declara el modelo , le da un nombre y las restricciones que incluye

SOLUCION:Solve

Llama al SOLVER y resuelve el problema

Display Muestra toda o parte de la solución

*Poblema del restaurante 13-10-2014.version1variablesx1 cantidad de platos de tipo1 para elaborarse al dìax2 cantidad de platos de tipo2 para elaborarse al dìaz ingreso diario por ventas ; // termino el comando de declaración de variablespositive variables // variables positivasx1,x2;Equationsingreso funcion objetivo_ingresos diarios totales por ventas en u.m.restriccion1 limitacion diaria de langostinosrestriccion2 limitacion diaria de mejillonesrestriccion3 limitacion diaria de ostras ; ingreso.. z=e=8*x1+6*x2; // .. es quivalente a :restriccion1.. 5*x1+3*x2=l=30 // <= =l=restriccion2.. 2*x1+3*x2=l=24 ;restriccion3.. x1+3*x2=l=18 ;

model restaurante_v1 /all/;solve restaurante_v1 using LP maximizing z;

MODELO DEL RESTAURANTE PODRIA ESCRIBIRSE COMO

Max z=∑j=1

2

p ( j )∗x ( j)

Sor Ax≤b(x ≥0)≅∑j=1

2

a (i , j )a ( j )≤b (i)(i=1,2,3) matriz tecnica

x, y ∈R x ≤ y ≅ xi ≤ yi(i=1…m)

Page 3: Introduccion a gams

*Poblema del restaurante 13-10-2014.version2

setsi mariscos /langostinos,mejillones,ostras/j platos /platos1, platos2/;

tablea(i,j) contenido del marisco i en una unidad de plato platos1 platos2langostinos 5 3mejillones 2 3ostras 1 3

parametersp(j) precio unitario de cada plato1 en u.m. por plato/platos1 8platos2 6/b(i) disponibilidad diaria del i-esimo marisco/langostinos 30mejillones 24ostras 18/;

variablesx(j) cantidad de platos j al producirse al diaz ingreso total por ventas*z es u.mX ;

equationsingreso funcion objetivo_ingreso total por ventas diariasrestriccion(i) disponibilida diaria del i-esimo recurso ;ingreso.. z=e=sum(j,p(j)*x(j));restriccion(i).. sum(j,a(i,j)*x(j))=l=b(i);

model restaurante_v2/all/;solve restaurante_v2 using LP maximizing z;display x.l, z.l; // LEVEL NIVEL DE EJERCICIOS DE ACTIVIDAD 1 ETC

PROBLEMA DE REGRESION

set

i indice de la abscisa /1*6/;

parameters

Page 4: Introduccion a gams

x(i) abscisa de la i-esima medida

/1 0.5

2 1.2

3 1.9

4 2.5

5 3.0

6 3.2 /

q(i) medidas aproximadas de Q(x) en la abscisa x(i)

/1 3.5

2 6.2

3 4.8

4 5.5

5 1.2

6 3.3 /;

variables

a,b,c,d,er,z;

*por defecto en GAMS las variables son libres (sin restriccion sobre su signo)

equations

objetivo maximo de los errores en valor absoluto

restriccion1(i) restriccion del valor absoluto

restriccion2(i) otra restriccion del valor absoluto;

objetivo.. z=e=er;

restriccion1(i).. a+b*x(i)+c*sin(x(i))+d*cos(x(i))-er=l=q(i);

restriccion2(i).. a+b*x(i)+c*sin(x(i))+d*cos(x(i))+er=g=q(i);

model regresion /all/;

solve regresion using LP minimizing z;

display a.l,b.l,c.l,d.l,er.l,z.l;

Page 5: Introduccion a gams

PROBLEMA DE LA DIETA

sets

i ingredientes/nd,pd,ca,ph/

j alimentos/maiza,avena, maizb, salmado, linaza/

;

table

a(i,j) contenido de los ingrediente i en los alimentos j

maiza avena maizb salmado linaza

nd 78.6 70.1 80.1 67.2 77.0

pd 6.5 9.4 8.8 13.7 30.4

ca 0.02 0.09 0.03 0.14 0.41

ph 0.27 0.34 0.30 1.29 0.86

parameters

p(j) precio unitario del alimento j

/maiza 1

avena 0.5

maizb 2

salmado 1.2

linaza 3 /

r(i) requerimiento minimo del ingrediente i

/nd 74.2

pd 14.7

ca 0.14

ph 0.55 /;

variables

x(j) cantidad de alimento j a comprar

z costo total de adquisicion de alimentos en um

positive variables

x;

Page 6: Introduccion a gams

equations

costo funcion objetivo_costo total por compras

restriccion(i) requerimiento minimo del ingrediente i;

costo.. z=e=sum(j,x(j)*p(j));

restriccion(i).. sum(j,a(i,j)*x(j))=g=r(i)

model dieta /all/;

solve dieta using LP minimizing z;

display z.l, x.l;

PROBLEMAS DE TRANSPORTE

UN PRODUCTO DE ELABORA EN 3 FABRICAS fi,f2,f3 Y SE LOS DISTRIBUYE A 5 CUIDADES POR CAJAS C1.C2.C3.C4.C5

$title Modelo de transporte

sets

i indice para las fabricas /f1*f3/

j indices para las ciudades /c1*c5/;

table

d(i,j) matriz que da la distancia en km de la fabrica fi a cj

c1 c2 c3 c4 c5

f1 20 15.8 51.2 67 85

f2 19 10 45 5 16

f3 45 80 25.5 47 10

scalar

f flete de transporte en um por kilimetros y cajas /0.5/

parameters

a(i) oferta de la fabrica fi (en cajas)

/

Page 7: Introduccion a gams

f1 300

f2 400

f3 800

/

b(j) demanda de la ciudad cj (en cajas)

/

c1 200

c2 150

c3 400

c4 300

c5 300

/

c(i,j) matriz de costo unitario;

c(i,j)=f*d(i,j);

*c(i,j) esta en u.m. por caja

variables

x(i,j) cantidad de cajas que se envian desde la fi a la cj

z costo total de transporte

positive variables

x;

equations

costo_transporte costo total de transporte

oferta(i) oferta de las fabricas fi

demanda(j) demanda de las ciudades cj;

costo_transporte.. z=e=sum((i,j), c(i,j)*x(i,j));

oferta(i).. sum(j,x(i,j))=l=a(i);

demanda(j).. sum(i, x(i,j))=g=b(j);

Page 8: Introduccion a gams

model transporte/all/;

solve transporte using LP minimizing z;

display x.l, z.l;

PROBLEMAS DE ASIGNACION:

Supongamos que tenemos m trabajos T1*Tm que deben asignarse a cualquiera de las n maquinas M1*Mn. Se conoce

c(i,j) :rendimiento(eficiencia) de asignar el trabajo Ti a la maquina Mj.

PROBLEMA:

Como hacer una asignación de rendimiento máximo

VARIABLE DIVALENTE: Sirven para modelar si se hace o no una acción determinada.

Xij= 1 si se asigna el trabajo Ti a la maquina Mj

0 si no

EJERCICIO:

Se tienen 4 trabajos a asignarse a 4 maquinas . se conoce el costo de preparación c(i,j) que implica el Trabajo ti se haga en la maquina mj

PROBLEMA: realizar un programa de asignación máxima

$title Problema de asignacion

sets

i indice para los trabajos /t1*t4/

j indices para las maquinas /m1*m4/;

table

c(i,j) costo de preparacion para realizar el trabajo ti en la maquina mj

m1 m2 m3 m4

t1 14 2 7 2

t2 5 12 8 4

t3 8 6 3 6

t4 7 5 9 10

Page 9: Introduccion a gams

variables

x(i,j) variable si se asigna el trabajo ti en la maquina mj

z costo total de preparacion

positive variables

x;

equations

costo funcion costo total por preparacion

trabajo(i) numero de trabajos ti

maquina(j) numero de maquinas mj ;

costo.. z=e=sum((i,j), c(i,j)*x(i,j));

trabajo(i).. sum(j,x(i,j))=e=1;

maquina(j).. sum(i,x(i,j))=e=1;

model asignacion /all/;

solve asignacion using LP minimizing z;

display x.L, z.L;