Professional Documents
Culture Documents
GAMS (General Algebraic Modeling System) es un entorno para denir, analizar y resolver problemas de optimizacin. o Los elementos ms importantes de GAMS son: a 1. Su capacidad para resolver problemas pequeos (docenas n de variables y restricciones) y grandes problemas (miles de variables y restricciones) escribiendo bsicamente el a mismo programa. Dispone de una forma compacta y eciente para escribir bloques de ecuaciones similares sin ms que escribir una de ellas. a 2. Se separa la denicin del modelo de la tcnica de reo e solucin. El usuario de GAMS formula el modelo cono sistentemente, y una vez expresado en notacin GAMS, o uno de los programas disponibles se encarga de generar la solucin. Como resultado, el usuario se centra en el o modelado, sin ser perturbado por los problemas tcnicos e de los algoritmos de resolucin. Esto hace posible un o proceso de modelado muy sencillo y agradable. 3. GAMS prcticamente reproduce la descripcin del proa o blema de programacin matemtica. Como resultado, el o a cdigo GAMS is casi auto-explicativo para los lectores o que tengan una m nima formacin en optimizacin. o o 4. GAMS suministra tambin mecanismos que permiten ree solver colecciones de problemas de optimizacin estruco turados, tales como los de tcnicas de descomposicin. e o
273
Distancias en Km. mercados plantas m1 m2 m3 p1 2.0 1.6 1.8 p2 2.5 1.2 1.4 El problema consiste en Minimizar
j i j
cij xij
i: Nmero de plantas (2). u j: Nmero de mercados (3). u a o ai: La mxima capacidad de produccin de la planta i en toneladas (300 y 500 toneladas), bj : La demanda del mercado j en toneladas (100, 200 y 300 toneladas), y cij : el coste de transporte de la planta i al mercado j (0.09 dlares por tonelada y km). o Las variables de decisin son: o xij : la cantidad de producto a enviar de la planta i al mercado j, en toneladas.
274
275
Comando Set(s)
Propsito o Dar nombre a los ndices y denir sus posibles valores Scalar(s) Dar nombre a los escalares y asignarles valores Parameter(s) Dar nombre a los vectores y asignarles valores Table(s) Dar nombre a las matrices y asignarles valores Variable(s) Declarar variables, asignarles un tipo (opcional) y darles cotas inferior y superior Equation(s) Denir la funcin a optimizar o y las restricciones Model Dar nombre a los modelos y asignarles la lista de restricciones Solve Indicar a GAMS el programa que debe resolverlo Display Decir a GAMS los elementos a listar en el informe de salida
276
Reglas de GAMS
1. GAMS no diferencia entre letras maysculas y u minsculas. u 2. Todo comando debe terminar en punto y coma. 3. Los comandos pueden denirse en cualquier orden, con la unica restriccin de que un elemento debe haber sido o denido antes de usarlo. 4. GAMS tiene palabras reservadas, que no pueden usarse para otro n que el suyo propio. 5. Algunos comandos se identican por sus primeras letras, por lo que puede aadirse una s para facilitar la lectura. n 6. Los comandos pueden escribirse en estilo libre (una o varias l neas, uno o varios espacios, etc.) 7. Para denir un bloque de elementos basta usar el comando una vez. 8. Una l nea precedida por un asterisco (en la primera columna) es interpretada como un comentario. 9. La mayor de los comandos (sets, scalar, parameter, a table, variables, equations y model) se utilizan para declarar elementos y/o darles valores, lo que los convierte en vlidos para GAMS. a 10. Los nombres deben comenzar por una letra y seguir con letras o d gitos, hasta un mximo de 9. a
277
SETS y SCALARS
La palabra reservada Set o Sets identica el comando SET, que se usa en GAMS para declarar ndices, y especicar el conjunto de valores que toman. Por ejemplo Sets i production plants / p1, p2 / j markets / m1*m3 /; que dene los dos ndices i y j. El texto tras el nmero de los u ndices es ignorado por el compilador de GAMS. La asignacin de valores se hace entre dos s o mbolos /. El s mbolo ayuda a denir, en forma compacta, conjuntos numricos, e es decir, /m1m3/ es equivalente a /m1, m2, m3/. Sin embargo, GAMS trata los valores de los ndices como cadenas de caracteres. El comando concluye con el punto y coma. Los conjuntos anteriores tienen carcter esttico, es decir, no cambian a a durante la ejecucin del programa. En GAMS se pueden denir tambin o e conjuntos dinmicos, que son subconjuntos de los conjuntos estticos, pero a a que pueden cambiar durante la ejecucin del programa. o Un comando ligado a la denicin de conjuntos es el comando alias. Este o comando permite dar variaos nombres equivalentes, al mismo conjunto: Alias(i,k); da un segundo nombre k, al conjunto i. Estos se usan en sumas, productos, etc., cuando hay dos o ms a ndices implicados y necesitan variar independientemente. Los escalares GAMS son escalares de datos. La palabra reservada Scalar o Scalars identica el comando: Scalar f freight (dollars per ton y km) /0.09/;
PARAMETERS y TABLES I
Los comandos PARAMETER y TABLE se usan en GAMS para denir vectores y matrices de datos. Ambos son equivalentes, excepto que para denir vectores es necesario usar el comando PARAMETER. La palabra reservada Parameter, o Parameters, identica el comando parameter the PARAMETER., que sirve para declarar vectores y matrices. Los vectores de datos se declaran con ayuda de un ndice, como en. Parameters a(i) capacity of plant i in tons / p1 300 p2 500 /; que dene el parmetro a(i) en funcin del conjunto ( a o ndice) i. Para cada valor del ndice (elemento del conjunto) (p1, p2) se da un valor del parmetro (300, 500) entre dos s a mbolos /. El comando termina con punto y coma. Para asignar valores a vectores deben tenerse en cuenta las reglas siguientes: 1. La lista opcional de posibles ndices y sus correspondientes valores deben ir entre s mbolos /.../ y separados por comas o pasos de l nea. 2. Las parejas ndice-valor pueden ir en cualquier orden. 3. El valor por defecto de cualquier parmetro es cero, por lo que slo a o aquellos que tomen valores diferentes, deben darse. 4. GAMS comprueba que los ndices son vlidos. a Se pueden denir valores de los parmetros mediante funciones: a Parameter c(i,j) transportation cost in dollars per ton; c(i,j) = f * d(i,j);
279
PARAMETERS y TABLES II
La denicin anterior es la forma compacta de la que sigue: o Parameter c(i,j) transportation cost in dollars per ton / p1.m1 0.180 p2.m1 0.225 p1.m2 0.144 p2.m2 0.108 p1.m3 0.162 p2.m3 0.126 /; Las matrices de datos se denen en GAMS mediante tablas. La palabra reservada Table o Tables identica este comando. Las tablas se denen usando dos o ms a ndices. Se pueden introducir comentarios tras el nombre de la tablas, como en: Table d(i,j) p1 p2 distance in km m1 m2 2.0 1.6 2.5 1.2 m3 1.8 1.4;
que dene la matriz d(i,j) mediante los ndices indices i y j. Para cada pareja cruzada de ndices (p1.m1, p1.m2, p1.m3, p2.m1, p2.m2, p2.m3) se especica un valor (2.0, 1.6, 1.8, 2.5, 1.2, 1.4). Para mostrar la equivalencia entre los comandos PARAMETER y TABLE se dene la matriz c(i,j) usando ambos Table c(i,j) transportation cost in dollars per ton m1 m2 m3 p1 0.180 0.144 0.162 p2 0.225 0.108 0.126; Ntese que sta no es la forma ms compacta de denir c(i,j). o e a
280
Expresiones matematicas
Para asignar valores utilizando expresiones matemticas hay a que tener en cuenta las reglas siguientes: 1. El uso de ndices en la asignacin indica que la asignacin o o se hace para todos sus posibles valores y combinaciones de ellos. 2. Se puede hacer una asignacin espec o ca dando los valores de los ndices entre comillas: c(p1,m1)=0.180; 3. Se pueden asignar ms de una vez valores a los escalares, a parmetros y tablas. Los nuevos valores reemplazan a los a antiguos. 4. Las expresiones matemticas pueden incorporar funciones a matemticas estndar (ver tabla adjunta). a a
281
Descripcin o
Valor absoluto de x Arco tangente (en radianes) M nimo entero mayor o igual que x Funcin coseno (x en radianes) o Funcin de distribucinn o o de la normal N (0, 1) en x exp(x) Funcin exponencial o oor(x) Mayor entero menor o igual que x log(x) Logaritmo natural de x log10(x) Logaritmo en base 10 de x mapval(x) Funcin proyeccin o o max(x1,x2,...) Mximo de una lista a min(x1,x2,...) M` nimo de una lista mod(x,y) Resto al dividir x por y normal(x,y) Nmero aleatorio de una variable normal u con media x y desviacin t o pica y power(x,y) Funcin potencial xy (donde y debe ser un entero) o x y Funcin potencial xy (donde x debe ser positiva) o round(x) Redondeo de x al entero ms cercano a round(x,y) Redondea x a y decimales sign(x) Signo de x, 1 si positivo, -1 si negativo, y 0 si nulo. sin(x) Funcin seno (en radianes) o sqr(x) Cuadrado de x sqrt(x) Ra cuadrada de x z trunc(x) Es igual a sign(x) * oor(abs(x)) uniform(x,y) Nmero aleatorio uniforme U (x, y) u
282
Variables
Las variables se declaran en GAMS como sigue: Variables x(i,j) z Cantidades enviadas en toneladas coste total del transporte en dlares; o
La palabra reservada Variable o Variables identica el comando variable. La declaracin de las variables debe incluir las dimensiones de las o mismas. Debe utilizarse siempre una variable para representar la funcin o objetivo. Tambin se pueden denir diferentes tipos de variables (ver tabla): e Positive Variable x; Binary Variable r; Tipo de variable Rango Rango por defecto binary {0, 1} {0, 1} free (default) (, ) (, ) integer {0, 1, . . . , n} {0, 1, . . . , 100} negative (, 0) (, 0) positive (0, ) (0, ) Se pueden jar tambin cotas para las variables, o jar sus valores (no e cambian durante la ejecucin): o r.lo = 2.0; r.up = 5.0; y.fx(i) = 3.0; y cambiar los valores de las variables durante la ejecucin: o s.l(i,j) = 3.0;
283
EQUATIONS
La palabra reservada Equation o Equations identica el comando epara denir restricciones en GAMS. Las ecuaciones deben ser declaradas primero y denidas despus, usando el s e mbolo .. para acoplar los nombres con las deniciones de stas. e Equations cost objective function supply(i) meet 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); El sumatorio i xij se expresa sum(i, x(i,j)), y ixij , se escribe prod(i, x(i,j)). Los s mbolos que se utilizan en las ecuaciones son: =e= indica es igual a, =l= indica es menor o igual que, y =g= indica es mayor o igual que. Se pueden denir muchas ecuaciones simultneamente, usando a ndices: supply(i) .. es equivalente a: supply1 .. supply2 .. sum(j,x(p1,j)) sum(j,x(p2,j)) =l= =l= a(p1); a(p2); sum(j, x(i,j)) =l= a(i);
284
El comando Model se usa para indicar a GAMS las restricciones que debe incluir un determinado modelo. El comando Model que sigue indica que el problema considerado incluye todas las restricciones denidas previamente: Model transport /all/; Tambin puede escribirse como: e Model transport /cost,supply,demand/; El comando Solve indica a GAMS que resuelva el problema indicado. El comando Solve que sigue indica a GAMS que resuelva el problema transport usando el programa de programacin lineal (lp) y minimizano do la variable z. Solve transport using lp minimizing z; La palabra reservada lp se usa para programacin lineal. Otras opciones o se dan en la tabla. Programa lp nlp dnlp mip rmip minlp rminlp mcp mpec cns Propsito o Programacin lineal o Programacin no lineal o Programacin no lineal con derivadas discontinuas o Programacin entera mixta o Programacin entera mixta relajada o Programacin no lineal entera mixta o Programacin no lineal entera mixta relajada o Problemas complementarios mixtos Problemas matemticos con restricciones de equilibrio a Sistemas no lineales con restricciones
285
En GAMS pueden usarse sub ndices para obtener informacin valiosa soo bre ciertos recursos, una vez que se ha resuelto el problema. Algunos sub ndices notables son: modelstat para comprobar el estado del modelo, solvestat para comprobar el estado del programa que lo resuelve y resusd para comprobar el tiempo (en segundos de CPU) empleado para resolverlo. Vanse los posibles valores de modelstat y e solvestat en la tabla adjunta. Un ejemplo es: Display transport.resusd;
Valor 1 2 3 4 5 6 7 8 9 10 11 12 13
modelstat optimal locally optimal unbounded infeasible locally infeasible intermediate infeasible intermediate non-optimal integer solution intermediate non-integer integer infeasible error unknown error no solution
solvestat normal completion iteration interrupt resource interrupt terminated by solver evaluation error limit unknown error: preprocessor error error: setup failure error: solver failure error: internal solver error error: post-processor error error: system failure
286
Se puede usar el asterisco para: Aadir comentarios (primera columna de una l n nea). Para listar los elementos de un conjunto en forma compacta. Para marcar errores en el chero de salida (cuatro asteriscos al comienzo de la l nea). Para indicar en el chero de salida que las restricciones no lineales no son factibles en el punto de partida (tres asteriscos al nal de la l nea). Como operador producto. Para denir conjuntos indirectamente en las estructuras de GAMS (sets, parameters, tables, variables o equations). Por ejemplo: Set A conjunto de artculos /a1,a2/; Table g(A,*) aspectos de los A artculos altura anchura peso * (cm) (cm) (kg) a1 1.0 2.7 3.5 a2 2.4 1.8 4.4; es euivalente a Sets A set of articles /a1,a2/ B set of features /height,width,weight/; Table g(A,B) features of the A articles altura anchura peso * (cm) (cm) (kg) a1 1.0 2.7 3.5 a2 2.4 1.8 4.4;
287
Comandos condicionales
El s mbolo $ puede utilizarse para generar subconjuntos convenientes de los conjuntos ordenados originales. La sentencia. demand(j)$(ord(j) gt 1).. sum(i, x(i,j))=g=b(j); es equivalente a demand2.. demand3.. sum(i, x(i,m2)) sum(i, x(i,m3)) =g= =g= b(m2); b(m3);
Ntese que $(ord(j) gt 1) indica que slo los elementos cuyo ordinal o o sea mayor que 1 deben ser inclu dos. Estas condiciones se pueden utilizar tambin en otros comandos de GAMS e como: asignaciones de datos, comando put, etc. En todos estos casos es posible reemplazar el operador $ por los comandos if-then-else. Sin embargo, por compacidad se usa ms el $. a Otros operadores comunes en otros lenguajes son tambin vlidos en e a GAMS: not, y, or, xor como operadores lgicos; o < (lt), <= (le), = (eq),<> (ne), >= (ge), > (gt) como operadores relacionales.
288
Conjuntos dinamicos I
Una caracter stica muy potente de GAMS es que permite usar conjuntos dinmicos. Usando stos se pueden modicar los elementos que a e pertenecen a un conjunto durante la ejecucin de un programa GAMS. o Los conjuntos dinmicos se denen siempre como subconjuntos de uno a esttico previamente denido. Las variables, parmetros, tablas y ecuaa a ciones que dependen de un conjunto dinmico pueden ser modicadas cada a vez que se actualiza un conjunto dinmico. La tabla que sigue muestra la a equivalencia entre las expresiones matemticas y las de GAMS. a Expresin matemtica o a k = {a, b, c} sk s= s = {c} s = {b, c} Expresin GAMS o Set k /a,b,c/ s(k); s(k)=no; s(k)=no; s(k)$(ord(k) eq card(k))=yes; s(k)=no; s(k)$(ord(k) gt 1)=yes;
En la primera la se dene el conjunto esttico k y luego el subconjunto a dinmico s(k) como funcin de k. a o Antes de usar un conjunto dinmico hay que denir su estado inicial. a Uno de ellos es el conjunto vac que se dene en la segunda la. o,
289
Conjuntos dinamicos II
La tercera la muestra cmo asignar el ultimo elemento de k al s(k), o mediante los operadoresord(k) y card(k). El operador card devuelve el nmero de elementos, y el ord, la posicin de un elemento. u o El operador ord slo es vlido para conjuntos estticos). o a a La ultima la indica cmo asignar dos elementos a s(k). o Se pueden implementar en GAMS operaciones entre conjuntos usando conjuntos dinmicos. Los ejemplos de la tabla adjunta muestran algunos a interesantes: Expresin matemtica o a A = {a1, a2, a3, a4, a5} b A, b = {a1, a2, a5} c A, c = {a2, a3, a5} b c = {a1, a2, a3, a5} b c = {a2, a5} = {a3, a4} b b c = {a1} Expresin GAMS o set A static set /a1*a5/; set B(A) subset /a1,a2,a5/; set C(A) subset /a2,a3,a5/; set UN(A) dynamic subset; UN(A)=B(A)+C(A); set IN(A) dynamic subset; IN(A)=B(A)*C(A); set COMP(A) dynamic subset; COMP(A)=not B(A); set DIFF(A) dynamic subset; DIFF(A)=B(A)-C(A);
290
Comandos de control
El ejemplo siguiente ilustra cmo se usan los comandos de control. o loop(S, loop(JJ, x0=0.0001; x1=2.0; aux=W0.l(JJ)+sum(I,W.l(JJ,I)*X(I,S)); error=1000; f0=sum(R$(ord(R)<4),alpha.l(JJ,R)*(x0**ord(R))) +alpha.l(JJ,4)*arctan(x0)-aux; f1=sum(R$(ord(R)<4),alpha.l(JJ,R)*(x1**ord(R))) +alpha.l(JJ,4)*arctan(x1)-aux; put "aux=",aux:12:8, " f0=",f0:12:8," f1=",f1:12:8/; if(f0*f1>0.0, put "POSSIBLE ERROR EN INVERSAS"/; ); while(error gt 0.00001, error=abs(x0-x1); x2=(x0+x1)*0.5; f2=sum(R$(ord(R)<4),alpha.l(JJ,R)*(x2**ord(R))) +alpha.l(JJ,4)*arctan(x2)-aux; if(f2*f0>0.0, f0=f2; x0=x2; else f1=f2; x1=x2; );); aux=(x0+x1)*0.5; gam(JJ,S)=rho*gam(JJ,S)+(1.0-rho)*(1.0/abs(aux-Y(JJ,S))); if(maxerror(J)<abs(aux-Y(JJ,S)),maxerror(J)=abs(aux-Y(JJ,S))); meanerror(JJ)=meanerror(JJ)+abs(aux-Y(JJ,S)); var(JJ)=var(JJ)+sqr(abs(aux-Y(JJ,S))); ););
291
El ejemplo siguiente ilustra cmo grabar resultados en en chero de salida o y los formatos. SOLVE onelayer USING lp MINIMIZING z; put "J=",J.tl:2," z=",z.l:15:9/; loop(JJ, put "W(0 ,",JJ.tl:3,")=",W0.l(JJ):15:7/; loop(I, put "W(",I.tl:4,",",JJ.tl:3,")=",W.l(JJ,I):15:7/; ); ); loop(JJ, loop(R, put "ALPHA(",JJ.tl:3,",",R.tl:3,")=",alpha.l(JJ,R):10:6/; ); ); loop(S, loop(I, put " X(",I.tl:4,",",S.tl:3,")=",X(I,S):15:7; ); put " "/; loop(JJ, put " Y(",JJ.tl:4,",",S.tl:3,")=",Y(JJ,S):15:7; ); put " "//; ); put "x0=",x0:12:6," x1=",x1:12:6/;
292
Minimizar Z = sujeta a
n j=1 m
i=1 j=1
cij xij .
(1)
donde m = n = 3 y
$title THE TRANSPORTATION PROBLEM SETS I index of shipping origins J index of shipping destinations PARAMETERS U(I) the /I1 I2 I3 V(J) the /J1 J2 J3
/I1*I3/ /J1*J3/;
amount of good to be shipped from origin I 2 3 4/ amount of good to be received in destination J 5 2 2/;
293
TABLE C(I,J) cost of sending a unit from I to J J1 J2 J3 I1 1 2 3 I2 2 1 2 I3 3 2 1; VARIABLES z objective function variable x(I,J) the amount of product to be shipped from I to J; POSITIVE VARIABLE x(I,J); EQUATIONS COST objective function equation SHIP(I) shipping equation RECEIVE(J) receiving equation; COST .. SHIP(I) .. RECEIVE(J) .. z =E= SUM((I,J), C(I,J)*x(I,J)) ; SUM(J, x(I,J)) =E= U(I) ; SUM(I, x(I,J)) =E= V(J) ;
294
Maximizar Z = sujeta a
t=1
(3)
st1 + xt st = yt, t = 1 . . . n, (4) 0. s t , x t , yt donde at = bt = ct = 1, t = 1 . . . n; n = 4; s0 = 2 y y = (2, 3, 6, 1)T . $title PRODUCTION_SCHEDULING PROBLEM SET T
PARAMETER Y(T) demand in month T /1 2 2 3 3 6 4 1/ A(T) B(T) C(T); A(T)=1; B(T)=1; C(T)=1;
295
VARIABLES z objective function variable x(T) number of units produced in month T s(T) number of units in storage in month T; POSITIVE VARIABLES x(T),s(T); s.fx(0)=2; EQUATIONS COST objective function INOUT(T) input and output balance; COST.. z =E= SUM(T$(ord(T) gt 1), A(T)*Y(T)-B(T)*x(T)-C(T)*s(T)); INOUT(T)$(ord(T) gt 1)..s(T)=E= s(T-1)+x(T)-Y(T); MODEL scheduling /ALL/; SOLVE scheduling USING lp MAXIMIZING z; Por tanto, la solucin del problema es: o Z = 2, x = (0, 3, 6, 1)T , s = (2, 0, 0, 0, 0)T .
296
El problema de la dieta I
Minimizar Z = sujeta a
n j=1
n j=1
cj xj ,
(5)
aij xj bi; i = 1 . . . m xj 0; j = 1 . . . n.
67.2 13.7 0.14 1.29 77.0 74.2 30.4 14.7 , b = , 0.14 0.41 0.86 0.55
donde m = 4, n = 5 y
78.6 6.50 A= 0.02 0.27
/DN,DP,Ca,Ph/ /Corn,Oats,Milo,Bran,Linseed/;
PARAMETERS B(I) the minimum required amount of nutrient I /DN 74.2 DP 14.7 Ca 0.14 Ph 0.55/ C(J) cost of one unit of food J /Corn 1 Oats 0.5 Milo 2 Bran 1.2 Linseed 3/;
297
El problema de la dieta II
TABLE A(I,J) amount of Corn Oats Milo DN 78.6 70.1 80.1 DP 6.5 9.4 8.8 Ca 0.02 0.09 0.03 Ph 0.27 0.34 0.30
nutrient I in one unit of food J Bran Linseed 67.2 77.0 13.7 30.4 0.14 0.41 1.29 0.86;
VARIABLES z objective function variable x(J) the amount of food J to be purchased POSITIVE VARIABLE x(J); EQUATIONS COST objective function NUTFOOD(I) nutrients and food relation; COST .. NUTFOOD(I) .. z =E= SUM(J, C(J)*x(J)); SUM(J, A(I,J)*x(J)) =G= B(I);
La solucin optima de este problema es : o Z = 0.793, x = (0, 1.53, 0, 0.023, 0)T . (6)
298
Despacho economico I
n i=1
Ci pi,
(7)
= =
0 Di; i = 1, 2, . . . , n. P ij ; j i, i = 1, 2, . . . , n. P i; i = 1, 2, . . . , n. (8)
2.5 3.5 0.3 0.5 0.0 0.0 0.0 3.0 , D = 0.0 , P = 0.3 0.0 0.4 , 3.0 0.0 0.85 0.5 0.4 0.0 = {2, 3}, 2 = {1, 3}, y 3 = {1, 2},
299
Despacho economico II
TABLE GDATA(G,*) generator input data PMIN PMAX COST * (kW) (kW) (E/kWh) G1 0.15 0.6 6 G2 0.10 0.4 7; TABLE LDATA(N,N,*) line input data SUS LIMIT * (S) (kW) N1.N2 2.5 0.3 N1.N3 3.5 0.5 N2.N3 3.0 0.4; PARAMETER LOAD(N)
load at bus N / N3
0.85 /
VARIABLES z objective function variable p(G) output power for generator G d(N) angle at bus N; p.lo(G)=GDATA(G,PMIN); p.up(G)=GDATA(G,PMAX); d.fx(N3)=0; EQUATIONS COST objective function MAXPOW(N,N) maximum line power limit MINPOW(N,N) minimum line power limit LOADBAL(N) load balance equation; COST.. z =e= SUM(G,GDATA(G,COST)*p(G)); MAXPOW(N,NP).. LDATA(N,NP,SUS)*(d(N)-d(NP))=l= LDATA(N,NP,LIMIT); MINPOW(N,NP).. LDATA(N,NP,SUS)*(d(N)-d(NP))=g=-LDATA(N,NP,LIMIT); LOADBAL(N).. SUM(G$MAP(G,N),p(G))+SUM(NP,LDATA(N,NP,SUS) *(d(N)-d(NP))+LDATA(NP,N,SUS)*(d(N)-d(NP)))=e=LOAD(N); MODEL ed /COST,MAXPOW,MINPOW,LOADBAL/; SOLVE ed USING lp MINIMIZING z;
300
Minimizar Z = sujeta a
j
ij
cij xij
fij xij fij ; i < j. donde n = 4, se supone que fij = 4, i, j, y (f1, f2, f3, f4) = (7, 4, 1, 2) y cij = 1; i, j.
$title NETWORK FLOW PROBLEM SET I set of nodes in the network /I1*I4/ CONEX(I,I) set of node connections /I1.I2,I1.I3,I1.I4,I2.I4,I3.I4/; ALIAS(I,J) PARAMETERS F(I) the input or output flow at node I /I1 7 I2 -4 I3 -1 I4 -2/ FMAX(I,J) maximum flow capacity of conduction from I to J; FMAX(I,J)=4; VARIABLES z objective function variable x(I,J) the flow going from node I to node J
301
POSITIVE VARIABLE x(I,J); x.lo(I,J)=-FMAX(I,J); x.up(I,J)=FMAX(I,J); EQUATIONS COST objective function BALANCE(I) conservation of flow conditions; COST .. z =E= SUM((I,J)$CONEX(I,J),x(I,J)) ; BALANCE(I) .. SUM(J$CONEX(I,J),x(I,J)) -SUM(J$CONEX(J,I),x(J,I)) =E= F(I) ; MODEL netflow /ALL/; SOLVE netflow USING lp MINIMIZING z;
---- VAR X LOWER I1.I2 -4.000 I1.I3 -4.000 I1.I4 -4.000 I2.I4 -4.000 I3.I4 -4.000
the flow going from node I to node J LEVEL UPPER MARGINAL . 4.000 . 3.000 4.000 . 4.000 4.000 -1.000 -4.000 4.000 EPS 2.000 4.000 .
302
La cartera de valores I
dj (bj + xj )
(9)
0 vi(bi + xi) 0 (1 + s) j vj bj .
(10)
Sea el caso particular de tres acciones, 75 de A1, 100 de A2 y 35 de A3, con valores $20, $20 y $100, respectivamente. a Adems, se tiene la informacin: A1 no dar dividendos con a o a o a un nuevo valor $18, A2 pagar $3 por accin y su valor ser a o $23, y A3 pagar $5 por accin con nuevo valor $102. Si se toma r = 0.25 y s = 0.03, se tiene
xA xB xC 0.25 [20(75 + xA) + 20(100 + xB ) + 100(35 + xC )] 0.25 [20(75 + xA) + 20(100 + xB ) + 100(35 + xC )] 0.25 [20(75 + xA) + 20(100 + xB ) + 100(35 + xC )] 20xA + 20xB + 100xC 18(75 + xA) + 23(100 + xB ) + 102(35 + xC ) $title THE PORTFOLIO PROBLEM SET I set of stocks /A1,A2,A3/; ALIAS(I,J); 75, 100, 35, 20(75 + xA), 20(100 + xB ), 100(35 + xC ), = 0, 1.03(20(175)+3500).
303
La cartera de valores II
SCALARS
r s
percentage percentage
/0.25/ /0.03/;
TABLE * A1 A2 A3
VARIABLES z objective function variable x(I) number of shares of stock I; POSITIVE VARIABLE x(I); x.lo(I)=-data(I,B); EQUATIONS COST NOCHANGE INFLATION BALANCE(I) COST .. NOCHANGE .. INFLATION ..
objective function no change in the current value future value must be 3\% greater than the current value to avoid excessive reliance on a single stock;
z =E= SUM(I,data(I,D)*(x(I)+data(I,B))) ; SUM(I,data(I,V)*x(I)) =E= 0; SUM(I,data(I,W)*(x(I)+data(I,B)))=G= (1+s)*SUM(I,data(I,V)*data(I,B)); BALANCE(I).. r*SUM(J,data(J,V)*(x(J)+data(J,B)))=L= data(I,V)*(x(I)+data(I,B)); MODEL portfolio /ALL/; SOLVE portfolio USING lp MAXIMIZING z;
El andamio I
xi
$title SCAFFOLDING PROBLEM (LINEAR) SET B set of beams /B1*B3/ R set of ropes /RA,RB,RC,RD,RE,RF/ L set of loads /L1,L2/ UPP(B,R) / B1.(RA,RB) B2.(RC,RD) B3.(RE,RF)/ DOWN(B,R) / B1.(RC,RD) B2.(RF)/ LOAD(B,L) / B1.L1 B3.L2/; PARAMETER LMAX(R) maximum load for ropes / (RA,RB) 300 (RC,RD) 200 (RE,RF) 100/;
305
El andamio II
PARAMETER DL(L) coordinates of load L/ L1 7 L2 5/; PARAMETER DR(R) coordinates of rope R / RA 2 RB 12 RC 4 RD 12 RE 0 RF 10/; VARIABLES z objective function variable x(L) the applied load t(R) tension on rope R ; t.up(R) = LMAX(R); EQUATIONS COST objective function FORCES(B) force equilibrium equation MOMENT(B) moment equilibrium equation; COST .. z =E= SUM(L, x(L)) ; FORCES(B)..SUM(R$UPP(B,R),t(R))=E= SUM(L$LOAD(B,L),x(L))+ SUM(R$DOWN(B,R),t(R)); MOMENT(B)..SUM(R$UPP(B,R),DR(R)*t(R))=E=SUM(L$LOAD(B,L), DL(L)*x(L))+SUM(R$DOWN(B,R),DR(R)*t(R)); MODEL scaffold /COST,FORCES,MOMENT/; SOLVE scaffold USING lp MAXIMIZING z;
La solucin es: o Z = 640; x1 = 440, x2 = 200; TA = 240, TB = 300, TC = 25, TD = 75, TE = 100, TF = 100.
306
El armador I
Maximizar Z = sujeta a
n
j=1
cj xj
xj {0, 1} j = 1 n. donde se ha supuesto que aj = cj , b = 700 y a = (100, 155, 50, 112, 70, 80, 60, 118, 110, 55)T .
$title 0-1 KNAPSACK PROBLEM. OPTION OPTCR=1e-10; SET J
j=1
aj xj b,
set of containers
/c1*c10/;
PARAMETERS C(J) benefit of container J /c1 100 c2 155 c3 50 c4 112 c5 70 c6 80 c7 60 c8 118 c9 110 c10 55/ A(J) weight of container J; A(J) = C(J);
307
El armador II
SCALAR B maximum capacity of the freighter/700/; VARIABLES z objective function variable x(J) binary choice; BINARY VARIABLE x; EQUATIONS COST objective function CAPA is the loading of the freighter; COST .. CAPA .. z=E= SUM(J,C(J)*x(J)); SUM(J,A(J)* x(J)) =L= B;
MODEL knapsack /ALL/; SOLVE knapsack USING mip MAXIMIZING z; La solucin indica que deben estar los contenedores: o c1, c3, c4, c5, c6, c7, c8, c9. El valor optimo es Z = 700 Tn., lo que implica que el barco ir lleno. a
308
Minimizar Z = sujeta a
k=1 j=1
P j vj (k) pj (k) pj (k + 1) pj (k) pj (k) pj (k + 1) yj (k) zj (k) J j=1 pj (k) J j=1 P j vj (k)
= =
j, k, j, k = 0, , K 1, j, k = 0, , K 1, j, k = 1, , K, k, k,
(12)
donde K = 4, J = 3, y 50 350 300 200 P = 80 , P = 200 , T = 150 , S = 100 , 40 140 100 100 5 20 0.5 0.100 A = 7 , B = 18 , C = 0.3 , E = 0.125 , 6 5 1.0 0.150 150 15 D = 500 , R = 50 . 400 40 $title THE UNIT COMMITMENT PROBLEM SETS K index of periods of time /1*4/ J index of generators /1*3/
309
TABLE GDATA(J,*) generator input data PMIN PMAX T S A B C D * (kW) (kW) (kW/h) (kW/h) (E) (E) (E) (E/kWh) 1 50 350 300 200 5 20 0.5 0.100 2 80 200 150 100 7 18 0.3 0.125 3 40 140 100 100 6 5 1.0 0.150; TABLE PDATA(K,*) data per period D R * (kW) (kW) 2 150 15 3 500 50 4 400 40; VARIABLES z objective function variable p(J,K) output power of generator j at period k v(J,K) is 1 if generator j is active in period k y(J,K) is 1 if generator j is started-up at the beginning of period k s(J,K) is 1 if generator j is shut-down in period k; POSITIVE VARIABLES p(J,K); BINARY VARIABLES v(J,K),y(J,K),s(J,K); v.fx(J,1)=0; p.fx(J,1)=0; EQUATIONS COST objective function PMAXL(J,K) maximum output power equation PMINL(J,K) minimum output power equation LOAD(K) load balance equation
310
EQUATIONS RESERVE(K) spinning reserve equation LOGIC(J,K) start-up shut-down and running logic RUP(J,K) maximum up ramp rate limit RDOWN(J,K) maximum down ramp rate limit; COST..z=e= SUM((K,J),GDATA(J,A)*v(J,K)+GDATA(J,B) *y(J,K)+GDATA(J,C)*s(J,K)+GDATA(J,D)*p(J,K)); PMAXL(J,K)$(ord(K) GT 1)..p(J,K)=l=GDATA(J,PMAX)*v(J,K); PMINL(J,K)$(ord(K) GT 1)..p(J,K)=g=GDATA(J,PMIN)*v(J,K); LOAD(K)$(ord(K) GT 1)..SUM(J,p(J,K))=e=PDATA(K,D); RESERVE(K)$(ord(K) GT 1)..SUM(J,GDATA(J,PMAX)*v(J,K))=g= PDATA(K,D)+PDATA(K,R); LOGIC(J,K)$(ord(K) GT 1)..y(J,K)-s(J,K)=e=v(J,K)-v(J,K-1); RUP(J,K)$(ord(K) GT 1)..p(J,K)-p(J,K-1)=l=GDATA(J,S); RDOWN(J,K)$(ord(K) GT 1)..p(J,K-1)-p(J,K)=l=GDATA(J,T); MODEL uc /ALL/; SOLVE uc USING mip MINIMIZING z;
311
Modelos de localizacion I
Maximizar Z = sujeta a
jJ iI
iI jJ
cij xij
jJ
fj yj .
i I j J
yj {0, 1}, j J i I, j J. xij 0, donde se supone que uj = 6 j, fj = 10 j y b = (1.5, 2.0, 3.0, 4.0, 2.5, 1.0, 2.0).
$Title MODEL OF DISCRETE LOCATION OPTION OPTCR=1e-10; SET I index of cities /C1*C7/ J index of locations /L1*L6/; PARAMETERS B(I) /C1 F(J) U(J) F(J) U(J) demand of a certain good in the city I 1.5 C2 2.0 C3 3.0 C4 4.0 C5 2.5 C6 1.0 C7 2.0/ amortization cost of an industrial plant at J maximum production capacity of a plant in J; = 10; = 6;
312
Modelos de localizacion II
Ciudades Situacin C1 C2 C3 C4 C5 C6 C7 o L2 1.5 2.0 1.0 L4 3.0 2.5 L5 3.0 1.0 2.0
TABLE C(J,I) benefits according to different locations C1 C2 C3 C4 C5 C6 C7 L1 4.0 4.5 2.5 0.5 1.0 0.5 -3.5 L2 4.0 4.5 2.5 4.2 3.5 1.5 -0.5 L3 3.5 5.0 4.0 3.5 4.5 1.5 0.0 L4 1.3 3.0 5.0 3.3 5.5 1.8 1.3 L5 0.5 1.0 1.5 5.0 4.0 5.5 3.0 L6 -1.0 0.0 1.5 3.3 4.0 4.5 2.0 ; VARIABLES z objective function variable x(I,J) the amount of good that is made at J and sold at I y(J) location variable. Equal to 1 if the plant is at J, and 0 otherwise. POSITIVE VARIABLE x; BINARY VARIABLE y; EQUATIONS COST objective function SD(I) satisfying demand of city I CAPA(J) capacity of production of the plant I; COST .. z=e= SUM((I,J),C(J,I)*x(I,J))-SUM(J,F(J)*y(J)); SD(I) .. SUM(J,x(I,J)) =e= B(I); CAPA(J).. SUM(I,x(I,J)) =l= U(J)*y(J); MODEL loc /all/; SOLVE loc USING mip MAXIMIZING z; DISPLAY x.l;
313
EL problema de la Academia I
i=1 s=1
xijs, j {1, 2, . . . , J}
xijs 1, xijs 1,
psxijs = cj ,
$title ACADEMY SETS I number of actual members /1*20/ J number of candidates /1*8/ DIN(J) S the number of different scores to be assigned /1*4/; ALIAS(J,J1); PARAMETER P(S) the $s$-th score /1 10 2 8 3 3 4 1/; SCALARS zmin,zmax; PARAMETER C(J) total score obtained by candidate J; C(J)=sum(I,N(I,J)); VARIABLES z function to be optimized ; BINARY VARIABLE x(I,J,S) if member I assigns score P(S) to J is 1.
314
EL problema de la Academia II
TABLE N(I,J) score assigned to candidate J by member I 1 2 3 4 5 6 7 8 ************************************************** 1 3 10 8 1 2 1 10 8 3 3 1 3 10 8 4 3 10 8 1 5 3 8 10 1 6 1 10 8 3 7 10 8 3 1 8 3 10 1 8 9 8 3 10 1 10 3 10 1 8 11 8 1 10 3 12 10 13 10 8 14 10 1 3 8 15 3 10 8 1 16 10 1 8 3 17 1 3 10 8 18 1 3 8 10 19 1 10 3 8 20 8 1 10 3 ; EQUATIONS OBJ function to be optimized L1(I,J) Can assign at most one score to each candidate L2(I,S) Can asign score S to at most one candidate TOTALSCORE(J) totalscore given;
315
OBJ(J)$DIN(J)..z=e=sum(I,sum(S,x(I,J,S))); L1(I,J)..sum(S,x(I,J,S))=l=1; L2(I,S)..sum(J,x(I,J,S))=l=1; TOTALSCORE(J)..sum(I,sum(S,P(S)*x(I,J,S)))=e=C(J); MODEL Academy /ALL/; file aux /academy.out/; put aux; DIN(J)=NO; loop(J1, DIN(J1)=YES; Solve Academy using mip Minimizing z; zmin=z.l; Solve Academy using mip Maximizing z; zmax=z.l; put "J=",J1.tl:3," zmin= ",zmin:3:0," zmax= ",zmax:3:0/; DIN(J1)=NO; );
y el contenido del chero de salida es: J=1 J=2 J=3 J=4 J=5 J=6 J=7 J=8 zmin= 8 zmax= 20 zmin= 3 zmax= 14 zmin= 15 zmax= 20 zmin= 2 zmax= 13 zmin= 15 zmax= 20 zmin= 2 zmax= 18 zmin= 3 zmax= 20 zmin= 1 zmax= 8
316
Minimizar sujeta a
si nc c=1
nc nh
s c=1 h=1
(c + h) v(s, c, h) i h, i s c, h h, b
ni , 1, 1, 1, 1,
$title CLASS TIMETABLE SETS C classrooms /c1*c3/ H hours /h1*h5/ S subjects /s1*s8/ I instructors /i1,i2/ B blocks /b1,b2/ SI(S,I) maps subjects and instructors /(s1,s2,s8).i1,(s3*s7).i2/ SB(S,B) maps subjects and blocks /(s1*s4).b1,(s5*s8).b2/; VARIABLE z; BINARY VARIABLE v(S,C,H); EQUATIONS cost compact the timetable const1(I) instructors teach all his subjects const2(H,I) instructors teach at most 1 subject per hour const3(S) every subject is taught once const4(C,H) in every classroom-hour pair 1 subject const5(H,B) every hour at most 1 subject of any blockt;
317
SUM((S,C,H),(ord(C)+ord(H))*v(S,C,H))=e=z ; SUM((S,C,H)$SI(S,I),v(S,C,H))=e= SUM(S$SI(S,I),card(S))/card(S); const2(H,I)..SUM((S,C)$SI(S,I),v(S,C,H)) =l= 1; const3(S).. SUM((C,H),v(S,C,H)) =e= 1; const4(C,H)..SUM(S,v(S,C,H)) =l= 1; const5(H,B)..SUM((S,C)$SB(S,B),v(S,C,H)) =l= 1; model timetable /all/; solve timetable using mip minimizing z; DISPLAY v.L;
H3
H4
H5
318
$title WATER SUPPLY NETWORK (nonlinear) SET I set of nodes in the network /I1*I4/ CONEX(I,I) set of node connections /I1.I2,I1.I3,I1.I4,I2.I4,I3.I4/; ALIAS(I,J) PARAMETERS F(I) the input or output flow at node I /I1 20 I2 -3 I3 -10 I4 -7/ FMAX(I,J) maximum flow capacity of conduction from I to J; FMAX(I,J)=8; VARIABLES z objective function variable x(I,J) the flow going from node I to node J POSITIVE VARIABLE x(I,J); x.lo(I,J)=-FMAX(I,J); x.up(I,J)=FMAX(I,J);
319
El problema del abastecimiento de agua II Planteamiento no lineal EQUATIONS COST objective function BALANCE(I) conservation of flow conditions; COST .. z=e=SUM((I,J)$CONEX(I,J),ABS(x(I,J))); BALANCE(I) ..SUM(J$CONEX(I,J),x(I,J)) -SUM(J$CONEX(J,I),x(J,I))=e=F(I); MODEL wsn_dnlp /ALL/; SOLVE wsn_dnlp USING dnlp MINIMIZING z;
---- VAR X LOWER I1.I2 -8.000 I1.I3 -8.000 I1.I4 -8.000 I2.I4 -8.000 I3.I4 -8.000
the flow going from node I to node J LEVEL UPPER MARGINAL 4.000 8.000 . 8.000 8.000 -2.000 8.000 8.000 -1.000 1.000 8.000 . -2.000 8.000 .
4 0 0 1
8 0 0 2
8 1 . 2 0
Maximizzar sujeta a
sb
xi ts, b B, drsts, b B,
ts =
ib
xi +
xb
sb
drsts =
ib
xlixi +
xb
PARAMETER LMAX(R) maximum load for ropes / (RA,RB) 300 (RC,RD) 200 (RE,RF) 100/; PARAMETER dr(R) coordinates of rope R / RA 2 RB 12 RC 4 RD 12 RE 0 RF 10/; VARIABLES z objective function variable x(L) the amount of food J to be purchased T(R) tension on rope R d(L) distance from the left end-points of beams; POSITIVE VARIABLE d; T.UP(R) = LMAX(R); EQUATIONS COST objective function FORCES(B) force equilibrium equation MOMENT(B) moment equilibrium equation; COST .. z =E= SUM(L, x(L)) ; FORCES(B)..SUM(R$UPP(B,R),T(R))=E= SUM(L$LOAD(B,L),x(L))+ SUM(R$DOWN(B,R),T(R)); MOMENT(B)..SUM(R$UPP(B,R),dr(R)*T(R))=E=SUM(L$LOAD(B,L), d(L)*x(L))+SUM(R$DOWN(B,R),dr(R)*T(R)); MODEL ropebeam /COST,FORCES,MOMENT/; SOLVE ropebeam USING nlp MAXIMIZING z;
La solucin es: o Z = 700 en x1 = 500, x2 = 200, d1 = 6.4, d2 = 5.0, TA = 300, TB = 300, TC = 25, TD = 75, TE = 100, TF = 100.
322