manual gams
DESCRIPTION
Un manual que encontré en la web, espero les sirva!!!TRANSCRIPT
El entorno GAMS
GAMS (General Algebraic Modeling System) es un entornopara definir, analizar y resolver problemas de optimizacion.Los elementos mas importantes de GAMS son:
1. Su capacidad para resolver problemas pequenos (docenasde variables y restricciones) y grandes problemas (milesde variables y restricciones) escribiendo basicamente elmismo programa. Dispone de una forma compacta yeficiente para escribir bloques de ecuaciones similares sinmas que escribir “una de ellas”.
2. Se separa la definicion del modelo de la tecnica de re-solucion. El usuario de GAMS formula el modelo con-sistentemente, y una vez expresado en notacion GAMS,uno de los programas disponibles se encarga de generarla solucion. Como resultado, el usuario se centra en elmodelado, sin ser perturbado por los problemas tecnicosde los algoritmos de resolucion. Esto hace posible unproceso de modelado muy sencillo y agradable.
3. GAMS practicamente reproduce la descripcion del pro-blema de programacion matematica. Como resultado, elcodigo GAMS is casi auto-explicativo para los lectoresque tengan una mınima formacion en optimizacion.
4. GAMS suministra tambien mecanismos que permiten re-solver colecciones de problemas de optimizacion 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.8p2 2.5 1.2 1.4
El problema consiste en
Minimizar∑i
∑jcijxij
sujeta a
∑j xij ≤ ai, ∀i∑i xij ≥ bj, ∀jxij ≥ 0, ∀i, j,
Los datos son:
i: Numero de plantas (2).
j: Numero de mercados (3).
ai: La maxima capacidad de produccion de la planta i entoneladas (300 y 500 toneladas),
bj: La demanda del mercado j en toneladas (100, 200 y 300toneladas), y
cij: el coste de transporte de la planta i al mercado j (0.09dolares por tonelada y km).
Las variables de decision son:
xij: la cantidad de producto a enviar de la planta i al mercadoj, 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 Proposito
Set(s) Dar nombre a los ındicesy definir sus posibles valores
Scalar(s) Dar nombre a los escalaresy asignarles valores
Parameter(s) Dar nombre a los vectoresy asignarles valores
Table(s) Dar nombre a las matricesy asignarles valores
Variable(s) Declarar variables,asignarles un tipo (opcional)y darles cotas inferior y superior
Equation(s) Definir la funcion a optimizary las restricciones
Model Dar nombre a los modelosy asignarles la lista de restricciones
Solve Indicar a GAMS el programaque debe resolverlo
Display Decir a GAMS los elementosa listar en el informe de salida
276
Reglas de GAMS
1. GAMS no diferencia entre letras mayusculas yminusculas.
2. Todo comando debe terminar en punto y coma.
3. Los comandos pueden definirse en cualquier orden, conla unica restriccion de que un elemento debe haber sidodefinido antes de usarlo.
4. GAMS tiene palabras reservadas, que no pueden usarsepara 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 ovarias lıneas, uno o varios espacios, etc.)
7. Para definir un bloque de elementos basta usar el co-mando una vez.
8. Una lınea precedida por un asterisco (en la primeracolumna) es interpretada como un comentario.
9. La mayorıa de los comandos (sets, scalar, parameter,table, variables, equations y model) se utilizan paradeclarar elementos y/o darles valores, lo que los con-vierte en validos para GAMS.
10. Los nombres deben comenzar por una letra y seguir conletras o dıgitos, 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 ejemploSets
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 sımbolos ‘/’. El
sımbolo ‘∗’ ayuda a definir, en forma compacta, conjuntos numericos,
es decir, /m1∗m3/ 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, pro-
ductos, 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 sı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 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) distance in km
m1 m2 m3
p1 2.0 1.6 1.8
p2 2.5 1.2 1.4;
que define 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 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
Expresiones matematicas
Para asignar valores utilizando expresiones matematicas hayque tener en cuenta las reglas siguientes:
1. El uso de ındices en la asignacion indica que la asignacionse hace para todos sus posibles valores y combinaciones deellos.
2. Se puede hacer una asignacion especıfica dando los valoresde 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 losantiguos.
4. Las expresiones matematicas pueden incorporar funcionesmatematicas estandar (ver tabla adjunta).
281
Funciones matematicas en GAMS
Funcion Descripcion
abs(x) Valor absoluto de x
arctan(x) Arco tangente (en radianes)
ceil(x) Mınimo entero mayor o igual que x
cos(x) Funcion coseno (x en radianes)
errorf(x) 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 tıpica 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) Raız 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) Cantidades enviadas en toneladas
z coste total del transporte en dolares;
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, 1free (default) (−∞,∞) (−∞,∞)
integer 0, 1, . . . , n 0, 1, . . . , 100negative (−∞, 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 sımbolo ‘..’ para acoplar los nom-
bres 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);
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 definir 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 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 minimizan-
do 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 Proposito
lp Programacion lineal
nlp Programacion no lineal
dnlp Programacion no lineal con derivadas discontinuas
mip Programacion entera mixta
rmip Programacion entera mixta relajada
minlp Programacion no lineal entera mixta
rminlp Programacion no lineal entera mixta relajada
mcp Problemas complementarios mixtos
mpec Problemas matematicos con restricciones de equilibrio
cns Sistemas no lineales con restricciones
285
Informacion sobre recursos
En GAMS pueden usarse subındices para obtener informacion valiosa so-
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. 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:
• Anadir comentarios (primera columna de una lınea).
• Para listar los elementos de un conjunto en forma compacta.
• Para marcar errores en el fichero de salida (cuatro asteriscos al comien-
zo de la lınea).
• 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 lınea).
• 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 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.. 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 solo los elementos cuyo ordinal
sea mayor que 1 deben ser incluıdos.
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
Conjuntos dinamicos I
Una caracterıstica muy potente de GAMS es que permite usar con-
juntos 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 ecua-
ciones 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 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 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 vacıo, que se define en la segunda fila.
289
Conjuntos dinamicos II
La tercera fila muestra como asignar el ultimo elemento de ‘k’ al ‘s(k)’,
mediante los operadores‘ord(k)’ y ‘card(k)’. El operador ‘card’ de-
vuelve 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 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 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∑i=1
n∑j=1
cijxij. (1)
sujeta an∑j=1
xij = ui; ∀i = 1 . . .m,m∑i=1xij = vj; ∀j = 1 . . . n,
xij ≥ 0; ∀i = 1 . . .m; ∀j = 1 . . . n,
(2)
donde m = n = 3 y
C =
1 2 32 1 23 2 1
, u =
234
, y v =
522
.
$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 planificacion
de la produccion I
Maximizar Z =n∑t=1
(atyt − btxt − ctst), (3)
sujeta ast−1 + xt − st = yt, ∀t = 1 . . . n,st, xt, yt ≥ 0.
(4)
donde at = bt = ct = 1, ∀t = 1 . . . n; n = 4; s0 = 2 yy = (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 solucion 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
cjxj, (5)
sujeta an∑j=1
aijxj ≥ bi; i = 1 . . .m
xj ≥ 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 solucion optima de este problema es :
Z = 0.793, x = (0, 1.53, 0, 0.023, 0)T . (6)
298
Despacho economico I
Minimizar Z =n∑i=1Ci pi, (7)
sujeto a
δk = 0∑j∈Ωi Bij(δi − δj) + pi = Di; i = 1, 2, . . . , n.−P ij ≤ Bij(δi − δj) ≤ P ij; ∀j ∈ Ωi, i = 1, 2, . . . , n.
P i ≤ pi ≤ 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.52.5 0.0 3.03.5 3.0 0.0
, D =
0.00.00.85
, P =
0.0 0.3 0.50.3 0.0 0.40.5 0.4 0.0
,
Ω1 = 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 =∑ijcijxij
sujeta a ∑j(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:
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 solucion es:
Z = 5, x12 = 0, x13 = 3, x14 = 4, x24 = −4, x34 = 2.
302
La cartera de valores I
Maximizar Z =∑jdj(bj + xj) (9)
sujeta a
bi + xi ≥ 0r(∑j vj(bj + xj)) ≤ vi(bi + xi)∑
j vjxj = 0∑j wj(bj + xj) ≥ (1 + s) ∑j vjbj.
(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 conun nuevo valor $18, A2 pagara $3 por accion y su valor sera$23, y A3 pagara $5 por accion con nuevo valor $102. Si setoma r = 0.25 y s = 0.03, se tiene
xA ≥ −75,
xB ≥ −100,
xC ≥ −35,
0.25 [20(75 + xA) + 20(100 + xB) + 100(35 + xC)] ≤ 20(75 + xA),
0.25 [20(75 + xA) + 20(100 + xB) + 100(35 + xC)] ≤ 20(100 + xB),
0.25 [20(75 + xA) + 20(100 + xB) + 100(35 + xC)] ≤ 100(35 + xC),
20xA + 20xB + 100xC = 0,
18(75 + xA) + 23(100 + xB) + 102(35 + xC) ≥ 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 solucion es:
Z = 612.5 en el punto xA = 12.5, xB = 75.0, xC = −17.5.
304
El andamio I
Maximizar Z =∑ixi
sujeta aTE + TF = x2,TC + TD = TF ,TA + TB = x1 + TC + TD,
10TF = 5x2,8TD = 6TF ,
10TB = 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 =n∑j=1cjxj
sujeta an∑j=1ajxj ≤ b,
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 .. 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 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 barcoira lleno.
308
Problema de la distribucion de energıa I
Minimizar Z =K∑k=1
J∑j=1
[Aj vj(k) + Bj pj(k) + Cj yj(k) + Dj zj(k)]
(11)
sujeta a
Pjvj(k) ≤ pj(k) ≤ Pjvj(k); ∀j,∀k,pj(k + 1)− pj(k) ≤ Sj; ∀j, k = 0, · · · , K − 1,
pj(k)− pj(k + 1) ≤ Tj; ∀j, k = 0, · · · , K − 1,
yj(k)− zj(k) = vj(k)− vj(k − 1); ∀j, k = 1, · · · , K,∑Jj=1 pj(k) = D(k); ∀k,∑J
j=1 Pj vj(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 distribucion 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 distribucion 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 solucion es:
Z = 191, P =
150 350 3200 100 800 50 0
, V =
1 1 10 1 10 1 0
yj(k) =
1 0 00 1 00 1 0
, pj(k) =
0 0 00 0 00 0 1
.
311
Modelos de localizacion I
Maximizar Z =∑i∈I
∑j∈J
cijxij − ∑j∈J
fjyj.
sujeta a ∑j∈Jxij = bi, ∀i ∈ I
∑i∈Ixij ≤ ujyj, ∀j ∈ Jyj ∈ 0, 1, ∀j ∈ Jxij ≥ 0, ∀i ∈ I,∀j ∈ J.
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) 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 localizacion II
CiudadesSituacion C1 C2 C3 C4 C5 C6 C7
L2 1.5 2.0 1.0L4 3.0 2.5L5 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∑i=1
S∑s=1
xijs, ∀j ∈ 1, 2, . . . , J
sujeta aS∑s=1xijs ≤ 1, ∀i ∈ 1, 2, . . . , I, j ∈ 1, 2, . . . , J
J∑j=1xijs ≤ 1, ∀i ∈ 1, 2, . . . , I, s ∈ 1, 2, . . . , S
I∑i=1
S∑s=1psxijs = cj, ∀j ∈ 1, 2, . . . , Jxijs ∈ 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 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∈Ω
nc∑c=1
nh∑h=1
(c + h) v(s, c, h)
sujeta a∑s∈Ωi
∑ncc=1
∑nhh=1 v(s, c, h) = ni, ∀i∑
s∈Ωi∑ncc=1 v(s, c, h) ≤ 1, ∀h, ∀i∑nc
c=1∑nhh=1 v(s, c, h) = 1, ∀s∑s∈Ω v(s, c, h) ≤ 1, ∀c, ∀h∑
s∈∆b
∑ncc=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 fichero 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 funcion objetivo es:
Z =∑ijcij(x
+ij + x−ij),
que corresponde aZ =
∑ijcij|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 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 solucion 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∑ixi
sujeta a∑
s∈Ψbts = ∑
i∈Ωbxi + ∑
x∈Θbts, b ∈ B,
∑s∈Ψb
drsts = ∑i∈Ωb
xlixi + ∑x∈Θb
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