Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3 * CANTIDAD
68
;
2
Como se ve, ingresar una Iormula como esta es tedioso y propenso a errores. En un caso mas
realista, los vendedores podrian ser miles, y el modelado con variables escalares se vuelve muy
problematico.
Con una notacion matematica, se podria expresar esta ecuacion de esta Iorma:
Minimizar _
ij
( COSTE
ij
` CANTIDAD
ij
)
donde la variable CANTIDADij indica la cantidad de mercaderia enviada desde el deposito i hacia
el vendedor j, y la variable COSTEij indica el coste de envio por unidad.
En otras palabras, el objetivo es minimizar la suma de los costes de envio por unidad por la cantidad
de mercaderia enviada por todos los caminos entre los depositos y los vendedores.
Definicin de los Conjuntos
LINGO permite deIinir conjuntos de objetos relacionados en la "seccion de conjuntos" (!"#!$
!"%#&'().
Esta seccion comienza con la palabra clave SETS:
y termina con ENDSETS.
En el caso del modelo de Mega Transporte, vamos a construir 3 conjuntos,
los 2 conjuntos principales:
1. Depositos
2. Vendedores
y un conjunto derivado:
3. Arcos de envio desde cada deposito a cada vendedor
Tenemos 6 depositos DP1, DP2, DP3, DP4, DP5 y DP6,
y 8 vendedores V2, V3, V4, V5, V6, V7 y V8.
Cada deposito puede proveer una cantidad de materiales que no puede ser excedida (tiene una
capacidad) y cada vendedor tiene una demanda que debe ser satisIecha.
Se puede deIinir los conjuntos del problema, escribiendo en LINGO:
SETS:
DEPOSITOS / DP1 DP2 DP3 DP4 DP5 DP6/: CAPACIDAD;
VENDEDORES / V1 V2 V3 V4 V5 V6 V7 V8/: DEMANDA;
ARCOS_ENVIO( DEPOSITOS, VENDEDORES) : COSTE, CANTIDAD;
ENDSETS
3
La segunda linea dice que el conjunto DEPOSITOS tiene los elementos DP1, DP2, DP3, DP4, DP5
y DP6, cada uno con un atributo llamado CAPACIDAD.
Los vendedores se deIinen en la tercera linea, cada uno con un atributo llamado DEMANDA.
El ultimo conjunto, titulado ARCOSENVIO representa los 48 caminos entre los depositos y los
vendedores. Cada camino tiene los atributos COSTE y CANTIDAD asociados. La sintaxis para
deIinir este conjunto, diIiere de las dos anteriores.
EspeciIicando ARCOSENVIO(DEPOSITOS, VENDEDORES) estamos diciendo a LINGO que el
conjunto ARCOSENVIO deriva de DEPOSITOS y VENDEDORES.
En este caso, LINGO genera cada par ordenado de (depositos, vendedores) y cada uno de estos 48
pares ordenados es un elemento del conjunto ARCOSENVIO.
La funcin objetivo en LINGO
Vamos a expresar la Iuncion objetivo
Minimizar _
ij
( COSTE
ij
` CANTIDAD
ij
) en el lenguaje de LINGO:
a) La suma _
( ) se puede expresar en LINGO como SUM( )
b) Los subindices ij se reIieren a los ij elementos del conjunto ARCOSENVIO.
Entonces la sentencia de LINGO equivalente a _
ij
( ) es SUM(ARCOS_ENVIO(I,1) : )
c) La sentencia de LINGO para la Iuncion objetivo es
MIN SUM(ARCOS_ENVIO(I,1): COSTE(I,1) ` CANTIDAD(I,1));
.
Restricciones
El siguiente paso es Iormular las restricciones. Hay dos conjuntos de restricciones en este modelo:
a) El primero garantiza que cada vendedor recibe el numero de unidades requerida
(restricciones de demanda).
b) El segundo conjunto de restricciones asegura que cada deposito no envia mas de lo que tiene
(restricciones de capacidad).
Comenzando con las restricciones de demanda del Vendedor 1, necesitamos sumar los envios de
todos los i depositos hacia el Vendedor 1 e igualarlo a la demanda del Vendedor 1:
_
i
(CANTIDAD
i1
) DEMANDA
1
Ademas de otras 7 restricciones de demanda, para cubrir a los 8 vendedores.
Con una notacion matematica, se podria expresar todas las restricciones de esta Iorma:
For
jnmero de vendedor
_
i
(CANTIDAD
ij
) DEMANDAj }
SigniIica: para todos los vendedores, la suma de la CANTIDAD enviada desde cada uno de los
4
depositos a ese vendedor debe ser igual a la demanda correspondiente del vendedor.
En LINGO la sentencia correspondiente queda asi:
FOR( VENDEDORES( 1):
SUM( DEPOSITOS( I): CANTIDAD( I, 1))
DEMANDA( 1));
Esta sentencia reemplaza a las 8 restricciones de demanda. Notese la gran similitud con la notacion
matematica.
De manera analoga pueden expresarse las restricciones de capacidad:
FOR( DEPOSITOS( I):
SUM( VENDEDORES( 1): CANTIDAD( I, 1) )<
CAPACIDAD( I));
Equivale a: para cada miembro del conjunto DEPOSITOS, la suma del CANTIDAD enviado a cada
vendedor desde ese deposito, debe ser menor o igual a la capacidad del deposito.
El modelo completo
MODEL:
MIN SUM( ARCOS_ENVIO( I, 1):
COST( I, 1) ` CANTIDAD( I, 1));
FOR( VENDEDORES( 1):
R_demanda] SUM( DEPOSITOS( I): CANTIDAD( I, 1))
DEMANDA( 1));
FOR( DEPOSITOS( I):
R_capacidad] SUM( VENDEDORES( 1): CANTIDAD( I, 1)) <
CAPACIDAD( I));
END
5
!"#$%&'()%()*+'&
LINGO permite al usuario aislar los datos en una seccion separada del modelo. Con los datos
independientes del modelo, es mucho mas Iacil hacer cambios, y hay menos oportunidad de
cometer errores.
La seccion de datos comienza con la sentencia ,-.-/ y Iinaliza con 01,,-.-.
En el ejemplo de Mega Transporte, tenemos la siguiente seccion de datos:
,-.-/
(((2-3-2!,-,(4(56(77(78(9:(98(7;<
(((,0=-1,-(4(:7(:>(;;(:;(98(:;(9:(:?<
(((2@A.0(4(5(;(5(>(9(;(7(B
((((((((((9(B(7(:(?(7(?(;
((((((((((7(;(8(B(>(9(:(:
((((((((((>(5(>(:(B(;(>(8
((((((((((;(:(B(7(>(;(5(7
((((((((((7(7(;(;(?(8(9(:<
01,,-.-
Observe que: los atributos CAPACIDAD del conjunto DEPOSITOS y DEMANDA de
VENDEDORES se inicializan de Iorma directa.
El atributo COSTE del conjunto bidimensional ARCOSENVIO es un poco mas oscuro. Cuando
LINGO inicializa una matriz multidimensional, incrementa el indice exterior mas rapidamente, en
este caso COSTE(DP1, V1) se inicializa primero, seguido de COSTE(DP1, V2) hasta COSTE(DP1,
V8). Despues se inicializara COSTE(DP2, V1), y asi sucesivamente.
6
Poniendo juntas las secciones de datos, de conjuntos, la Iuncion objetivo y las restricciones, el
modelo queda como sigue:
MODEL:
! Un problema de transporte con 6 depsitos y 8 vendedores ;
SETS:
DEPOSITOS/ DP1 DP2 DP3 DP4 DP5 DP6/: CAPACIDAD;
VENDEDORES/ V1 V2 V3 V4 V5 V6 V7 V8/: DEMANDA;
ARCOS_ENVIO (DEPOSITOS, VENDEDORES):COSTE, CANTIDAD;
ENDSETS
!El objetivo;
Objetivo] MIN SUM( ARCOS_ENVIO( I, 1):
COSTE( I, 1) ` CANTIDAD( I, 1));
!Restriccin de demanda;
FOR( VENDEDORES( 1):
[R_demanda]! SUM( DEPOSITOS( I): CANTIDAD( I, 1))
DEMANDA( 1));
!Restriccin de capacidad;
FOR( DEPOSITOS( I):
[R_capacidad]!SUM( VENDEDORES( 1): CANTIDAD( I, 1)) <
CAPACIDAD( I));
!Los datos;
DATA:
CAPACIDAD 60 55 51 43 41 52;
DEMANDA 35 37 22 32 41 32 43 38;
COSTE 6 2 6 7 4 2 5 9
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3 ;
ENDDATA
END
7
!"#$%&%&'()
Escribir el modelo completo en el archivo LINGO del ejercicio 1.
Nota: los nombres de las restricciones de demanda y de capacidad se debe poner entre el bucle
FOR y antes de la suma SUM!
(Hay un nombre para cada indice i del FOR y para cada restriccion)
!"#$%&%&'(*
Resolver el modelo usando LINGO para determinar la cantidad optima de material para enviar
desde cada deposito hacia cada vendedor.
a) Cual es el coste optimo de envios? !""#$%&'()*
b) Cuanto material se debe enviar cada deposito hacia cada vendedor en el caso optimo?
c) Cuales son las restricciones activas en el modelo?
+(,-%./'%$011"$2$34'54$
64789:;-947-
8
Optimitzaci Curs 2006/2007
Assignatura d`Estadstica, UAB
LINGO - Parte 3
Anlisis de sensibilidad con LINGO
Ejemplo
Una carpinteria industrial produce tablas de madera de cuatro tamaos: pequeas, medianas,
gruesas y extra-gruesas. Dichas tablas se pueden Iabricar en cualquiera de los tres tipos siguientes
de maquina: basica, normal y especial. Las capacidades de procesamiento de cada maquina (en
terminos de centimetros de tabla por hora) son las que Iiguran en la tabla siguiente:
Mquina
Tabla Bsica Normal Especial
Pequea 350 650 850
Mediana 300 450 750
Gruesa 250 400 650
Extra-gruesa 150 250 350
Cada maquina se puede usar hasta 300 horas por mes.
Los costes de procesamiento por hora, para cada tipo de maquina, son de 25, 40 y 60 euros
respectivamente.
Mensualmente se requieren 12000, 9000, 8000 y 8000 centimetros de los distintos tamaos de las
tablas.
Cuanto tiempo se debe usar cada maquina (mensualmente) para producir cada uno de los 4 tipos de
tablas en el plan optimo que minimice los costes de produccion?
Hay cuatro tipos de tablas (T1, T2, T3, T4) y tres maquinas (M1, M2, M3).
Para cada tipo de tabla i hay una demanda (en centimetros) DEMANDAi.
Para cada maquina j hay un coste por hora (en euros) COSTEj.
Para producir una tabla de tipo i en la maquina j:
-las horas necesarias son HORASij
-hay una capacidad de procesamiento por hora, PRODUCCIONij
El objetivo es:
Minimizar _
j
COSTEj ` (horas total en la mquina j ) ]
El tiempo total en la maquina j es _
i
( HORAS ij ), entonces el objetivo es:
Minimizar _
j
COSTEj ` _
i
( HORAS ij ) ]
1
La primera restriccion es la de demanda: la produccion total para cada tipo de tabla no se puede se
mayor que la demanda para este tipo de tabla:
Para cada tipo de tabla (i): _
j
( PRODUCCIONij ` HORASij )>DEMANDAi ]
La segunda restriccion es la restriccion de horas disponibles en cada maquina:
Para cada tipo de mquina (j): _
i
( HORAS ij ) < 300 ]
Para expresar este problema en el lenguaje del LINGO:
Primero deIinimos los SETS (conjuntos) de problema,
es decir los conjuntos primarios
TABLAS/ T1 T2 T3 T4 /: DEMANDA;
MAQUINAS/ M1 M2 M3 /: COSTE;
y el conjunto derivado
ENLACE (TABLAS, MAQUINAS):PRODUCCION, HORAS;
El objetivo es
|objetivo| MIN SUM( MAQUINAS(J):COSTE(J)*
SUM(TABLAS(I):HORAS(I, J)) );
Las restricciones son:
1. Restriccion de demanda;
FOR( TABLAS( I):
|Rdemanda| SUM( MAQUINAS( J): PRODUCCION( I, J) * HORAS(I, J) ) ~
DEMANDA( I));
2. Restriccion de tiempo disponible
FOR( MAQUINAS( J):
|Rhoras| SUM( TABLAS( I): HORAS( I, J)) 300);
Ejercicio 1
Crear un archivo LINGO y escribir el programa anterior.
No olvidar ingresar los datos del problema.
2
MODEL:
TITLE LINGO3_EJEMPLO;
SETS:
TABLAS/ T1 T2 T3 T4 /: DEMANDA;
MAQUINAS/ M1 M2 M3 /: COSTE;
ENLACE (TABLAS, MAQUINAS):PRODUCCION, HORAS;
ENDSETS
!El objetivo;
[Objetivo] MIN = @SUM( MAQUINAS(J):COSTE(J)*
@SUM(TABLAS(I):HORAS(I,J)) );
!Restriccion de demanda;
@FOR( TABLAS( I):
[R_demanda] @SUM( MAQUINAS( J): PRODUCCION( I, J) * HORAS(I,J) ) >=
DEMANDA( I));
!Restriccion de capacidad;
@FOR( MAQUINAS( J):
[R_horas] @SUM( TABLAS( I): HORAS( I, J)) <= 300);
!Los datos;
DATA:
DEMANDA = 12000 9000 8000 8000;
COSTE = 25 40 60 ;
PRODUCCION = 350 650 850
300 450 750
250 400 650
150 250 350 ;
ENDDATA
END
Observar, en el programa anterior, la linea
TITLE LINGO3_EJEMPLO;'
que asigna un ttulo a nuestro modelo y se pone despus de la lnea `MODEL:'.
Si queremos asegurar que hemos ingresado las ecuaciones (objetivo-restricciones) del problema
correctamente, LINGO puede crear un inIorme en que se puede ver todas las ecuaciones en una
Iorma expandida.
Por ejemplo, en el programa anterior, se puede seleccionar LINGO -~ GENERATE.
Aparece el dialogo
3
Seleccionando ALGEBRAIC`, LINGO nos da el inIorme siguiente:
MIN 60 HORAS( T4, M3) 40 HORAS( T4, M2) 25 HORAS( T4, M1)
60 HORAS( T3, M3) 40 HORAS( T3, M2) 25 HORAS( T3, M1)
60 HORAS( T2, M3) 40 HORAS( T2, M2) 25 HORAS( T2, M1)
60 HORAS( T1, M3) 40 HORAS( T1, M2) 25 HORAS( T1, M1)
SUBJECT TO
RDEMANDA( T1)| 850 HORAS( T1, M3) 650 HORAS( T1, M2)
350 HORAS( T1, M1) ~ 12000
RDEMANDA( T2)| 750 HORAS( T2, M3) 450 HORAS( T2, M2)
300 HORAS( T2, M1) ~ 9000
RDEMANDA( T3)| 650 HORAS( T3, M3) 400 HORAS( T3, M2)
250 HORAS( T3, M1) ~ 8000
RDEMANDA( T4)| 350 HORAS( T4, M3) 250 HORAS( T4, M2)
150 HORAS( T4, M1) ~ 8000
RHORAS( M1)| HORAS( T4, M1) HORAS( T3, M1) HORAS( T2, M1)
HORAS( T1, M1) 300
RHORAS( M2)| HORAS( T4, M2) HORAS( T3, M2) HORAS( T2, M2)
HORAS( T1, M2) 300
RHORAS( M3)| HORAS( T4, M3) HORAS( T3, M3) HORAS( T2, M3)
HORAS( T1, M3) 300
END
El inIorme anterior contiene todas las ecuaciones de nuestro modelo en Iorma expandida.
De misma manera, seleccionando LINDO`, LINGO nos devuelve nuestro programa escrito en el
lenguaje del LINDO.
!"#$%&%&'()
Resolver el problema con LINGO.
a) Cual es el coste de produccion minimo? !"#$%&'(")*+,-./
b) Cual es el tiempo total (en horas) en cada maquina en el optimo? !01234)0()56,-7)834)0")
56,-7)(#&"/
*+,-'(.*+,-#/(0(+,12&3&3(4#(3#,3&5&2&4+4
El comando rango (LINGO -~ RANGE) se utiliza para generar un inIorme de rango para el modelo
de la ventana activa.
El inIorme de rango muestra sobre que rangos se puede:
1) cambiar un coeIiciente en la Iuncion objetivo sin causar un cambio en alguno de los valores
optimos de las variables de decision, o
2) cambiar una constante de una restriccion (coeIiciente del segundo miembro) sin provocar un
cambio en los valores optimos de los precios duales o costos reducidos.
4
Por ejemplo, seleccionando RANGE en nuestro ejemplo, aparece la ventana son los datos
siguientes:
Ranges in which the basis is unchanged:
Objective Coefficient Ranges
Current Allowable Allowable
Variable Coefficient Increase Decrease
HORAS( T1, M1) 25.00000 INFINITY 3.461538
HORAS( T1, M2) 40.00000 5.882353 40.00000
HORAS( T1, M3) 60.00000 INFINITY 7.692308
HORAS( T2, M1) 25.00000 INFINITY 1.000001
HORAS( T2, M2) 40.00000 INFINITY 4.000001
HORAS( T2, M3) 60.00000 2.500001 60.00000
HORAS( T3, M1) 25.00000 INFINITY 1.923076
HORAS( T3, M2) 40.00000 INFINITY 3.076922
HORAS( T3, M3) 60.00000 4.999999 60.00000
HORAS( T4, M1) 25.00000 INFINITY 1.000001
HORAS( T4, M2) 40.00000 1.666667 40.00000
HORAS( T4, M3) 60.00000 INFINITY 4.000001
Righthand Side Ranges
Row Current Allowable Allowable
RHS Increase Decrease
R_DEMANDA( T1) 12000.00 162200.0 12000.00
R_DEMANDA( T2) 9000.000 206769.2 9000.000
R_DEMANDA( T3) 8000.000 179200.0 8000.000
R_DEMANDA( T4) 8000.000 62384.61 8000.000
R_HORAS( M1) 300.0000 INFINITY 300.0000
R_HORAS( M2) 300.0000 INFINITY 249.5385
R_HORAS( M3) 300.0000 INFINITY 275.6923
La primera seccion del inIorme se titula Rangos de CoeIicientes Objetivos (Objective
Coefficient Ranges).
En la primera columna, titulada Variable, se listan por su nombre todas las variables a optimizar. La
siguiente columna, titulada Current CoeIIicient (CoeIiciente actual) muestra el coeIiciente actual de
la variable en la Iuncion objetivo.
La columna Allowable Increase (Incremento permitido) nos dice el monto en que podriamos
incrementar el coeIiciente en la Iuncion objetivo sin cambiar los valores optimos de las variables.
La ultima columna, Allowable Decrease (Decremento permitido) muestra el monto en que
podriamos disminuir el coeIiciente en la Iuncion objetivo sin que cambien los valores optimos en
las variables.
La informacion de los incrementos v decrementos permitidos de los coeficientes de la funcion
obfetivo es util para responder a las preguntas como. "Cuanto mas (menos) provechoso puede ser
esta actividad antes de que estemos dispuestos a hacer mas (menos) de esto?"
Nota: Los rangos son validos si se quiere cambiar !"#$%&%#'%()*'*("+( de la Iuncion objetivo o del
segundo miembro de alguna restriccion.
5
La segunda seccion del inIorme de rango se titula Rangos del Lado Derecho (Righthand Side
Ranges).
La primera columna, Row (Iila), muestra los nombres de todas las Iilas a optimizar, o restricciones
del modelo.
La segunda columna, Current RHS (RHS Actual) dice el termino constante, o segundo miembro
(miembro del lado derecho) de la restriccion.
Las dos columnas siguientes, Allowable Increase y Alolowable Decrease, nos dice cuanto podemos
incrementar o disminuir el coeIiciente correspondiente a la restriccion, sin aIectar a los valores de
los precios duales o costos reducidos.
Nota: Cada restriccion en el modelo del ejemplo esta precedida por un nombre encerrado entre
corchetes. Esta es una practica importante si se quiere generar inIormes de rango. Si no se le ponen
nombres a las restricciones, LINGO les asigna un numero de Iila que utiliza internamente como
indice. Este indice interno no correspondera siempre con el orden de la restriccion en el modelo
original.
Entonces es conveniente nombrar las restricciones para hacer mas entendible el inIorme de rango.
!"#$%&%&'()
Hacer un analisis de sensibilidad para el problema anterior.
a) Que cambiaria en el valor del coste optimo si los costes de procesamiento por hora para la
maquina 1 incrementarian a 35 euros? (Allowable increase de HORAS(T1,M1),
HORAS(T2,M1) v HORAS(T3,M1) INFINITY)
b) Que pasaria si los centimetros requeridos mensualmente del tamao mediano serian 7000?
(Allowable decrease de RDEMANDA(T2) 9000)
.
Noviembre 2006 Maria
Zakvnthinaki
6
Optimitzaci Curs 2006/2007
Assignatura d`Estadstica, UAB
LINGO - Parte 4
Uso de funciones de dominio de variables en LINGO
A menos que se especiIique lo contrario, las variables en un modelo de LINGO son continuas y no
negativas. Mas especiIicamente las variables pueden asumir cualquier valor real desde el cero hasta
el inIinito.
Pero en muchos casos este dominio para una variable puede ser inapropiado. Por ejemplo puede
necesitarse que una variable asuma valores negativos, o solamente valores enteros. LINGO esta
provisto de cuatro Iunciones de dominio de variables que permiten sobrepasar el dominio por
omision de una variable:
GIN Limita la variable solo a valores enteros
BIN Hace una variable binaria (0 o 1)
FREE Permite que la variable tome cualquier
valor real (positivo o negativo)
BND Limita la variable para que se ajuste a un
rango Iinito
Ejemplos de uso de variables enteras:
GIN(X); TransIorma la variable escalar X en entera
FOR(MESES(I): GIN(DIAS(I))); TransIorma todas las variables del atributo DIAS (del
conjunto MESES) en enteras
Ejemplos de uso de variables binarias:
BIN(X); TransIorma la variable escalar X en binaria
FOR(MENU(I): BIN(PLATO(I))); TransIorma todas las variables del atributo PLATO (del
conjunto MENU) en binarias
Ejemplos de uso de variables libres:
FREE(X); TransIorma la variable escalar X en libre
FOR(LISTA(I): FREE(NUMERO(I))); TransIorma todas las variables del atributo NUMERO
(del conjunto LISTA) en libres
1
Ejemplos de uso de variables con lmites:
BND(-1, X, 1); Restringe la variable X al intervalo |-1, 1|
FOR(LISTA(I): BND( 10, Q(I), 20)); Fija los limites de todas las variables del atributo Q en
10 y 20
FOR(LISTA(I): BND(QL, Q(I), QU)); Fija los limites de todas las variables del atributo Q en
QL y QU
(A QL y QU deben habersele asignado valores en la
seccion de datos)
Ejercicio:
Cierta multinacional del sector electronico posee cuatro Iactorias ubicadas en Atenas, FrankIurt,
Eindhoven y Turin, donde se Iabrica un determinado tipo de circuito integrado que luego es
suministrado a cuatro centros de montaje situados en Madrid, Barcelona, Bilbao y Las Palmas. La
gerencia de la empresa esta interesada en determinar como de debe planiIicar la produccion de
modo que el beneIicio obtenido sea maximo.
Para ello cuenta con la siguiente inIormacion, proporcionada por los departamento de produccion y
de ventas, recogida en las tablas siguientes:
Tabla 1: Costes unitarios de envio en euros desde las Iactorias a los puntos de distribucion
Madrid Barcelona Bilbao Las Palmas
Atenas 13 15 8 67
Frankfurt 25 22 16 73
Eindhoven 20 31 14 70
Turn 25 46 39 62
Tabla 2: Costes de produccion unitarios (en euros) y cuotas de produccion (en miles) de las distintas
Iactorias
Atenas Frankfur
t
Eindhoven Turn
Cuota 50 60 30 20
Coste unitario 13 8 11 17
Tabla 3. Demandas previstas (en miles) y precios unitarios de venta (en euros)
Madrid Barcelona Bilbao Las Palmas
Demanda 50 45 30 35
Precio unitario de venta 75 80 70 85
Cual es el plan optimo de la empresa para obtener el maximo beneIicio?
2
Para resolver este problema usando el LINGO deIinimos dos conjuntos principales,
los conjuntos !"#$%& (4 elementos) y '%()#&! (4 elementos).
El conjunto !"#$%& tiene el atributo !*%")+ y el conjunto '%()#&! tiene el atributo
'%,+&'+.
El problema es encontrar el numero optimo de unidades que se deben enviar desde cada !"#$%&-
hacia cada '%()#&!.
DeIinimos, entonces, el conjunto derivado %&/+0%- 1!"#$%&2 - '%()#&!3 que tiene como
atributo las variables del problema, 4&#'+'%(.
El conjunto derivado ENLACE (ORIGEN, DESTINO) tiene tambien el atributo
$+&+&0#+54&#)+"#+, que se reIiere a la ganancia neta para cada UNIDAD enviada.
La ganancia neta unitaria para cada envio se calcula como:
1$+&+&0#+-&%)+-4&#)+"#+3-6-
17"%0#!-4&#)+"#!-'%-8%&)+3-9-
:10!()%-4&#)+"#!3-9-
:10!()%-4&#)+"#!-'%-%&8#!3
*;<=>?<-!@ABC>DEF
Si el indice > se reIiere a los elementos del conjunto !"#$%& y el indice A se reIiere a los
elementos del conjunto '%()#&!, entonces:
El objetivo es maximizar la ganancia neta total, es decir
Maximizar G
>A-
1-$+&+&0#+54&#)+"#+
>A
-H-4&#'+'%(
>A-
)
"BICJ>==>E<BIF
Tenemos las dos restricciones siguientes,
1. restriccion de oIerta:
Para cada ORIGEN >2 G
A-
1-4&#'+'%(
>A-
) !*%")+>
2. restriccion de demanda:
Para cada DESTINO A2 G
>-
1-4&#'+'%(
>A-
) '%,+&'+A
Ademas queremos que las variables 4&#'+'%(>A son variables enteras (de tipo $#&).
%ABJ=>=>E-KF
Escribir el problema anterior en LINGO y ingresar los datos del problema.
Ojo!
(GANANCIA NETA UNITARIA)
(PRECIO UNITARIO DE VENTA)
-(COSTE UNITARIO)
-(COSTE UNITARIO DE ENVIO)
Entonces los datos para la variable ganancia son:
GANANCIA 49 52 49 5 0
42 50 46 4 0
44 38 45 4 0
33 17 14 6 0;
3
MODEL:
SETS:
ORIGEN /AT FR EIND TU /: OFERTA;
DESTINO/MAD BCN BIL LP/: DEMANDA;
ENLACE(ORIGEN, DESTINO): GANANCIA_UNITARIA, UNIDADES;
ENDSETS
DATA:
GANANCIA_UNITARIA= 49 52 49 5
42 50 46 4
44 38 45 4
33 17 14 6 ;
OFERTA= 50 60 30 20;
DEMANDA= 50 45 30 35 ;
ENDDATA
MAX=@SUM(ENLACE(I,J):GANANCIA_UNITARIA(I,J)*UNIDADES(I,J));
@FOR(DESTINO(J):@SUM(ORIGEN(I):UNIDADES(I,J) )=DEMANDA(J) );
@FOR(ORIGEN(I):@SUM(DESTINO(J):UNIDADES(I,J) )=OFERTA(I) );
@FOR(ENLACE(I,J):@GIN(UNIDADES(I,J) ));
END
!"#$%&%&'()*
a. Resolver el problema con el LINGO. Cual es la ganancia neta total en el optimo? (6245
euros)
b. Cual es el plan optimo de la empresa? (Atenas-Madrid.50, Frankfurt-Barcelona.45,
Frankfurt-Bilbao.15, Eindhoven-Bilbao.15, Eindhoven-Las Palmas. 15, Turin-Las
Palmas.20)
c. Cuales son las restricciones activas en el optimo? (todas)
Noviembre 2006 Maria
Zakvnthinaki
4