You are on page 1of 16

Estadstica

Grado en Ingeniera Qumica


Universidad de Cantabria

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.

Figura 1: Inicio GAMS

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

La forma en que GAMS representa un programa de optimizacion coincide, practicamente, con


la descripcion del problema. Sin embargo, como en todo lenguaje de programacion, GAMS tiene
sus particularidades. El usuario debe prestar especial atencion a las propias reglas gramaticales de
GAMS, tanto para la definici
on de variables como para las estructuras propias de este lenguaje.
Aunque inicialmente el manejo de GAMS requiere un cierto esfuerzo, con la practica se dispone de
una herramienta muy vers
atil a la hora de resolver diversos problemas de optimizacion.
Para entender las principales caractersticas del lenguaje de programacion de GAMS comenzaremos resolviendo el siguiente ejemplo de programacion lineal1 :
min: 3x1 + 2x2 + x3 + 2x4 + 3x5
2x1 + 5x2 + x4 + x5 6
4x2 2x3 + 2x4 + 3x5 5
x1 6x2 + 3x3 + 7x4 + 5x5 7
xi 0
En GAMS el programa anterior se codifica en su propio lenguaje y se almacena en un fichero cuya
extension por defecto es .gms, extensi
on que se usa por defecto para identificar los ficheros de datos
de GAMS. Este fichero se puede crear con un editor de texto o bien directamente desde el editor de
GAMS que ofrece la versi
on de Windows (en el men
u File seleccionar New). El codigo de GAMS que
resuelve este programa de optimizaci
on se muestra en la Figura 2.
Se puede observar la similitud entre la formulacion matematica y el codigo de GAMS, concretamente en la parte donde se definen la funcion objetivo y las restricciones. Describiremos a continuaci
on
cada una de las partes de este c
odigo.
Al comienzo del programa se han escrito unas lneas de comentario que comienzan con el comando
$ONTEXT y terminan con el comando $OFFTEXT. Tambien es posible escribir comentarios en GAMS
iniciando cada lnea de comentario con un asterisco.
En la programaci
on en GAMS hay una serie de bloques obligatorios que son los bloques VARIABLES,
EQUATIONS, MODEL y SOLVE. El orden no importa, sin embargo hay que definir cualquier entidad, (variable, parametro, etc) antes de ser usado. Ademas GAMS no diferencia entre may
usculas y min
usculas,
sin embargo por mejorar la presentaci
on del programa, hemos escrito en may
usculas las palabras
propias de GAMS.
Las variables del problema se declaran mediante el comando VARIABLES. En este bloque se definen
todas las variables que se van a usar en el modelo indicando, ademas, el caracter de las variables
(positiva, entera, etc). Una vez definidas todas las variables se cierra el bloque con el smbolo ;. Las
variables no tiene porque llamarse xi, x2, etc. El nombre de la variable puede tener hasta 63 caracteres
alfanumericos sin espacios.
El comando EQUATIONS permite indicar el nombre que se va a asignar a la funcion objetivo y a
las restricciones del problema. Una vez declaradas las equaciones se escribe el smbolo ; y se pasa a
la definicion las ecuaciones del modelo. Para ello se coloca el smbolo .. tras el nombre de la funci
on
y delante de la formulaci
on correspondiente. Las igualdades y desigualdades en las restricciones se
escriben con los smbolos =e= para indicar =, =l= para y =g= para . Como se observa cada
ecuacion lleva al final el smbolo ;.
En el siguiente bloque se define el modelo, MODEL. Para ello se le asigna un nombre al modelo
(en este ejemplo el nombre elegido es lineal) y se indica que restricciones componen ese modelo entre
1
Ejercicio adaptado del documento de R. Sala-Garrido que se puede descargar de la p
agina oficial de GAMS
(http://www.gams.com/docs/contributed/)

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.

Figura 3: Solucion del problema en GAMS


La solucion se guarda autom
aticamente en un fichero con la extension .lst, en el directorio que
gams asigna por defecto Documents/gamsdir/projdir/lineal.lst. Como se puede ver la solucion que
ofrece GAMS es muy extensa y consta de varias partes:
1. Compilaci
on. En esta parte indica la transformacion de las instrucciones originales en c
odigo
legible por solver.
2. Lista de ecuaciones. Recoge todas las ecuaciones del modelo que conviene repasar ya que GAMS
detecta errores en el lenguaje, pero no errores numericos a la hora de introduccir las ecuaciones.
GAMS escribe en el primer miembro de la ecuacion todas las variables, de ah que los coeficientes
sean negativos. LHS=0 indica que el termino de la izquierda toma el valor cero. Eso es as porque
no se ha definido un punto de partida en la resolucion del problema y por defecto toma el cero.
3. Lista de variables. En esta parte aparece para cada variable informacion con los coeficientes que
tiene asignados en cada ecuaci
on. Ademas tambien se indica las cotas inferior (LO), el punto de
partida (L), y la cota superior (UP).
4. Estadsticas del modelo como el n
umero de variables y ecuaciones que tiene.
5. Resumen de la soluci
on. En este bloque se indica una primera parte referida al proceso de
solucion. En el ejemplo vemos que se trata de un modelo lineal, que estamos minimizando la
5

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

**** SOLVER STATUS


**** MODEL STATUS
**** OBJECTIVE VALUE

1 Normal Completion
1 Optimal
5.1707

RESOURCE USAGE, LIMIT


ITERATION COUNT, LIMIT
IBM ILOG CPLEX
Cplex 12.6.2.0

F
MINIMIZE
26

0.031
1000.000
2
2000000000

24.5.6 r55090 Released Nov 27, 2015 VS8 x86 32bit/MS Windows

Space for names approximately 0.00 Mb


Use option names no to turn use of names off
LP status(1): optimal
Cplex Time: 0.03sec (det. 0.01 ticks)
Optimal solution found.
Objective :
5.170732
En un segundo bloque nos muestra el comportamiento de las ecuaciones y el valor que toman las
variables indicando en cada caso los valores mnimo (LOWER), el valor optimo (LEVEL), maximo
(UPPER) y el marginal (MARGINAL). Los valores maximos y mnimos que se asocian a una restriccion dependen del tipo de restricci
on. Si la restriccion es de menor o igual que, el valor mnimo
es (-INF) y el m
aximo es el termino independiente de la restriccion. Si la restriccion es de
mayor o igual que, el valor mnimo es su termino independiente y el maximo (+INF). Si la
restriccion es de igualdad el m
aximo y el mnimo coinciden con el termino independiente. El
valor optimo de una restricci
on se obtiene al evaluar su termino dependiente una vez que se ha
resuelto el problema.
Tambien para cada una de las variables se muestra su valor maximo, optimo, mnimo y marginal.
En este caso, si en el fichero de entrada no se especifico el lmite inferior (superior) de la variable,
entonces se considera que este valor es - (). En este caso el lmite inferior es cero (representado
con .) ya que las variables se definieron no negativas. Los valores optimos y marginal de una
variable se determinan una vez resuelto el problema.
LOWER
-------------

EQU
EQU
EQU
EQU

OBJ
R1
R2
R3

.
6.000
5.000
7.000

LEVEL
.
6.000
6.878
7.000

OBJ FUNCION OBJETIVO


R3 RESTRICCIONES
6

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

eran cero inicialmente.

Practica t
u mismo

1) Encontrar los valores


