Está en la página 1de 50

El entorno GAMS

GAMS (General Algebraic Modeling System) es un entorno


para denir, analizar y resolver problemas de optimizaci on.
Los elementos mas importantes de GAMS son:
1. Su capacidad para resolver problemas peque nos (docenas
de variables y restricciones) y grandes problemas (miles
de variables y restricciones) escribiendo basicamente el
mismo programa. Dispone de una forma compacta y
eciente para escribir bloques de ecuaciones similares sin
mas que escribir una de ellas.
2. Se separa la denici on del modelo de la tecnica de re-
soluci on. El usuario de GAMS formula el modelo con-
sistentemente, y una vez expresado en notaci on GAMS,
uno de los programas disponibles se encarga de generar
la soluci on. Como resultado, el usuario se centra en el
modelado, sin ser perturbado por los problemas tecnicos
de los algoritmos de resoluci on. Esto hace posible un
proceso de modelado muy sencillo y agradable.
3. GAMS practicamente reproduce la descripcion del pro-
blema de programaci on matem atica. Como resultado, el
codigo GAMS is casi auto-explicativo para los lectores
que tengan una mnima formaci on en optimizaci on.
4. GAMS suministra tambien mecanismos que permiten re-
solver colecciones de problemas de optimizaci on estruc-
turados, tales como los de tecnicas de descomposicion.
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

i

j
c
ij
x
ij
sujeta a

j
x
ij
a
i
, i

i
x
ij
b
j
, j
x
ij
0, i, j,
Los datos son:
i: N umero de plantas (2).
j: N umero de mercados (3).
a
i
: La m axima capacidad de producci on de la planta i en
toneladas (300 y 500 toneladas),
b
j
: La demanda del mercado j en toneladas (100, 200 y 300
toneladas), y
c
ij
: el coste de transporte de la planta i al mercado j (0.09
d olares por tonelada y km).
Las variables de decisi on son:
x
ij
: la cantidad de producto a enviar de la planta i al mercado
j, en toneladas.
274
Problema del transporte
C

odigo 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 Prop osito
Set(s) 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 funci on a optimizar
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 may usculas y
min usculas.
2. Todo comando debe terminar en punto y coma.
3. Los comandos pueden denirse en cualquier orden, con
la unica restriccion de que un elemento debe haber sido
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 a nadirse una s para facilitar la lectura.
6. Los comandos pueden escribirse en estilo libre (una o
varias lneas, uno o varios espacios, etc.)
7. Para denir un bloque de elementos basta usar el co-
mando una vez.
8. Una lnea precedida por un asterisco (en la primera
columna) es interpretada como un comentario.
9. La mayora de los comandos (sets, scalar, parameter,
table, variables, equations y model) se utilizan para
declarar elementos y/o darles valores, lo que los con-
vierte en validos para GAMS.
10. Los nombres deben comenzar por una letra y seguir con
letras o dgitos, hasta un m aximo de 9.
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 n umero de los ndices es ignorado por el compilador de
GAMS. La asignaci on de valores se hace entre dos smbolos /. El
smbolo ayuda a denir, en forma compacta, conjuntos numericos,
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 car acter estatico, es decir, no cambian
durante la ejecuci on del programa. En GAMS se pueden denir tambien
conjuntos din amicos, que son subconjuntos de los conjuntos est aticos, pero
que pueden cambiar durante la ejecuci on del programa.
Un comando ligado a la denici on de conjuntos es el comando alias. Este
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, pro-
ductos, etc., cuando hay dos o m as 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 par ametro a(i) en funci on del conjunto (ndice) i. Para
cada valor del ndice (elemento del conjunto) (p1, p2) se da un valor del
par ametro (300, 500) entre dos smbolos /. 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 smbolos /.../ y separados por comas o pasos de
lnea.
2. Las parejas ndice-valor pueden ir en cualquier orden.
3. El valor por defecto de cualquier par ametro es cero, por lo que solo
aquellos que tomen valores diferentes, deben darse.
4. GAMS comprueba que los ndices son v alidos.
Se pueden denir valores de los par ametros mediante funciones:
Parameter c(i,j) transportation cost in dollars per ton;
c(i,j) = f * d(i,j);
279
PARAMETERS y TABLES II
La denici on anterior es la forma compacta de la que sigue:
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 m asndices. Se pueden introducir comentarios tras el nombre
de la tablas, como en:
Table d(i,j) distance in km
m1 m2 m3
p1 2.0 1.6 1.8
p2 2.5 1.2 1.4;
que dene la matriz d(i,j) mediante los ndices indices i y j. Para ca-
da 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;
Notese que esta no es la forma m as compacta de denir c(i,j).
280
Expresiones matem

