Está en la página 1de 50

El entorno GAMS

GAMS (General Algebraic Modeling System) es un entorno


para definir, analizar y resolver problemas de optimizacion.
Los elementos mas importantes de GAMS son:
1. Su capacidad para resolver problemas pequenos (docenas
de variables y restricciones) y grandes problemas (miles
de variables y restricciones) escribiendo basicamente el
mismo programa. Dispone de una forma compacta y
eficiente para escribir bloques de ecuaciones similares sin
mas que escribir una de ellas.
2. Se separa la definicion del modelo de la tecnica de resolucion. El usuario de GAMS formula el modelo consistentemente, y una vez expresado en notacion GAMS,
uno de los programas disponibles se encarga de generar
la solucion. Como resultado, el usuario se centra en el
modelado, sin ser perturbado por los problemas tecnicos
de los algoritmos de resolucion. Esto hace posible un
proceso de modelado muy sencillo y agradable.
3. GAMS practicamente reproduce la descripcion del problema de programacion matematica. Como resultado, el
codigo GAMS is casi auto-explicativo para los lectores
que tengan una mnima formacion en optimizacion.
4. GAMS suministra tambien mecanismos que permiten resolver colecciones de problemas de optimizacion estructurados, 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
P

XX

i j

cij xij

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

sujeta a

Los datos son:


i: Numero de plantas (2).
j: Numero de mercados (3).
ai: La maxima capacidad de produccion 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
dolares por tonelada y km).
Las variables de decision son:
xij : la cantidad de producto a enviar de la planta i al mercado
j, en toneladas.
274

Problema del transporte


digo GAMS
Co
$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)

Proposito
Dar nombre a los ndices
y definir 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) Definir la funcion 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 mayusculas y


minusculas.
2. Todo comando debe terminar en punto y coma.
3. Los comandos pueden definirse en cualquier orden, con
la unica restriccion de que un elemento debe haber sido
definido antes de usarlo.
4. GAMS tiene palabras reservadas, que no pueden usarse
para otro fin que el suyo propio.
5. Algunos comandos se identifican por sus primeras letras,
por lo que puede anadirse 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 definir un bloque de elementos basta usar el comando 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 convierte en validos para GAMS.
10. Los nombres deben comenzar por una letra y seguir con
letras o dgitos, hasta un maximo de 9.
277

SETS y SCALARS

La palabra reservada Set o Sets identifica el comando SET, que se usa


en GAMS para declarar ndices, y especificar el conjunto de valores que
toman. Por ejemplo
Sets
i
production plants
/ p1, p2 /
j
markets
/ m1*m3 /;
que define los dos ndices i y j.
El texto tras el numero de los ndices es ignorado por el compilador de
GAMS. La asignacion de valores se hace entre dos smbolos /. El
smbolo ayuda a definir, 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 caracter estatico, es decir, no cambian
durante la ejecucion del programa. En GAMS se pueden definir tambien
conjuntos dinamicos, que son subconjuntos de los conjuntos estaticos, pero
que pueden cambiar durante la ejecucion del programa.
Un comando ligado a la definicion 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, productos, etc., cuando hay dos o mas ndices implicados y necesitan variar
independientemente.
Los escalares GAMS son escalares de datos.
La palabra reservada Scalar o Scalars identifica el comando:
Scalar f

freight (dollars per ton y km)

/0.09/;

Se define 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 definir


