Professional Documents
Culture Documents
Material elaborado por M. Dolores Fras profesora del Departamento de Matematica Aplicada
y Ciencias de la Computacion.
Practica 6: Optimizacion
En esta practica vamos a utilizar un software especfico para resolver problemas de optimizaci
on.
Se trata de la herramienta de alto nivel GAMS (General Algebraic Modeling System), que permite
modelar, analizar y resolver diversos problemas de optimizacion entera, problemas lineales y no lineales.
Aunque se trata de un programa comercial, se puede descargar e instalar este programa desde su p
agina
web (http://www.gams.com/) sin haber comprado la licencia gracias a la version demo de uso libre.
Esta version presenta limitaciones en cuanto al n
umero de variables o restricciones en el modelo, pero
que son mas que suficientes para los ejemplos con los que vamos a trabajar.
GAMS esta disponible para Windows, Linux y Mac. En Windows este software presenta una interfaz grafica que permite, entre otras cosas, trabajar con un editor de texto y ejecutar las ordenes escritas
directamente en el. Para instalar correctamente esta herramienta, se recomienda leer detenidamente
las instrucciones de instalaci
on que se indican en la web para cada plataforma.
Contenido
1. Resoluci
on de problemas de optimizaci
on con GAMS
1.1. Programaci
on b
asica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Programaci
on avanzada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. El problema del transporte
3
3
8
10
1.
1.1.
Resoluci
on de problemas de optimizaci
on con GAMS
Programaci
on b
asica
Figura 2: C
odigo del problema en GAMS
barras / /. Si el modelo est
a formado por todas las restricciones como en el ejemplo, se indica con la
orden /ALL/. De nuevo se cierra el bloque con el smbolo ;.
Por u
ltimo se emplea el comando SOLVE para que GAMS llame al optimizador pertinente y resuelva
el problema. En este ejemplo el algoritmo usado es el LP (linear programming) y ademas se le indica que
se trata de minimizar la funci
on objetivo. En GAMS existen los siguientes algoritmos de resoluci
on:
lp linear programming
nlp nonlinear programming
mip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programming
mcp mixed complementarity problems
cns constrained nonlinear system
Ademas de los bloques anteriores obligatorios, tambien se pueden definir otros bloques de car
acter
opcional como son los bloques SET, DATA y DISPLAY. Algunos de ellos los usaremos en la siguiente
seccion.
El bloque SET se emplea para definir dos estructuras tpicas de GAMS: los ndices, usados posteriormente para recorrer los vectores del problema, y los rangos de valores entre los que pueden variar
estos ndices.
El bloque de datos, DATA, se usa para definir datos fijos del modelo como tablas (TABLE), escalares
(SCALARS) o par
ametros (PARAMETERS).
4
Por u
ltimo el comando DISPLAY permite indicar la clase de salida de datos y el formato que
deseamos.
Una vez escrito el c
odigo del programa lo resolvemos. En Windows presionamos sobre el boton con
la flecha roja del editor o bien elegimos RUN en el men
u FILE o bien pulsamos F9. En ese momento
aparece la salida que se muestra en la Figura 3.
funcion objetivo y que ha encontrado una solucion optima con un valor de la funcion objetivo
de 5.170732 realizando dos iteraciones.
S O L V E
MODEL
TYPE
SOLVER
S U M M A R Y
LINEAL
LP
CPLEX
OBJECTIVE
DIRECTION
FROM LINE
1 Normal Completion
1 Optimal
5.1707
F
MINIMIZE
26
0.031
1000.000
2
2000000000
24.5.6 r55090 Released Nov 27, 2015 VS8 x86 32bit/MS Windows
EQU
EQU
EQU
EQU
OBJ
R1
R2
R3
.
6.000
5.000
7.000
LEVEL
.
6.000
6.878
7.000
UPPER
MARGINAL
.
+INF
+INF
+INF
1.000
0.634
.
0.195
LOWER
-------------------
VAR
VAR
VAR
VAR
VAR
VAR
X1
X2
X3
X4
X5
F
.
.
.
.
.
-INF
LEVEL
.
0.854
.
1.732
.
5.171
UPPER
MARGINAL
+INF
+INF
+INF
+INF
+INF
+INF
1.537
.
0.415
.
1.390
.
X5 VARIABLES PRINCIPALES
F VALOR FUNCION OBJETIVO
6. Informe resumen. Indica se hay soluciones no optimas, infactibles, o no acotadas.
7. Resumen de origen y final de los ficheros. Indica el nombre de los ficheros con los comandos y
con la salida as como el directorio de destino.
Nos centraremos ahora en analizar los valores recogidos en el bloque de soluciones que ofrece
GAMS para el problema planteado. Los valores recogidos para las restricciones nos informa que hay
dos de ellas que saturan (R1 y R2), es decir que cumplen la igualdad. Para las restricciones que saturan
GAMS nos ofrece el valor MARGINAL que es el valor correspondiente al multiplicador de Lagrange. Este
valor indica en cuanto variara el valor de la funcion objetivo al variar el termino independiente de la
restriccion en una unidad. En el caso de la primera restriccion R1, si aumentamos en una unidad su
termino independiente, (en vez de 6 sera 7), el valor de la funcion objetivo aumentara en 0.634. Podeis
comprobarlo ejecutando de nuevo el programa con ese peque
no cambio en la primera restriccion.
En cuanto a las soluciones que proporciona para las variables, en este ejemplo en particular se
observa que el
optimo se alcanza para X2 = 0,854 y X4 = 1,732, siendo cero el valor del resto de
variables (el cero aparece representado con un .) Vemos tambien que el valor de la funcion objetivo
en el optimo es de 5.171. El valor MARGINAL que GAMS ofrece para las variables con valor cero
(representado con un .), indica lo que debemos variar el coeficiente que multiplica a esa variable en
la funcion objetivo para que esta deje de ser nula. En este caso tendramos que disminuir su valor ya
que la funcion es de minimizar. Por ejemplo, el valor marginal para la variable x1 es de 1.537, esto
significa que debemos disminuir el coeficiente que multiplica a x1 en la funcion objetivo en al menos
esa cantidad para que esa variable sea distinta de cero. Podemos comprobarlo, cambiando el 3 x1
de la funcion objetivo a 1,463 x1 y resolver este nuevo problema. Ahora x1 ya es distinta de cero.
Observar que en el problema inicial el coeficiente que multiplicaba a x1 en la funcion objetivo era de
los mas grandes, por lo que para conseguir un valor mnimo de la funcion objetivo, la variable x1 deba
ser cero o lo mas peque
na posible. El mismo razonamiento se puede aplicar al resto de variables que
Practica t
u mismo
1.2.
Programaci
on avanzada
La programaci
on anterior con GAMS es bastante intuitiva ya que existe una gran la similitud entre
la formulacion matem
atica del problema y el codigo de GAMS. Sin embargo, en problemas con gran
n
umero de variables y restricciones resulta mas efectivo utilizar una programacion mas avanzada en
forma matricial como la que se expone en esta seccion. Para ello vamos resolver de nuevo el problema
de optimizacion anterior, utilizando en este caso la programacion matricial. En este caso adem
as de
mantener los bloques obligatorios de GAMS, vamos a introducir los bloques opcionales SET y DATA
comentados en la secci
on anterior.
El problema anterior quedara programado matricialmente de la siguiente forma:
$ONTEXT
Se trata de introducir los datos en forma matricial, para poderlo
resolver mediante un programa lineal.
Min F(x) = 3*x1 + 2*x2 +x3 + 2*x4 +3*x5
s.a:
2*x1 + 5*x2 + x4 + x5 >= 6
4*x2 -2*x3 +2*x4 + 3*x5 >= 5
x1 - 6*x2 + 3*x3 + 7*x4 +5*x5 >= 7
x1, x2, x3, x4, x5 no negativas
$OFFTEXT
SET
J VARIABLES /1*5/
I RESTRICCIONES /1*3/;
PARAMETERS
C(J) COEF FUNCION OBJETIVO
/1 3.
2 2.
3 1.
4 2.
5 3./
B(I) TER_IND_RESTRIC
/1 6.
8
2 5.
3 7/;
TABLE
1
1 2
2 0
3 1
A(I,J)
2 3 4
5 0 1
4 -2 2
-6 3 7
MATRIZ RESTRICCIONES
5
1
3
5;
VARIABLES
X(J) VARIABLES PRINCIPALES
F VALOR FUNCION OBJETIVO;
POSITIVE VARIABLES X;
EQUATIONS
OBJ FUNCION OBJETIVO
R(I) RESTRICCIONES;
OBJ.. F =E= SUM(J,C(J)*X(J));
R(I).. SUM(J,A(I,J)*X(J)) =G= B(I);
MODEL LINMAT/ALL/;
SOLVE LINMAT USING LP MINIMIZING F;
En este ejemplo en el bloque SET el ndice J se refiere a los posibles valores que pueden tomar las
variables (de 1 a 5) mientras que el ndice I se refiere a las posibles restricciones. Es posible definir
estos dos ndices de otra manera, por ejemplo:
SET
J VARIABLES /J1, J2, J3, J4, J5/
I RESTRICCIONES /I1, I2, I3/;
o bien
SET
J VARIABLES /J1*J5/
I RESTRICCIONES /I1*I3/;
Notar que si se introducen estos cambios en el codigo anterior tambien hay que modificar las
cabeceras de las filas de los vectores y de las filas y columnas de las tablas del codigo a estos nuevos
nombres.
Como ya se indic
o anteriormente dentro del bloque DATA hay tres tipos de elementos: PARAMETERS,
SCALAR y TABLES. En este caso solo hemos considerado dos de ellos TABLES y PARAMETERS.
El grupo PARAMETERS se utiliza para la declaracion y asignacion de vectores de datos de los conjuntos definidos en SET. En este ejemplo se definen dos vectores: C(J) y B(I) que se refieren a los
coeficientes de la funci
on objetivo para cada una de las variables y a los terminos independientes de las
restricciones, respectivamente. La asignacion mediante el comando PARAMETERS se realiza para cada
elemento del vector, por lo que primero debemos especificar el nombre de la variable del vector y
despues el valor a asignar. En este ejemplo para el grupo C(J) a la primera variable se le asocia el
coeficiente 3, a la siguiente el coeficiente 2 y as con el resto de variables seg
un los coeficientes de la
funcion objetivo. En el caso de los terminos independientes B(I) de las restricciones, para la restricci
on
2.
xij dj
i=1
xij
0
Para entender mejor la forma de codificar en GAMS este tipo de problemas, vamos a considerar
el siguiente ejemplo.
Una determinada empresa dispone de 4 factoras y 3 puntos de venta. En la siguiente tabla se
muestran la capacidad m
axima de producci
on de cada factora, la demanda de cada punto de venta y
los costes unitarios de transporte de un punto a otro:
Determinar el plan de distribuci
on
optimo.
10
Factora 1
Factora 2
Factora 3
Factora 4
Demanda
P. Venta 1
100
100
125
100
300
P. Venta 2
75
100
125
100
400
P. Venta 3
125
100
200
100
350
Produccion
300
200
400
300
La resolucion con GAMs de este tipo de problemas resulta muy facil utilizando la programaci
on
matricial que hemos visto en la secci
on anterior. As, el codigo para resolver este problema, podramos
escribirlo de la siguiente forma, en el que se han a
nadido con * comentarios dentro del codigo:
$ONTEXT
Problema del transporte
Min z(x) = 100*x11+75*x12+125*x13+100*x21+100*x22+100*x23+
125*x31+125*x32+200*x33+100*x41+100*x42+100*x43
x11+x12+x13<=300
x21+x22+x23<=200
x31+x32+x33<=400
x41+x42+x43<=300
x11+x21+x31+x41>=300
x12+x22+x32+x42>=400
x13+x23+x33+x43>=350
xij>=0
$OFFTEXT
* Primero se declaran y definen los conjuntos de indices
* i recorre los origenes y j los destinos
SET
i Factorias /F1*F4/
j Puntos de venta /V1*V3/;
* Declaramos como parametros los vectores de produccion P(i) y demanda D(j)
* a los que se les asigna los datos de entrada
PARAMETERS
P(i) Produccion maxima de la factoria i
/F1 300
F2 200
F3 400
F4 300/
D(j) Demanda del punto de venta j
/V1 300
V2 400
V3 350/;
* Definimos como tabla la matriz de datos de los costes C(i,j)
TABLE C(i,j) Coste de transporte de la Factoria i al punto de venta j
V1 V2 V3
F1 100 75 125
F2 100 100 100
11
transporte
LP
CPLEX
S U M M A R Y
OBJECTIVE
DIRECTION
FROM LINE
z
MINIMIZE
66
1 Normal Completion
1 Optimal
103750.0000
0.031
1000.000
8
2000000000
24.5.6 r55090 Released Nov 27, 2015 VS8 x86 32bit/MS Windows
LOWER
LEVEL
UPPER
MARGINAL
1.000
Funcion objetivo
F1
F2
F3
F4
produccion de la factoria i
LOWER
LEVEL
UPPER
MARGINAL
-INF
-INF
-INF
-INF
300.000
200.000
250.000
300.000
300.000
200.000
400.000
300.000
-50.000
-25.000
.
-25.000
LEVEL
UPPER
MARGINAL
300.000
400.000
350.000
300.000
400.000
350.000
+INF
+INF
+INF
125.000
125.000
125.000
V1
V2
V3
LOWER
---- VAR X
LOWER
LEVEL
UPPER
MARGINAL
.
.
.
.
.
.
.
.
.
.
.
.
.
300.000
.
.
100.000
100.000
250.000
.
.
50.000
.
250.000
+INF
+INF
+INF
+INF
+INF
+INF
+INF
+INF
+INF
+INF
+INF
+INF
25.000
.
50.000
EPS
.
.
.
EPS
75.000
.
EPS
.
F1.V1
F1.V2
F1.V3
F2.V1
F2.V2
F2.V3
F3.V1
F3.V2
F3.V3
F4.V1
F4.V2
F4.V3
LOWER
---- VAR z
z
-INF
LEVEL
UPPER
MARGINAL
+INF
1.0375E+5
Coste de transporte
13
EXECUTION TIME
0
NONOPT
0 INFEASIBLE
0 UNBOUNDED
0.000 SECONDS
2 MB
F1.V1
F1.V2
F1.V3
F2.V1
F2.V2
F2.V3
F3.V1
F3.V2
F3.V3
F4.V1
F4.V2
F4.V3
LOWER
LEVEL
UPPER
MARGINAL
.
.
.
.
.
.
.
.
.
.
.
.
.
300.000
.
.
100.000
100.000
250.000
.
.
50.000
.
250.000
+INF
+INF
+INF
+INF
+INF
+INF
+INF
+INF
+INF
+INF
+INF
+INF
25.000
.
50.000
EPS
.
.
.
EPS
75.000
.
EPS
.
2. Coste unitario m
aximo de transporte de la ruta de la factora 1 al punto de venta 3 para que
interese su utilizaci
on.
La columna MARGINAL de los resultados obtenidos para la cantidad de producto transportado
14
entre i y j, precisamente nos informa de lo que debemos variar el coeficiente que multiplica a esa
variable en la funci
on objetivo para que esta deje de ser nula. En este caso si disminuimos en 50
unidades ese coeficiente, la ruta de la factora 1 al punto de venta 3 empezara a ser rentable.
Es decir, el coste de transportar una unidad de producto de la factora 1 al punto de venta 3
debera valer como mucho 125 50 = 75 unidades monetarias, para que esa ruta empezara a ser
rentable.
3. Factoras en las que hay excedentes de produccion sin enviar.
Los resultados que GAMS nos ofrece para la produccion de cada factora responden a esta
pregunta, ya que se observa que todas las restricciones saturan excepto la correspondiente a
la factora 3 (valor MARGINAL cero). Esta factora no llega a su maximo de produccion (400
unidades), sino que solo produce 250 unidades, quedando por tanto excedentes de producci
on.
---- EQU produccion
F1
F2
F3
F4
produccion de la factoria i
LOWER
LEVEL
UPPER
MARGINAL
-INF
-INF
-INF
-INF
300.000
200.000
250.000
300.000
300.000
200.000
400.000
300.000
-50.000
-25.000
.
-25.000
4. Incremento en el coste por cada unidad adicional que se solicite en el punto de venta 3.
Como se observa en la soluci
on correspondiente a la demanda de cada punto de venta, se satisface
la demanda de todos ellos ya que las tres restricciones saturan (valores LOWER y LEVEL iguales).
La columna MARGINAL nos informa sobre cuanto incrementara el coste por cada unidad adicional
que requiera cada punto de venta. En el caso del punto de venta 3, si este pidiera 351 unidades
en lugar de las 350 actuales, el coste aumentara en 125 unidades monetarias.
---- EQU demanda
V1
V2
V3
LOWER
LEVEL
UPPER
MARGINAL
300.000
400.000
350.000
300.000
400.000
350.000
+INF
+INF
+INF
125.000
125.000
125.000
5. En cuanto habra que aumentar la capacidad de produccion de la factora 1 para que los costes
disminuyeran a 102500 unidades monetarias?
En este caso se pretende cambiar la estrategia de la empresa reduciendo los costes de transporte
103750 102500 = 1250 unidades monetarias aumentando la produccion de la primera factora.
La columna MARGINAL obtenida para los resultados de produccion de cada factora, nos informa
de como mejorar
a la funci
on objetivo si incrementamos en una unidad la produccion de cada
factora. Para la factora 1 obtenemos que el coste disminuira en 50 unidades monetarias por
cada unidad adicional que fabriquemos en esta factora. Para disminuir el coste en 1250 unidades
monetarias debemos fabricar 1250/50 = 25 unidades de producto mas en esa factora, es decir,
en vez de 300 unidades, fabricar 350.
6. Que factora resulta m
as interesante para aumentar su capacidad de produccion?
En base a lo comentado en el apartado anterior, resulta mas interesante aumentar la producci
on
de la primera factora ya que tiene el valor MARGINAL mas alto, reduciendo mas los costes por
cada unidad fabricada en esa factora que en las otras.
15
Como hemos podido comprobar el analisis de sensibilidad ofrece mucha mas informacion que el
punto optimo y el valor de la funci
on objetivo en ese punto. As, conociendo toda la informacion que
resulta del analisis de sensibilidad, la empresa podra cambiar de estrategia en caso de poder modificar
alguno de los componentes del problema.
Practica t
u mismo
2) La compa
na Solvay es una empresa dedicada a la produccion y suministro de Sosa Solvay. Esta
empresa dispone de tres centros de produccion situados en Alicante(A), Cantabria(C) y en Zamora(Z)
que enva el producto a cinco centros de distribucion situados en Madrid(M), Valencia(V), Sevilla(S),
Barcelona(B) y Lugo(L). El coste unitario de Sosa y su empaquetado en cada centro es de 35 euros.
Las predicciones de demanda de Sosa Solvay en cada uno de los centros de distribucion se muestran
en la siguiente tabla:
C. distribuci
on
Demanda
Madrid (M)
9000
Valencia (V)
6000
Sevilla (S)
8000
Barcelona (B)
10000
Lugo (L)
5000
Alicante (A)
Cantabria (C)
Zamora (Z)
Madrid (M)
14
11
12
Valencia (V)
7
15
14
Sevilla (S)
8
-
Barcelona (B)
17
13
Lugo (L)
16
9
16