50
El entorno GAMS GAMS (General Algebraic Modeling System) es un entorno para definir, analizar y resolver problemas de optimizaci´ on. Los elementos m´as 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 b´asicamente el mismo programa. Dispone de una forma compacta y eficiente para escribir bloques de ecuaciones similares sin m´as que escribir “una de ellas”. 2. Se separa la definici´ on del modelo de la t´ ecnica 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 t´ ecnicos de los algoritmos de resoluci´ on. Esto hace posible un proceso de modelado muy sencillo y agradable. 3.GAMS pr´acticamente reproduce la descripci´on del pro- blema de programaci´ on matem´ atica. Como resultado, el c´odigo GAMS is casi auto-explicativo para los lectores que tengan una m´ ınima formaci´ on en optimizaci´ on. 4. GAMS suministra tambi´ en mecanismos que permiten re- solver colecciones de problemas de optimizaci´ on estruc- turados, tales como los de t´ ecnicas de descomposici´on. 273

Manual Gams

Embed Size (px)

DESCRIPTION

Un manual que encontré en la web, espero les sirva!!!

Citation preview

Page 1: Manual Gams

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

Page 2: Manual Gams

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

Page 3: Manual Gams

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

Page 4: Manual Gams

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

Page 5: Manual Gams

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

Page 6: Manual Gams

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

Page 7: Manual Gams

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

Page 8: Manual Gams

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

Page 9: Manual Gams

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

Page 10: Manual Gams

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

Page 11: Manual Gams

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

Page 12: Manual Gams

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

Page 13: Manual Gams

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

Page 14: Manual Gams

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

Page 15: Manual Gams

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

Page 16: Manual Gams

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

Page 17: Manual Gams

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

Page 18: Manual Gams

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

Page 19: Manual Gams

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

Page 20: Manual Gams

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

Page 21: Manual Gams

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

Page 22: Manual Gams

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

Page 23: Manual Gams

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

Page 24: Manual Gams

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

Page 25: Manual Gams

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

Page 26: Manual Gams

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

Page 27: Manual Gams

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

Page 28: Manual Gams

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

Page 29: Manual Gams

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

Page 30: Manual Gams

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

Page 31: Manual Gams

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

Page 32: Manual Gams

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

Page 33: Manual Gams

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

Page 34: Manual Gams

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

Page 35: Manual Gams

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

Page 36: Manual Gams

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

Page 37: Manual Gams

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

Page 38: Manual Gams

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

Page 39: Manual Gams

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

Page 40: Manual Gams

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

Page 41: Manual Gams

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

Page 42: Manual Gams

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

Page 43: Manual Gams

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

Page 44: Manual Gams

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

Page 45: Manual Gams

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

Page 46: Manual Gams

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

Page 47: Manual Gams

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

Page 48: Manual Gams

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

Page 49: Manual Gams

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

Page 50: Manual Gams

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