optimos del siguiente problema resuelto graficamente en clase:
Opt : (x1 3)2 + (x2 3)2
x1 + x2 <= 10
x1 + x2 >= 2
x1 , x2 >= 0
En particular observar que pasa en el m
aximo. Nota: en GAMS la forma de elevar al cuadrado es con
la funcion SQR.

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

1 el termino independiente es 6, para la restriccion 2 es 5 y para la restriccion tres es el 7. Al final de


la seccion se ha a
nadido el smbolo de final de bloque (;).
El comando TABLES permite definir de manera muy sencilla matrices de datos, lo que facilita la
introduccion de los mismos en problemas de grandes dimensiones. Se trata de una tabla simple de dos
dimensiones en la que primero se declara el nombre de la tabla y los conjuntos que forman parte de
ella (A(I,J)). Despues se rellenan los datos de la tabla escribiendo en la primera fila y columna los
nombres de los elementos del conjunto I (cabecera de las filas) y J (cabecera de las columnas) espaciados
convenientemente mediante tabuladores. En este caso la matriz A(I,J) representa los coeficientes de
las restricciones del problema. Al final de la tabla se escribe el identificador de final de bloque (;).
Como se observa en el ejemplo, en esta forma de programar se simplifica bastante el codigo para
definir las ecuaciones del problema, ya que se opera con los ndices definidos antes en el bloque SET.
As una de las operaciones con ndices m
as comunes sera:
P P
a como SUM((I,J), A(I,J))
i
j Aij que se expresar
Teniendo en cuenta esta operaci
on, hemos programado tanto la funcion objetivo como las restricciones
del problema como:
OBJ.. F =E= SUM(J,C(J)*X(J));
que representara la funci
on objetivo F (x) = 3 x1 + 2 x2 + x3 + 2 x4 + 3 x5, y
R(I).. SUM(J,A(I,J)*X(J)) =G= B(I)
que representara las 3 restricciones del problema:
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

2.

El problema del transporte

El problema del transporte es un problema clasico de programacion lineal en el que tenemos m


orgenes que tienen que suministrar un producto a n destinos. Conocida la produccion de cada origen
(pi , i = 1, ..., m), la demanda de cada destino (dj , j = 1, ..., n) y el coste del transporte de cada unidad
de producto desde el origen al destino (cij ), el problema del transporte trata de determinar la cantidad
de producto que se debe transportar para que el coste sea mnimo. Como ya sabemos la formulaci
on
de este tipo de problemas es la siguiente:
m P
n
P
Min
cij xij
i=1 j=1

