You are on page 1of 50

El entorno GAMS

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

EL problema del transporte

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

sujeta a Los datos son:

xij ai, i i xij bj , j xij 0, i, j,

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

Problema del transporte Codigo GAMS


$Title The Transportation Problem * Simple transportation example Sets i production plants / p1, p2 / j markets / m1*m3 /; Table d(i,j) distance in km m1 m2 m3 p1 2.0 1.6 1.8 p2 2.5 1.2 1.4; Scalar f freight (dollars per ton y km) /0.09/; Parameters a(i) capacity of plant i in tons / p1 300 p2 500 / b(j) demand at market j in tons / m1 100 m2 200 m3 300 / c(i,j) transportation cost in dollars per ton; c(i,j) = f * d(i,j); Variables x(i,j) shipment quantities in tons z total transportation costs in dollars; Positive Variable x; 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); Model transport /all/; Solve transport using lp minimizing z; Display x.l;

275

Algunos comandos de GAMS

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/;

Se dene el escalar f y se le asigna el valor 0.09 entre dos /.


278

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

Funciones matematicas en GAMS

Funcin o abs(x) arctan(x) ceil(x) cos(x) errorf(x)

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

MODEL AND SOLVE

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

Informacion sobre recursos

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

Uso del asterisco

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

Salidas usando ficheros

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

El problema del transporte I

Minimizar Z = sujeta a
n j=1 m

i=1 j=1

cij xij .

(1)

xij = ui; i = 1 . . . m, (2)

xij = vj ; j = 1 . . . n, i=1 xij 0; i = 1 . . . m; j = 1 . . . n, 1 2 3 2 5 3, y v = 2. C = 2 1 2 , u = 3 2 1 4 2


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

El problema del transporte II

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) ;

MODEL transport /COST,SHIP,RECEIVE/; SOLVE transport USING lp MINIMIZING z;

294

El problema de planificacion de la produccion I

Maximizar Z = sujeta a

t=1

(atyt btxt ctst),

(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

The month index /0*4/;

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

El problema de planificacion de la produccion II

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

70.1 9.40 0.09 0.34

80.1 8.80 0.03 0.30

1 0.5 2 . and c = 1.2 3

$title DIET PROBLEM SET I J

set of nutrients set of foods

/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);

MODEL diet /ALL/; SOLVE diet USING lp MINIMIZING z;

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

Minimizar Z = sujeto a k ji Bij (i j ) + pi P ij Bij (i j ) P i pi donde n = 3, k = 3 ,


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)

0.15 0.6 6 , p = , c = , p= 0.10 0.4 7 0.0 B = 2.5 3.5 1

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},

y la variables son p1, p2, 1 and 2.


$title THE ECONOMIC DISPATCH PROBLEM SETS G index of generators /G1*G2/ N index of buses /N1*N3/ MAP(G,N) associates generators with buses /G1.N1,G2.N2/; ALIAS(N,NP);

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

Problema de la red de flujo I

Minimizar Z = sujeta a
j

ij

cij xij

(xij xji) = fi; i = 1, . . . , n;

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

Problema de la red de flujo II

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;

Una parte del chero de salida es:


---- VAR Z Z LOWER LEVEL -INF 5.000 objective function variable UPPER +INF MARGINAL .

---- 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 .

La solucin es: o Z = 5, x12 = 0, x13 = 3, x14 = 4, x24 = 4, x34 = 2.

302

La cartera de valores I

Maximizar Z = sujeta a bi + xi r( j vj (bj + xj )) j vj x j j wj (bj + xj ) =

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

data(I,*) B V ($) 75 20 100 20 35 100

D W ($) ($) 0 18 3 23 5 102

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;

La solucin es: o Z = 612.5 en el punto xA = 12.5, xB = 75.0, xC = 17.5.


304

El andamio I

Maximizar Z = sujeta a TE + TF TC + TD TA + TB 10TF 8TD 10TB = = = = = =

xi

x2 , TF , x1 + TC + TD , 5x2, 6TF , 5x1 + 2TC + 10TD .

$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

Problema de la distribucion de energ I a

Minimizar Z = sujeta a

k=1 j=1

[Aj vj (k) + Bj pj (k) + Cj yj (k) + Dj zj (k)] (11)

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)

= =

P j vj (k); Sj ; Tj ; vj (k) vj (k 1); D(k); D(k) + R(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

Problema de la distribucion de energ I a

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

Problema de la distribucion de energ I a

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;

La solucin es: o 350 320 1 1 150 1 0 , V = 0 100 80 1 1 Z = 191, P = 0 50 0 0 1 0 0 0 0 0 1 0 0 , p (k) = 0 1 0 0 0. yj (k) = j 0 1 0 0 0 1


311

Modelos de localizacion I

Maximizar Z = sujeta a
jJ iI

iI jJ

cij xij

jJ

fj yj .

xij = bi, xij uj 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

Maximizar y Minimizar Zj = sujeta a


S s=1 J I S

i=1 s=1

xijs, j {1, 2, . . . , J}

xijs 1, xijs 1,

i {1, 2, . . . , I}, j {1, 2, . . . , J} i {1, 2, . . . , I}, s {1, 2, . . . , S} j {1, 2, . . . , J}

j=1 i=1 s=1

psxijs = cj ,

xijs {0, 1}, i, j, s

$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

EL problema de la Academia III

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

EL problema de los horarios I

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

nh h=1 v(s, c, h) nc si c=1 v(s, c, h) nh nc c=1 h=1 v(s, c, h) sb

= = s v(s, c, h) nc c=1 v(s, c, h)

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

EL problema de los horarios II

EQUATIONS cost.. const1(I)..

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;

Parte del chero de salida es:


---- VAR Z ---S1.C2 S2.C2 S3.C1 S4.C1 S5.C1 S6.C1 S7.C1 S8.C2 LOWER -INF LEVEL 32.000 UPPER +INF MARGINAL .

34 VARIABLE V.L H1 H2 1.000 1.000

H3

H4

H5

1.000 1.000 1.000 1.000 1.000 1.000

318

El problema del abastecimiento de agua I Planteamiento no lineal

La nueva funcin objetivo es: o Z= que corresponde a Z=


ij ij

cij (x+ + x ), ij ij cij |xij |.

$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;

Una parte del chero de salida es:


---- VAR Z Z LOWER LEVEL UPPER -INF 23.000 +INF objective function variable MARGINAL .

---- 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 .

La solucin es: o 0 4 Z = 23.000, X = 8 8


320

4 0 0 1

8 0 0 2

8 1 . 2 0

El problema del andamio I

Maximizzar sujeta a
sb

xi ts, b B, drsts, b B,

ts =

ib

xi +

xb

sb

drsts =

ib

xlixi +

xb

0 ts Ts, s S, 0 xli lb, i b, 0 xi .


$title SCAFFOLDING (NON-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/;
321

El problema del andamio II

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

You might also like