Upload
katherine-morales
View
208
Download
3
Embed Size (px)
Citation preview
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
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)
*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
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;
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;
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)
/
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);
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
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;