aticas
Para asignar valores utilizando expresiones matem aticas hay
que tener en cuenta las reglas siguientes:
1. El uso de ndices en la asignaci on indica que la asignaci on
se hace para todos sus posibles valores y combinaciones de
ellos.
2. Se puede hacer una asignaci on especca dando los valores
de los ndices entre comillas:
c(p1,m1)=0.180;
3. Se pueden asignar m as de una vez valores a los escalares,
par ametros y tablas. Los nuevos valores reemplazan a los
antiguos.
4. Las expresiones matem aticas pueden incorporar funciones
matematicas estandar (ver tabla adjunta).
281
Funciones matem

aticas en GAMS
Funci on Descripcion
abs(x) Valor absoluto de x
arctan(x) Arco tangente (en radianes)
ceil(x) Mnimo entero mayor o igual que x
cos(x) Funci on coseno (x en radianes)
errorf(x) Funci on de distribuci onn
de la normal N(0, 1) en x
exp(x) Funci on exponencial
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) Funci on proyecci on
max(x
1
,x
2
,...) Maximo de una lista
min(x
1
,x
2
,...) M`nimo de una lista
mod(x,y) Resto al dividir x por y
normal(x,y) N umero aleatorio de una variable normal
con media x y desviaci on tpica y
power(x,y) Funci on potencial x
y
(donde y debe ser un entero)
x y Funci on potencial x
y
(donde x debe ser positiva)
round(x) Redondeo de x al entero m as cercano
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) Funci on seno (en radianes)
sqr(x) Cuadrado de x
sqrt(x) Raz cuadrada de x
trunc(x) Es igual a sign(x) * oor(abs(x))
uniform(x,y) N umero aleatorio uniforme U(x, y)
282
Variables
Las variables se declaran en GAMS como sigue:
Variables
x(i,j) Cantidades enviadas en toneladas
z coste total del transporte en d olares;
La palabra reservada Variable o Variables identica el comando
variable. La declaraci on de las variables debe incluir las dimensiones de las
mismas. Debe utilizarse siempre una variable para representar la funci on
objetivo.
Tambien se pueden denir diferentes tipos de variables (ver tabla):
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 tambien cotas para las variables, o jar sus valores (no
cambian durante la ejecuci on):
r.lo = 2.0;
r.up = 5.0;
y.fx(i) = 3.0;
y cambiar los valores de las variables durante la ejecuci on:
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 despues, usando el smbolo .. para acoplar los nom-
bres con las deniciones de estas.
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
x
ij
se expresa sum(i, x(i,j)), y
i
x
ij
, se escribe
prod(i, x(i,j)).
Los smbolos 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 simultaneamente, usando ndices:
supply(i) .. sum(j, x(i,j)) =l= a(i);
es equivalente a:
supply1 .. sum(j,x(p1,j)) =l= a(p1);
supply2 .. sum(j,x(p2,j)) =l= a(p2);
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 in-
dica que el problema considerado incluye todas las restricciones denidas
previamente:
Model transport /all/;
Tambien puede escribirse como:
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 programaci on lineal (lp) y minimizan-
do la variable z.
Solve transport using lp minimizing z;
La palabra reservada lp se usa para programaci on lineal. Otras opciones
se dan en la tabla.
Programa Prop osito
lp Programaci on lineal
nlp Programaci on no lineal
dnlp Programaci on no lineal con derivadas discontinuas
mip Programaci on entera mixta
rmip Programaci on entera mixta relajada
minlp Programaci on no lineal entera mixta
rminlp Programaci on no lineal entera mixta relajada
mcp Problemas complementarios mixtos
mpec Problemas matematicos con restricciones de equilibrio
cns Sistemas no lineales con restricciones
285
Informaci

on sobre recursos
En GAMS pueden usarse subndices para obtener informaci on valiosa so-
bre ciertos recursos, una vez que se ha resuelto el problema.
Algunos subndices 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. Veanse los posibles valores de modelstat y
solvestat en la tabla adjunta.
Un ejemplo es:
Display transport.resusd;
Valor modelstat solvestat
1 optimal normal completion
2 locally optimal iteration interrupt
3 unbounded resource interrupt
4 infeasible terminated by solver
5 locally infeasible evaluation error limit
6 intermediate infeasible unknown
7 intermediate non-optimal -
8 integer solution error: preprocessor error
9 intermediate non-integer error: setup failure
10 integer infeasible error: solver failure
11 - error: internal solver error
12 error unknown error: post-processor error
13 error no solution error: system failure
286
Uso del asterisco
Se puede usar el asterisco para:
A nadir comentarios (primera columna de una lnea).
Para listar los elementos de un conjunto en forma compacta.
Para marcar errores en el chero de salida (cuatro asteriscos al comien-
zo de la lnea).
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 lnea).
Como operador producto.
Para denir conjuntos indirectamente en las estructuras de GAMS
(sets, parameters, tables, variables o equations). Por ejemplo:
Set A conjunto de art culos /a1,a2/;
Table g(A,*) aspectos de los A art culos
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 smbolo $ 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.. sum(i, x(i,m2)) =g= b(m2);
demand3.. sum(i, x(i,m3)) =g= b(m3);
Notese que $(ord(j) gt 1) indica que s olo los elementos cuyo ordinal
sea mayor que 1 deben ser includos.
Estas condiciones se pueden utilizar tambien en otros comandos de GAMS
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 m as el $.
Otros operadores comunes en otros lenguajes son tambien validos en
GAMS:
not, y, or, xor como operadores l ogicos;
< (lt), <= (le), = (eq),<> (ne), >= (ge), > (gt) como operadores
relacionales.
288
Conjuntos din

amicos I
Una caracterstica muy potente de GAMS es que permite usar con-
juntos din amicos. Usando estos se pueden modicar los elementos que
pertenecen a un conjunto durante la ejecuci on de un programa GAMS.
Los conjuntos din amicos se denen siempre como subconjuntos de uno
estatico previamente denido. Las variables, par ametros, tablas y ecua-
ciones que dependen de un conjunto din amico pueden ser modicadas cada
vez que se actualiza un conjunto dinamico. La tabla que sigue muestra la
equivalencia entre las expresiones matem aticas y las de GAMS.
Expresion matem atica Expresion GAMS
k = {a, b, c} Set k /a,b,c/
s k s(k);
s = s(k)=no;
s = {c} s(k)=no;
s(k)$(ord(k) eq card(k))=yes;
s = {b, c} s(k)=no;
s(k)$(ord(k) gt 1)=yes;
En la primera la se dene el conjunto estatico k y luego el subconjunto
din amico s(k) como funci on de k.
Antes de usar un conjunto dinamico hay que denir su estado inicial.
Uno de ellos es el conjunto vaco, que se dene en la segunda la.
289
Conjuntos din

amicos II
La tercera la muestra como asignar el ultimo elemento de k al s(k),
mediante los operadoresord(k) y card(k). El operador card de-
vuelve el n umero de elementos, y el ord, la posici on de un elemento.
El operador ord s olo es v alido para conjuntos est aticos).
La ultima la indica c omo asignar dos elementos a s(k).
Se pueden implementar en GAMS operaciones entre conjuntos usando
conjuntos din amicos. Los ejemplos de la tabla adjunta muestran algunos
interesantes:
Expresion matem atica Expresion GAMS
A = {a1, a2, a3, a4, a5} set A static set /a1*a5/;
b A, b = {a1, a2, a5} set B(A) subset /a1,a2,a5/;
c A, c = {a2, a3, a5} set C(A) subset /a2,a3,a5/;
b c = {a1, a2, a3, a5} set UN(A) dynamic subset;
UN(A)=B(A)+C(A);
b c = {a2, a5} set IN(A) dynamic subset;
IN(A)=B(A)*C(A);

b = {a3, a4} set COMP(A) dynamic subset;


COMP(A)=not B(A);
b c = {a1} set DIFF(A) dynamic subset;
DIFF(A)=B(A)-C(A);
290
Comandos de control
El ejemplo siguiente ilustra como se usan los comandos de control.
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 como grabar resultados en en chero de salida
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 =
m

i=1
n

j=1
c
ij
x
ij
. (1)
sujeta a
n

j=1
x
ij
= u
i
; i = 1 . . . m,
m

i=1
x
ij
= v
j
; j = 1 . . . n,
x
ij
0; i = 1 . . . m; j = 1 . . . n,
(2)
donde m = n = 3 y
C =

1 2 3
2 1 2
3 2 1

, u =

2
3
4

, y v =

5
2
2

.
$title THE TRANSPORTATION PROBLEM
SETS
I index of shipping origins /I1*I3/
J index of shipping destinations /J1*J3/;
PARAMETERS
U(I) the amount of good to be shipped from origin I
/I1 2
I2 3
I3 4/
V(J) the amount of good to be received in destination J
/J1 5
J2 2
J3 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 .. z =E= SUM((I,J), C(I,J)*x(I,J)) ;
SHIP(I) .. SUM(J, x(I,J)) =E= U(I) ;
RECEIVE(J) .. SUM(I, x(I,J)) =E= V(J) ;
MODEL transport /COST,SHIP,RECEIVE/;
SOLVE transport USING lp MINIMIZING z;
294
El problema de planificaci

on
de la producci

on I
Maximizar Z =
n

t=1
(a
t
y
t
b
t
x
t
c
t
s
t
), (3)
sujeta a
s
t1
+ x
t
s
t
= y
t
, t = 1 . . . n,
s
t
, x
t
, y
t
0.
(4)
donde a
t
= b
t
= c
t
= 1, t = 1 . . . n; n = 4; s
0
= 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 planificaci

on
de la producci

on 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 soluci on del problema es:
Z = 2, x = (0, 3, 6, 1)
T
, s = (2, 0, 0, 0, 0)
T
.
296
El problema de la dieta I
Minimizar Z =
n

j=1
c
j
x
j
, (5)
sujeta a
n

j=1
a
ij
x
j
b
i
; i = 1 . . . m
x
j
0; j = 1 . . . n.
donde m = 4, n = 5 y
A =

78.6 70.1 80.1 67.2 77.0


6.50 9.40 8.80 13.7 30.4
0.02 0.09 0.03 0.14 0.41
0.27 0.34 0.30 1.29 0.86

, b =

74.2
14.7
0.14
0.55

, and c =

1
0.5
2
1.2
3

.
$title DIET PROBLEM
SET
I set of nutrients /DN,DP,Ca,Ph/
J set of foods /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 nutrient I in one unit of food J
Corn Oats Milo Bran Linseed
DN 78.6 70.1 80.1 67.2 77.0
DP 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;
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 .. z =E= SUM(J, C(J)*x(J));
NUTFOOD(I) .. SUM(J, A(I,J)*x(J)) =G= B(I);
MODEL diet /ALL/;
SOLVE diet USING lp MINIMIZING z;
La soluci on optima de este problema es :
Z = 0.793, x = (0, 1.53, 0, 0.023, 0)
T
. (6)
298
Despacho econ

omico I
Minimizar Z =
n

i=1
C
i
p
i
, (7)
sujeto a

k
= 0

j
i
B
ij
(
i

j
) + p
i
= D
i
; i = 1, 2, . . . , n.
P
ij
B
ij
(
i

j
) P
ij
; j
i
, i = 1, 2, . . . , n.
P
i
p
i
P
i
; i = 1, 2, . . . , n.
(8)
donde n = 3, k = 3 ,
p =

0.15
0.10

, p =

0.6
0.4

, c =

6
7

,
B =

0.0 2.5 3.5


2.5 0.0 3.0
3.5 3.0 0.0

, D =

0.0
0.0
0.85

, P =

0.0 0.3 0.5


0.3 0.0 0.4
0.5 0.4 0.0

1
= {2, 3},
2
= {1, 3}, y
3
= {1, 2},
y la variables son p
1
, p
2
,
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 econ

omico 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 =

ij
c
ij
x
ij
sujeta a

j
(x
ij
x
ji
) = f
i
; i = 1, . . . , n;
f
ij
x
ij
f
ij
; i < j.
donde n = 4, se supone que f
ij
= 4, i, j, y (f
1
, f
2
, f
3
, f
4
) =
(7, 4, 1, 2) y c
ij
= 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:
LOWER LEVEL UPPER MARGINAL
---- VAR Z -INF 5.000 +INF .
Z objective function variable
---- VAR X the flow going from node I to node J
LOWER LEVEL UPPER MARGINAL
I1.I2 -4.000 . 4.000 .
I1.I3 -4.000 3.000 4.000 .
I1.I4 -4.000 4.000 4.000 -1.000
I2.I4 -4.000 -4.000 4.000 EPS
I3.I4 -4.000 2.000 4.000 .
La soluci on es:
Z = 5, x
12
= 0, x
13
= 3, x
14
= 4, x
24
= 4, x
34
= 2.
302
La cartera de valores I
Maximizar Z =

j
d
j
(b
j
+ x
j
) (9)
sujeta a
b
i
+ x
i
0
r(

j
v
j
(b
j
+ x
j
)) v
i
(b
i
+ x
i
)

j
v
j
x
j
= 0

j
w
j
(b
j
+ x
j
) (1 + s)

j
v
j
b
j
.
(10)
Sea el caso particular de tres acciones, 75 de A
1
, 100 de A
2
y 35 de A
3
, con valores $20, $20 y $100, respectivamente.
Ademas, se tiene la informaci on: A
1
no dar a dividendos con
un nuevo valor $18, A
2
pagar a $3 por acci on y su valor ser a
$23, y A
3
pagar a $5 por acci on con nuevo valor $102. Si se
toma r = 0.25 y s = 0.03, se tiene
x
A
75,
x
B
100,
x
C
35,
0.25 [20(75 + x
A
) + 20(100 + x
B
) + 100(35 + x
C
)] 20(75 + x
A
),
0.25 [20(75 + x
A
) + 20(100 + x
B
) + 100(35 + x
C
)] 20(100 + x
B
),
0.25 [20(75 + x
A
) + 20(100 + x
B
) + 100(35 + x
C
)] 100(35 + x
C
),
20x
A
+ 20x
B
+ 100x
C
= 0,
18(75 + x
A
) + 23(100 + x
B
) + 102(35 + x
C
) 1.03(20(175)+3500).
$title THE PORTFOLIO PROBLEM
SET
I set of stocks /A1,A2,A3/;
ALIAS(I,J);
303
La cartera de valores II
SCALARS r percentage /0.25/
s percentage /0.03/;
TABLE data(I,*)
B V D W
* ($) ($) ($)
A1 75 20 0 18
A2 100 20 3 23
A3 35 100 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 objective function
NOCHANGE no change in the current value
INFLATION future value must be 3\% greater than the current value
BALANCE(I) to avoid excessive reliance on a single stock;
COST .. z =E= SUM(I,data(I,D)*(x(I)+data(I,B))) ;
NOCHANGE .. SUM(I,data(I,V)*x(I)) =E= 0;
INFLATION .. 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 soluci on es:
Z = 612.5 en el punto x
A
= 12.5, x
B
= 75.0, x
C
= 17.5.
304
El andamio I
Maximizar Z =

i
x
i
sujeta a
T
E
+ T
F
= x
2
,
T
C
+ T
D
= T
F
,
T
A
+ T
B
= x
1
+ T
C
+ T
D
,
10T
F
= 5x
2
,
8T
D
= 6T
F
,
10T
B
= 5x
1
+ 2T
C
+ 10T
D
.
$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 soluci on es:
Z = 640; x
1
= 440, x
2
= 200; T
A
= 240,
T
B
= 300, T
C
= 25, T
D
= 75, T
E
= 100, T
F
= 100.
306
El armador I
Maximizar Z =
n

j=1
c
j
x
j
sujeta a
n

j=1
a
j
x
j
b,
x
j
{0, 1} j = 1 n.
donde se ha supuesto que a
j
= c
j
, 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 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 .. z=E= SUM(J,C(J)*x(J));
CAPA .. SUM(J,A(J)* x(J)) =L= B;
MODEL knapsack /ALL/;
SOLVE knapsack USING mip MAXIMIZING z;
La soluci on indica que deben estar los contenedores:
c
1
, c
3
, c
4
, c
5
, c
6
, c
7
, c
8
, c
9
.
El valor optimo es Z = 700 Tn., lo que implica que el barco
ir a lleno.
308
Problema de la distribuci

on de energ

a I
Minimizar Z =
K

k=1
J

j=1
[A
j
v
j
(k) + B
j
p
j
(k) + C
j
y
j
(k) + D
j
z
j
(k)]
(11)
sujeta a
P
j
v
j
(k) p
j
(k) P
j
v
j
(k); j, k,
p
j
(k + 1) p
j
(k) S
j
; j, k = 0, , K 1,
p
j
(k) p
j
(k + 1) T
j
; j, k = 0, , K 1,
y
j
(k) z
j
(k) = v
j
(k) v
j
(k 1); j, k = 1, , K,

J
j=1
p
j
(k) = D(k); k,

J
j=1
P
j
v
j
(k) D(k) + R(k); k,
(12)
donde K = 4, J = 3, y
P =

50
80
40

, P =

350
200
140

, T =

300
150
100

, S =

200
100
100

,
A =

5
7
6

, B =

20
18
5

, C =

0.5
0.3
1.0

, E =

0.100
0.125
0.150

,
D =

150
500
400

, R =

15
50
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 distribuci

on de energ

a I
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 distribuci

on de energ

a I
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 soluci on es:
Z = 191, P =

150 350 320


0 100 80
0 50 0

, V =

1 1 1
0 1 1
0 1 0

y
j
(k) =

1 0 0
0 1 0
0 1 0

, p
j
(k) =

0 0 0
0 0 0
0 0 1

.
311
Modelos de localizaci

on I
Maximizar Z =

iI

jJ
c
ij
x
ij


jJ
f
j
y
j
.
sujeta a

jJ
x
ij
= b
i
, i I

iI
x
ij
u
j
y
j
, j J
y
j
{0, 1}, j J
x
ij
0, i I, j J.
donde se supone que u
j
= 6 j, f
j
= 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) demand of a certain good in the city I
/C1 1.5 C2 2.0 C3 3.0 C4 4.0 C5 2.5 C6 1.0 C7 2.0/
F(J) amortization cost of an industrial plant at J
U(J) maximum production capacity of a plant in J;
F(J) = 10;
U(J) = 6;
312
Modelos de localizaci

on II
Ciudades
Situaci on C
1
C
2
C
3
C
4
C
5
C
6
C
7
L
2
1.5 2.0 1.0
L
4
3.0 2.5
L
5
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 Z
j
=
I

i=1
S

s=1
x
ijs
, j {1, 2, . . . , J}
sujeta a
S

s=1
x
ijs
1, i {1, 2, . . . , I}, j {1, 2, . . . , J}
J

j=1
x
ijs
1, i {1, 2, . . . , I}, s {1, 2, . . . , S}
I

i=1
S

s=1
p
s
x
ijs
= c
j
, j {1, 2, . . . , J}
x
ijs
{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 zmin= 8 zmax= 20
J=2 zmin= 3 zmax= 14
J=3 zmin= 15 zmax= 20
J=4 zmin= 2 zmax= 13
J=5 zmin= 15 zmax= 20
J=6 zmin= 2 zmax= 18
J=7 zmin= 3 zmax= 20
J=8 zmin= 1 zmax= 8
316
EL problema de los horarios I
Minimizar

s
n
c

c=1
n
h

h=1
(c + h) v(s, c, h)
sujeta a

s
i
n
c
c=1
n
h
h=1
v(s, c, h) = n
i
, i

s
i
n
c
c=1
v(s, c, h) 1, h, i
n
c
c=1
n
h
h=1
v(s, c, h) = 1, s

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

s
b
n
c
c=1
v(s, c, h) 1, h, b
$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.. SUM((S,C,H),(ord(C)+ord(H))*v(S,C,H))=e=z ;
const1(I).. 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:
LOWER LEVEL UPPER MARGINAL
---- VAR Z -INF 32.000 +INF .
---- 34 VARIABLE V.L
H1 H2 H3 H4 H5
S1.C2 1.000
S2.C2 1.000
S3.C1 1.000
S4.C1 1.000
S5.C1 1.000
S6.C1 1.000
S7.C1 1.000
S8.C2 1.000
318
El problema del abastecimiento de agua I
Planteamiento no lineal
La nueva funci on objetivo es:
Z =

ij
c
ij
(x
+
ij
+ x

ij
),
que corresponde a
Z =

ij
c
ij
|x
ij
|.
$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:
LOWER LEVEL UPPER MARGINAL
---- VAR Z -INF 23.000 +INF .
Z objective function variable
---- VAR X the flow going from node I to node J
LOWER LEVEL UPPER MARGINAL
I1.I2 -8.000 4.000 8.000 .
I1.I3 -8.000 8.000 8.000 -2.000
I1.I4 -8.000 8.000 8.000 -1.000
I2.I4 -8.000 1.000 8.000 .
I3.I4 -8.000 -2.000 8.000 .
La soluci on es:
Z = 23.000, X =

0 4 8 8
4 0 0 1
8 0 0 2
8 1 2 0

.
320
El problema del andamio I
Maximizzar

i
x
i
sujeta a

s
b
t
s
=

i
b
x
i
+

x
b
t
s
, b B,

s
b
dr
s
t
s
=

i
b
xl
i
x
i
+

x
b
dr
s
t
s
, b B,
0 t
s
T
s
, s S,
0 xl
i
l
b
, i
b
,
0 x
i
.
$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 soluci on es:
Z = 700 en x
1
= 500, x
2
= 200, d
1
= 6.4, d
2
= 5.0,
T
A
= 300, T
B
= 300, T
C
= 25,
T
D
= 75, T
E
= 100, T
F
= 100.
322

También podría gustarte