sujeto a las restricciones:


n
P
xij pi
j=1
m
P

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

F3 125 125 200


F4 100 100 100;
* Declaramos la variables de optimizaci
on: funci
on objetivo (z)
* e inc\ognitas del problema (X(i,j))
VARIABLES
X(i,j) Cantidad de producto transportado entre i y j
z Coste de transporte;
* Naturaleza de las variables
POSITIVE VARIABLES X;
* Se declara la funci
on objetivo y el resto de restricciones.
* Se formulan las ecuaciones utilizando la notaci
on compacta de GAMS
* con conjunto de indices.
EQUATIONS
coste Funcion objetivo
produccion(i) produccion de la factoria i
demanda(j) demanda del punto de venta j;
coste.. z =E= SUM((i,j),C(i,j)*X(i,j));
produccion(i).. SUM(j,X(i,j)) =L= P(i);
demanda(j).. SUM(i,X(i,j)) =G= D(j);
* Se identifica el modelo a resolver
MODEL transporte /ALL/;
* Se resuelve el modelo mediante un optimizador de programaci
on lineal
SOLVE transporte USING LP MINIMIZING z;
Una vez introducido el c
odigo se resuelve el problema con GAMS obteniendo la siguiente soluci
on
del problema:
S O L V E
MODEL
TYPE
SOLVER

transporte
LP
CPLEX

**** SOLVER STATUS


**** MODEL STATUS
**** OBJECTIVE VALUE
RESOURCE USAGE, LIMIT
ITERATION COUNT, LIMIT
IBM ILOG CPLEX
Cplex 12.6.2.0

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

Space for names approximately 0.00 Mb


Use option names no to turn use of names off
LP status(1): optimal
12

Cplex Time: 0.02sec (det. 0.02 ticks)


Optimal solution found.
Objective :
103750.000000

LOWER

LEVEL

UPPER

MARGINAL

1.000

---- EQU coste


coste

Funcion objetivo

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

---- EQU demanda

demanda del punto de venta j

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

Cantidad de producto transportado entre i y j

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

**** REPORT SUMMARY :

EXECUTION TIME

0
NONOPT
0 INFEASIBLE
0 UNBOUNDED

0.000 SECONDS

2 MB

24.5.6 r55090 WIN-VS8

USER: GAMS Development Corporation, Washington, DC


G871201/0000CA-ANY
Free Demo, 202-342-0180, sales@gams.com, www.gams.com
DC0000
De la soluci
on anterior se obtiene que se envan 300 unidades desde la factora 1 al segundo punto
de venta, 100 unidades de la segunda factora a los puntos de venta 2 y 3, 250 unidades desde la factora
3 al primer punto de venta, 50 unidades desde la factora 4 al primer punto de venta y 250 desde la
cuarta factora al tercer punto de venta. Siendo el coste mnimo de 103750 unidades monetarias.
A partir de la soluci
on que proporciona GAMS, se puede llevar a cabo un estudio de sensibilidad
de los coeficientes del modelo con objeto de conocer mejor las distintas posibilidades y variaciones
del problema. Para ello debemos fijarnos, en el resto de datos que proporciona GAMS, en particular
en los valores recogidos en la columna MARGINAL. Analizando esos valores podremos contestar a las
siguientes preguntas:
1. Determinar que rutas no resultan rentables.
Los resultados correspondientes a la cantidad de producto transportado entre i y j nos ofrece
esta infomaci
on para aquellos valores de las variables que son cero. As podemos decir que las
rutas no rentables son desde la factora 1 a los puntos de venta 1 y 3, desde la factora 2 al
primer punto de venta, desde la factora 3 a los puntos de venta 2 y 3 y desde la factora 4 al
segundo punto de venta.
---- VAR X

F1.V1
F1.V2
F1.V3
F2.V1
F2.V2
F2.V3
F3.V1
F3.V2
F3.V3
F4.V1
F4.V2
F4.V3

Cantidad de producto transportado entre i y j

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

demanda del punto de venta j

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

Ademas la capacidad de empaquetado en Alicante es de 14000 paquetes, en Cantabria de 15000 y en


Zamora de 10000. Los costes de transporte por paquete de los centros de produccion a los centros de
distribucion se recogen en la tabla:

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

donde - indica aquellos casos en los que no se producen envos.


Formular un programa lineal que determine cuantos paquetes deben enviarse desde cada centro
de producci
on a cada centro de distribucion para que el coste sea mnimo.
Determinar el coste mnimo que resulta.
Cuantos paquetes se envan de Alicante al centro de distribucion en Valencia?
Se observa que desde Zamora no se envan paquetes al centro en Valencia. Que estrategia se
puede seguir para que esto cambie?
Alguno de los centros de producci
on no alcanza el maximo de su produccion? En caso afirmativo
indicar cual/es razonando la respuesta.

16

You might also like