vectores y matrices de datos. Ambos son equivalentes, excepto que para
definir vectores es necesario usar el comando PARAMETER.
La palabra reservada Parameter, o Parameters, identifica 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 define el parametro a(i) en funcion del conjunto (ndice) i. Para
cada valor del ndice (elemento del conjunto) (p1, p2) se da un valor del
parametro (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 parametro es cero, por lo que solo
aquellos que tomen valores diferentes, deben darse.
4. GAMS comprueba que los ndices son validos.
Se pueden definir valores de los parametros 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 definicion 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 definen en GAMS mediante tablas. La palabra
reservada Table o Tables identifica este comando. Las tablas se definen
usando dos o mas 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 define 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 especifica 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 define 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 mas compacta de definir c(i,j).
280

ticas
Expresiones matema

Para asignar valores utilizando expresiones matematicas hay


que tener en cuenta las reglas siguientes:
1. El uso de ndices en la asignacion indica que la asignacion
se hace para todos sus posibles valores y combinaciones de
ellos.
2. Se puede hacer una asignacion especfica dando los valores
de los ndices entre comillas:
c(p1,m1)=0.180;
3. Se pueden asignar mas de una vez valores a los escalares,
parametros y tablas. Los nuevos valores reemplazan a los
antiguos.
4. Las expresiones matematicas pueden incorporar funciones
matematicas estandar (ver tabla adjunta).

281

ticas en GAMS
Funciones matema

Funcion
abs(x)
arctan(x)
ceil(x)
cos(x)
errorf(x)

Descripcion

Valor absoluto de x
Arco tangente (en radianes)
Mnimo entero mayor o igual que x
Funcion coseno (x en radianes)
Funcion de distribucionn
de la normal N (0, 1) en x
exp(x)
Funcion exponencial
floor(x)
Mayor entero menor o igual que x
log(x)
Logaritmo natural de x
log10(x)
Logaritmo en base 10 de x
mapval(x)
Funcion proyeccion
max(x1,x2,...) Maximo de una lista
min(x1,x2,...) M`nimo de una lista
mod(x,y)
Resto al dividir x por y
normal(x,y) Numero aleatorio de una variable normal
con media x y desviacion tpica y
power(x,y)
Funcion potencial xy (donde y debe ser un entero)
x y
Funcion potencial xy (donde x debe ser positiva)
round(x)
Redondeo de x al entero mas 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)
Funcion seno (en radianes)
sqr(x)
Cuadrado de x
sqrt(x)
Raz cuadrada de x
trunc(x)
Es igual a sign(x) * floor(abs(x))
uniform(x,y) Numero aleatorio uniforme U (x, y)

282

Variables

Las variables se declaran en GAMS como sigue:


Variables
x(i,j)
z

Cantidades enviadas en toneladas


coste total del transporte en d
olares;

La palabra reservada Variable o Variables identifica el comando


variable. La declaracion de las variables debe incluir las dimensiones de las
mismas. Debe utilizarse siempre una variable para representar la funcion
objetivo.
Tambien se pueden definir 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 fijar tambien cotas para las variables, o fijar sus valores (no
cambian durante la ejecucion):
r.lo = 2.0;
r.up = 5.0;
y.fx(i) = 3.0;
y cambiar los valores de las variables durante la ejecucion:
s.l(i,j) = 3.0;

283

EQUATIONS

La palabra reservada Equation o Equations identifica el comando


epara definir restricciones en GAMS. Las ecuaciones deben ser declaradas
primero y definidas despues, usando el smbolo .. para acoplar los nombres con las definiciones 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);
P

El sumatorio i xij se expresa sum(i, x(i,j)), y ixij , 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 definir muchas ecuaciones simultaneamente, usando ndices:
supply(i) ..

sum(j, x(i,j))

=l=

a(i);

sum(j,x(p1,j))
sum(j,x(p2,j))

=l=
=l=

a(p1);
a(p2);

es equivalente a:
supply1 ..
supply2 ..

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 definidas
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 programacion lineal (lp) y minimizando la variable z.
Solve transport using lp minimizing z;
La palabra reservada lp se usa para programacion lineal. Otras opciones
se dan en la tabla.
Programa
lp
nlp
dnlp
mip
rmip
minlp
rminlp
mcp
mpec
cns

Proposito
Programacion lineal
Programacion no lineal
Programacion no lineal con derivadas discontinuas
Programacion entera mixta
Programacion entera mixta relajada
Programacion no lineal entera mixta
Programacion no lineal entera mixta relajada
Problemas complementarios mixtos
Problemas matematicos con restricciones de equilibrio
Sistemas no lineales con restricciones

285

n sobre recursos
Informacio

En GAMS pueden usarse subndices para obtener informacion valiosa sobre 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

Valor
1
2
3
4
5
6
7
8
9
10
11
12
13

transport.resusd;

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

286

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

Uso del asterisco

Se puede usar el asterisco para:


Anadir comentarios (primera columna de una lnea).
Para listar los elementos de un conjunto en forma compacta.
Para marcar errores en el fichero de salida (cuatro asteriscos al comienzo de la lnea).
Para indicar en el fichero de salida que las restricciones no lineales no
son factibles en el punto de partida (tres asteriscos al final de la lnea).
Como operador producto.
Para definir 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..
demand3..

sum(i, x(i,m2))
sum(i, x(i,m3))

=g=
=g=

b(m2);
b(m3);

Notese que $(ord(j) gt 1) indica que solo 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 mas el $.
Otros operadores comunes en otros lenguajes son tambien validos en
GAMS:
not, y, or, xor como operadores logicos;
< (lt), <= (le), = (eq),<> (ne), >= (ge), > (gt) como operadores
relacionales.

288

micos I
Conjuntos dina

Una caracterstica muy potente de GAMS es que permite usar conjuntos dinamicos. Usando estos se pueden modificar los elementos que
pertenecen a un conjunto durante la ejecucion de un programa GAMS.
Los conjuntos dinamicos se definen siempre como subconjuntos de uno
estatico previamente definido. Las variables, parametros, tablas y ecuaciones que dependen de un conjunto dinamico pueden ser modificadas cada
vez que se actualiza un conjunto dinamico. La tabla que sigue muestra la
equivalencia entre las expresiones matematicas y las de GAMS.
Expresion matematica
k = {a, b, c}
sk
s=
s = {c}
s = {b, c}

Expresion GAMS
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 fila se define el conjunto estatico k y luego el subconjunto


dinamico s(k) como funcion de k.
Antes de usar un conjunto dinamico hay que definir su estado inicial.
Uno de ellos es el conjunto vaco, que se define en la segunda fila.

289

micos II
Conjuntos dina

La tercera fila muestra como asignar el ultimo elemento de k al s(k),


mediante los operadoresord(k) y card(k). El operador card devuelve el numero de elementos, y el ord, la posicion de un elemento.
El operador ord solo es valido para conjuntos estaticos).
La ultima fila indica como asignar dos elementos a s(k).
Se pueden implementar en GAMS operaciones entre conjuntos usando
conjuntos dinamicos. Los ejemplos de la tabla adjunta muestran algunos
interesantes:
Expresion matematica
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}
b = {a3, a4}
b c = {a1}

Expresion GAMS
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 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 fichero 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
X

n
X

i=1 j=1

cij xij .

(1)

sujeta a
n
P
j=1
m
P

xij = ui; i = 1 . . . m,

xij = vj ; j = 1 . . . n,
i=1
xij 0; i = 1 . . . m; j = 1 . . . n,

(2)

donde m = n = 3 y

1 2 3
2
5

C = 2 1 2 , u = 3 , y v = 2 .

3 2 1
4
2

$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

n
El problema de planificacio
n I
de la produccio

Maximizar Z =

n
X

(atyt btxt ctst),

t=1

sujeta a

(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

n
El problema de planificacio
n II
de la produccio

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 solucion del problema es:
Z = 2,

x = (0, 3, 6, 1)T ,

296

s = (2, 0, 0, 0, 0)T .

El problema de la dieta I

Minimizar Z =
sujeta a

n
P
j=1

n
X
j=1

cj xj ,

(5)

aij xj bi; i = 1 . . . m
xj 0; j = 1 . . . n.

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

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

$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

0.5

.
and c = 2

1.2

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 solucion optima de este problema es :


Z = 0.793,

x = (0, 1.53, 0, 0.023, 0)T .

298

(6)

mico I
Despacho econo

Minimizar Z =

n
X
i=1

Ci pi,

(7)

sujeto a
k
P
ji Bij (i j ) + pi
P ij Bij (i j )
P i pi

=
=

0
Di; i = 1, 2, . . . , n.
P ij ; j i, i = 1, 2, . . . , n.
P i; i = 1, 2, . . . , n.
(8)

donde n = 3, k = 3 ,

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

mico II
Despacho econo

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

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 fichero de salida es:


---- VAR Z
Z

LOWER
LEVEL
-INF
5.000
objective function variable

---- VAR X
LOWER
I1.I2
-4.000
I1.I3
-4.000
I1.I4
-4.000
I2.I4
-4.000
I3.I4
-4.000

UPPER
+INF

MARGINAL
.

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 solucion es:
Z = 5, x12 = 0, x13 = 3, x14 = 4, x24 = 4, x34 = 2.

302

La cartera de valores I

Maximizar Z =

dj (bj + xj )

(9)

sujeta a
bi + xi
r(Pj vj (bj + xj ))
P
j vj x j
P
j wj (bj + xj )

0
vi(bi + xi)
0
(1 + s) Pj 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.
Ademas, se tiene la informacion: A1 no dara dividendos con
un nuevo valor $18, A2 pagara $3 por accion y su valor sera
$23, y A3 pagara $5 por accion 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);

303

75,
100,
35,
20(75 + xA),
20(100 + xB ),
100(35 + xC ),
= 0,
1.03(20(175)+3500).

La cartera de valores II

SCALARS

TABLE
*
A1
A2
A3

r
s

percentage
percentage

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

/0.25/
/0.03/;

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)

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;

COST ..
NOCHANGE ..
INFLATION ..

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 solucion es:
Z = 612.5 en el punto xA = 12.5, xB = 75.0, xC = 17.5.
304

El andamio I

Maximizar Z =

xi

sujeta a
TE + TF
TC + TD
TA + TB
10TF
8TD
10TB

=
=
=
=
=
=

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 solucion es:
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
X

n
X

cj xj

j=1

aj xj b,

j=1

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

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 solucion indica que deben estar los contenedores:
c1, c3, c4, c5, c6, c7, c8, c9.
El valor optimo es Z = 700 Tn., lo que implica que el barco
ira lleno.

308

n de energa I
Problema de la distribucio

K X
J
X

Minimizar Z =

k=1 j=1

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


(11)

sujeta a
P j vj (k) pj (k)
pj (k + 1) pj (k)
pj (k) pj (k + 1)
yj (k) zj (k)
PJ
j=1 pj (k)
PJ
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,

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

(12)

n de energa I
Problema de la distribucio

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

n de energa I
Problema de la distribucio

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 solucion es:

350 320
1 1
150
1

Z = 191, P = 0 100 80 , V = 0 1 1
0
50
0
0 1 0

0 0
0 0
1
0

yj (k) = 0 1 0 , pj (k) = 0 0 0 .
0 1 0
0 0 1

311

n I
Modelos de localizacio

Maximizar Z =
sujeta a

jJ
X

iI

iI jJ

cij xij

xij = bi,

i I

xij uj yj ,

j J

jJ

fj yj .

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

n II
Modelos de localizacio

Ciudades
Situaci
on C1 C2 C3 C4 C5 C6 C7
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 =

I
X

S
X

i=1 s=1

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

sujeta a
S
X

xijs 1,

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

xijs 1,

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

s=1
J
X

j=1
I
X

S
X

psxijs = cj ,

i=1 s=1

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

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

nc
X

n
h
X

(c + h) v(s, c, h)

s c=1 h=1

sujeta a
P

Pnc

Pnh

h=1 v(s, c, h)
P
Pnc
si c=1 v(s, c, h)
Pnc Pnh
c=1 h=1 v(s, c, h)

=
P
s v(s, c, h)
P
Pnc
sb c=1 v(s, c, h)

si

c=1

ni ,
1,
1,
1,
1,

i
h, i
s
c, h
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..
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 fichero 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

34 VARIABLE V.L
H1
H2
1.000
1.000

H3

UPPER
+INF

H4

MARGINAL
.

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 funcion objetivo es:


Z=

ij

cij (x+
ij + xij ),

que corresponde a
Z=

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 fichero de salida es:


LOWER
LEVEL
UPPER
-INF
23.000
+INF
objective function variable

---- VAR Z
Z

---- VAR X
LOWER
I1.I2
-8.000
I1.I3
-8.000
I1.I4
-8.000
I2.I4
-8.000
I3.I4
-8.000

MARGINAL
.

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 solucion es:

0
4
Z = 23.000, X =
8
8

320

4
0
0
1

8
0
0
2

1
.
2

El problema del andamio I

Maximizzar

xi

sujeta a
P

sb
P

sb

ts =

drsts =

ib
P

ib

xi +

xb

xlixi +

ts, b B,
P

xb

drsts, b B,

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 solucion es:
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

También podría gustarte