Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual de GAMS
Manual de GAMS
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
275
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
SETS y SCALARS
/0.09/;
PARAMETERS y TABLES I
279
PARAMETERS y TABLES II
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
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
283
EQUATIONS
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
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
Comandos condicionales
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;
289
micos II
Conjuntos dina
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
291
292
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
/I1*I3/
/J1*J3/;
293
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) ;
294
n
El problema de planificacio
n I
de la produccio
Maximizar Z =
n
X
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
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
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
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) ..
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
299
mico II
Despacho econo
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
Minimizar Z =
sujeta a
ij
cij xij
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
.
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)
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 .
305
El andamio II
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
z=E= SUM(J,C(J)*x(J));
SUM(J,A(J)* x(J)) =L= B;
308
n de energa I
Problema de la distribucio
K X
J
X
Minimizar Z =
k=1 j=1
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
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)
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
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,
xijs 1,
s=1
J
X
j=1
I
X
S
X
psxijs = cj ,
i=1 s=1
j {1, 2, . . . , J}
$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
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;
);
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
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
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;
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
ij
cij (x+
ij + xij ),
que corresponde a
Z=
ij
cij |xij |.
319
---- 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
.
La solucion es:
0
4
Z = 23.000, X =
8
8
320
4
0
0
1
8
0
0
2
1
.
2
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
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