Você está na página 1de 8

Optimitzaci Assignatura dEstadstica, UAB

Curs 2006/2007

LINGO - Parte 2 Programacin en LINGO


Ejemplo 1: El problema del transporte La compaa Mega Transporte (MT) tiene 6 depsitos que proveen a 8 vendedores. Cada deposito puede proveer una cantidad de materiales que no puede ser excedida, y cada vendedor tiene una demanda que debe ser satisfecha. MT quiere determinar cunto material enviar de cada depsito a cada vendedor para minimizar el coste. Este es un problema clsico de optimizacin llamado el problema del transporte. El siguiente diagrama ilustra el problema:

Puesto que cada depsito puede enviar a cada vendedor, hay un total de 48 caminos o arcos de envo posibles, se necesitar 1 variable para cada uno de estos arcos que representen la cantidad enviada.

Estn disponibles los siguientes datos: Depsito (DP) 1 2 3 4 5 6 Vendedor (V) 1 2 3 4 5 6 7 8 Capacidad 60 55 51 43 41 52 Demanda 35 37 22 32 41 32 43 38

coste de envo por unidad (euros): DP1 DP2 DP3 DP4 DP5 DP6 La funcin objetivo El primer paso para plantear el modelo ser construir la funcin objetivo. MT quiere minimizar el total de los costes de envo. Haremos que la variable CANTIDADij indique la cantidad de mercadera enviada desde el depsito i hacia el vendedor j. Entonces, si tuviramos que escribir la funcin objetivo usando variables escalares tendramos: MIN = 6 *CANTIDAD11 + 2 * CANTIDAD12 + 6 * CANTIDAD13 + 7 * CANTIDAD14 + 4 * CANTIDAD15 + V1 6 4 5 7 2 5 V2 2 9 2 6 3 5 V3 6 5 1 7 9 2 V4 7 3 9 3 5 2 V5 4 8 7 9 7 8 V6 2 5 4 2 2 1 V7 5 8 3 7 6 4 V8 9 2 3 1 5 3

. . .
8 * CANTIDAD65 + CANTIDAD66 + 4 * CANTIDAD67 + 3 * CANTIDAD68 ; 2

Como se ve, ingresar una frmula como esta es tedioso y propenso a errores. En un caso mas realista, los vendedores podran ser miles, y el modelado con variables escalares se vuelve muy problemtico. Con una notacin matemtica, se podra expresar esta ecuacin de esta forma: Minimizar ij ( COSTEij * CANTIDADij ) donde la variable CANTIDADij indica la cantidad de mercadera enviada desde el depsito i hacia el vendedor j, y la variable COSTEij indica el coste de envo por unidad. En otras palabras, el objetivo es minimizar la suma de los costes de envo por unidad por la cantidad de mercadera enviada por todos los caminos entre los depsitos y los vendedores.

Definicin de los Conjuntos LINGO permite definir conjuntos de objetos relacionados en la "seccin de conjuntos" (sets section). Esta seccin 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. Depsitos 2. Vendedores y un conjunto derivado: 3. Arcos de envo desde cada depsito a cada vendedor Tenemos 6 depsitos 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 satisfecha. Se puede definir 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

La segunda lnea 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 definen en la tercera lnea, cada uno con un atributo llamado DEMANDA. El ltimo conjunto, titulado ARCOS_ENVIO representa los 48 caminos entre los depsitos y los vendedores. Cada camino tiene los atributos COSTE y CANTIDAD asociados. La sintaxis para definir este conjunto, difiere de las dos anteriores. Especificando ARCOS_ENVIO(DEPOSITOS, VENDEDORES) estamos diciendo a LINGO que el conjunto ARCOS_ENVIO deriva de DEPOSITOS y VENDEDORES. En este caso, LINGO genera cada par ordenado de (depsitos, vendedores) y cada uno de estos 48 pares ordenados es un elemento del conjunto ARCOS_ENVIO. La funcin objetivo en LINGO Vamos a expresar la funcin objetivo Minimizar ij ( COSTEij * CANTIDADij ) en el lenguaje de LINGO: a) La suma ( ) se puede expresar en LINGO como @SUM( ) b) Los subndices ij se refieren a los ij elementos del conjunto ARCOS_ENVIO. Entonces la sentencia de LINGO equivalente a ij ( ) es SUM(ARCOS_ENVIO(I,J) : ) c) La sentencia de LINGO para la funcin objetivo es MIN = @SUM(ARCOS_ENVIO(I,J): COSTE(I,J) * CANTIDAD(I,J)); . Restricciones El siguiente paso es formular las restricciones. Hay dos conjuntos de restricciones en este modelo: a) El primero garantiza que cada vendedor recibe el nmero de unidades requerida (restricciones de demanda). b) El segundo conjunto de restricciones asegura que cada depsito no enva mas de lo que tiene (restricciones de capacidad). Comenzando con las restricciones de demanda del Vendedor 1, necesitamos sumar los envos de todos los i depsitos hacia el Vendedor 1 e igualarlo a la demanda del Vendedor 1:

i (CANTIDADi1 ) = DEMANDA1
Adems de otras 7 restricciones de demanda, para cubrir a los 8 vendedores. Con una notacin matemtica, se podra expresar todas las restricciones de esta forma:

For j=nmero de vendedor { i (CANTIDADij ) = DEMANDAj

Significa: para todos los vendedores, la suma de la CANTIDAD enviada desde cada uno de los 4

depsitos a ese vendedor debe ser igual a la demanda correspondiente del vendedor. En LINGO la sentencia correspondiente queda as: @FOR( VENDEDORES( J): @SUM( DEPOSITOS( I): CANTIDAD( I, J)) = DEMANDA( J)); Esta sentencia reemplaza a las 8 restricciones de demanda. Ntese la gran similitud con la notacin matemtica.

De manera anloga pueden expresarse las restricciones de capacidad: @FOR( DEPOSITOS( I): @SUM( VENDEDORES( J): CANTIDAD( I, J) )<= CAPACIDAD( I)); Equivale a: para cada miembro del conjunto DEPOSITOS, la suma del CANTIDAD enviado a cada vendedor desde ese depsito, debe ser menor o igual a la capacidad del depsito.

El modelo completo MODEL: MIN = @SUM( ARCOS_ENVIO( I, J): COST( I, J) * CANTIDAD( I, J)); @FOR( VENDEDORES( J): [R_demanda] @SUM( DEPOSITOS( I): CANTIDAD( I, J)) = DEMANDA( J)); @FOR( DEPOSITOS( I): [R_capacidad] @SUM( VENDEDORES( J): CANTIDAD( I, J)) <= CAPACIDAD( I)); END

Ingreso de datos LINGO permite al usuario aislar los datos en una seccin separada del modelo. Con los datos independientes del modelo, es mucho mas fcil hacer cambios, y hay menos oportunidad de cometer errores. La seccin de datos comienza con la sentencia DATA: y finaliza con ENDDATA. En el ejemplo de Mega Transporte, tenemos la siguiente seccin de 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 49538582 52197433 76739271 23957265 5 5 2 2 8 1 4 3; ENDDATA Observe que: los atributos CAPACIDAD del conjunto DEPOSITOS y DEMANDA de VENDEDORES se inicializan de forma directa. El atributo COSTE del conjunto bidimensional ARCOS_ENVIO es un poco mas oscuro. Cuando LINGO inicializa una matriz multidimensional, incrementa el ndice exterior mas rpidamente, en este caso COSTE(DP1, V1) se inicializa primero, seguido de COSTE(DP1, V2) hasta COSTE(DP1, V8). Despus se inicializar COSTE(DP2, V1), y as sucesivamente.

Poniendo juntas las secciones de datos, de conjuntos, la funcin 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, J): COSTE( I, J) * CANTIDAD( I, J)); !Restriccin de demanda; @FOR( VENDEDORES( J): [ [R_demanda] @SUM( DEPOSITOS( I): CANTIDAD( I, J)) = DEMANDA( J)); !Restriccin de capacidad; @FOR( DEPOSITOS( I): [R_capacidad] @SUM( VENDEDORES( J): CANTIDAD( I, J)) <= 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 49538582 52197433 76739271 23957265 55228143; ENDDATA END

Ejercicio 1 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 ndice i del FOR y para cada restriccin)

Ejercicio 2 Resolver el modelo usando LINGO para determinar la cantidad ptima de material para enviar desde cada depsito hacia cada vendedor. a) Cul es el coste ptimo de envos? (664 euros) b) Cunto material se debe enviar cada depsito hacia cada vendedor en el caso ptimo? c) Cules son las restricciones activas en el modelo?

Noviembre 2006 Mara Zakynthinaki

Você também pode gostar