Vous êtes sur la page 1sur 50

Universidad Nacional Mayor de San Marcos

Facultad de Ingeniera Industrial Investigacin Operativa I

Tutorial SOFTWARE LINGO

LINGO Document

Qu es LINGO?
Investigacin Operativa I

LINGO (Linear, INteractive, and General Optimizer).


j Es una herramienta simple para utilizar la

optimizacin lineal, no-lineal y enteros.

j Permite formular problemas de gran

tamao en forma concisa.


j Permite resolverlos j Permite analizar los resultados

Creando un Modelo LINGO


Investigacin Operativa I

En general, un modelo de optimizacin consiste de 3 partes :


j Funcin Objetivo

Una sola frmula que describe exactamente que es lo que se desea optimizar.
j Variables

Cantidades que pueden ser cambiadas para producir el valor ptimo de la funcin objetivo
j Restricciones

Frmulas que definen los lmites de los valores de las variables

Con respecto a las sentencias:


Investigacin Operativa I Todas las sentencias deben terminar en un punto y coma. Para darle un nombre a la funcin objetivo o a las restricciones, estos se deben colocar entre corchetes. Para declarar la funcin objetivo debemos colocar las palabras reservadas MAX o MIN, (aparecern resaltadas en azul) seguidas del signo = . Los comentarios deben comenzar con un signo!, los cuales aparecen resaltados en verde. Al igual que las sentencias los comentarios finalizan con un punto y coma.

Una formulacin en LINGO, tiene tres secciones:


Investigacin Operativa I

Seccin de conjuntos, SETS, que especifica los conjuntos y sus atributos Seccin de datos, DATA, que proporciona los datos a usar o indica donde obtenerlos Seccin del modelo, MODEL, lugar donde se describe el modelo matemtico.

SECCION DE CONJUNTOS
Investigacin Operativa I
Cada conjunto tiene la sintaxis siguiente: NOMBRE/ LOS MIEMBROS/: LOS ATRIBUTOS; SETS: FABRICAS /F1, F2/: CAPACIDAD; CENTROS /C1, C2, C3/: DEMANDA; RUTAS (FBRICAS, CENTROS): C, X; ENDSETS Los conjuntos, FABRICAS y CENTROS se denominan conjuntos primitivos y el ltimo se denomina conjunto derivado, donde C y X representan, respectivamente, los costos unitarios de transporte y cantidad transportada de las fabricas a los centros.

SECCION DE DATOS
Investigacin Operativa I Los valores de los atributos de los elementos de los conjuntos, tienen la sintaxis siguiente: DATA: CAPACIDAD = 30, 20; DEMANDA = 10, 25, 15; C = 2, 4, 6, 7, 10, 1; ENDDATA

SECCION DEL MODELO


Investigacin Operativa I
Para presentar el modelo se utiliza dos funciones @SUM y @FOR. @SUM calcula la suma de una expresin sobre todos los miembros del conjunto. La forma general es: @SUM (set: expresin) Suma la expresin que sigue a los dos puntos. Por ejemplo: @SUM (RUTAS: C*X) Suma la expresin que sigue a los dos puntos que corresponde al producto del costo unitario de transporte por la cantidad transportada de cada origen a cada destino considerado. La segunda funcin es @FOR, esta funcin sirve para generar restricciones sobre los miembros de un conjunto. La forma general es: @FOR (set: restriccin) Por ejemplo: @FOR (CENTROS (J): @SUM (FABRICAS(I):X(I,J))<=CAPACIDAD(I)); Indica que se genere la restriccin que sigue a los dos puntos para cada miembro del conjunto que les precede. Cada elemento del conjunto CENTROS (J) para J = 1, 2,3 se genera las restricciones siguientes: J = 1: X11 + X21 >= 10 J = 2: X12 + X22 >= 25 J=3 X13 + X23 >= 15

UN EJEMPLO
Investigacin Operativa I Una empresa fabrica tres productos 1,2 y 3. Cada producto requiere tiempos de produccin en tres departamentos como se ilustra en la siguiente tabla :

Prod. 1 2 3 Hrs. Total

Depart. 1

Depart. 2

Depart. 3

Benef.

3 hrs./unid. 2 hrs./unid. 1 hr./unid. $ 2 4 hrs./unid. 1 hr./unid. 2 hrs./unid. 2 hr./unid. 600 horas 400 horas 3 hr./unid. $ 4 3 hr./unid. $ 2.5 300 horas

Modelo
Investigacin Operativa I

Max 2 x1  4 x2  2.5 x3 s.a 3 x1  4 x2  2 x3 e 600 2 x1  x2  2 x3 e 400 x1  3 x2  3 x3 e 300 x1 , x2 , x3 u 0

Modelo LINGO
Investigacin Operativa I
Cada Lnea en LINGO debe terminarse con un punto y coma ; . Tu modelo no se resolver sin ellos.

LINGO Document

Investigacin Operativa I

Ya que los computadores no tienen el smbolo e, LINGO Adopt la convencin de usar los caracteres <= para denotar e. Sin embargo, tu puedes entrar simplemente <. Lo mismo ocurre para >=, tu puedes entrar simplemente >.

Modelo LINGO

max ! 2 x1  4 x2  2.5 x3 ; 3 x1  4 x2  2 x3 2 x1  x2  2 x3 x1  3 x2  3 x3 600; 400; 300;

Modelo LINGO
Investigacin Operativa I
Tambin podemos incluir al modelo LINGO comentarios, de tal manera que mejore la legibilidad de ste.

LINGO Document

Sintaxis general de LINGO


Investigacin Operativa I

Una expresin puede ser escritas en muchas lneas, pero la expresin debe ser terminada por un punto y coma. Por ejemplo, podramos haber utilizado dos lneas para la funcin objetivo.
LINGO Document

j LINGO no diferencia entre letras maysculas

o minsculas. Por lo tanto, los siguientes nombres de variables podran ser equivalentes.
TURBO, Turbo, turbo

Sintaxis general de LINGO


Investigacin Operativa I

Cuando se le dan nombres a las variables en LINGO, todos los nombres deben comenzar con un caracter (A-Z). Los otros pueden ser alfabticos, numricos o el smbolo _. Los nombres pueden tener una longitud de 32 caracteres.

Resolviendo un modelo LINGO


Investigacin Operativa I

Una vez que el modelo ha sido entrado en la ventana modelo , ste puede ser resuelto mediante :
Un click en el botn solve Seleccionando solve del men LINGO Utilizando la tecla ctrl-s Si existen errores, stos sern informados
LINGO Document

Investigacin Operativa I

Si no se encontraron errores, la ventana del status del solver de LINGO aparece.


j Aparece

Ventana de Status del Solver LINGO

tambin el informe de la

solucin.

LINGO Document

Investigacin Operativa I

Una de las caractersticas ms poderosas de LINGO es su lenguaje de modelamiento matemtico.


j El lenguaje de modelamiento de LINGO

Utilizando el Lenguaje de Modelamiento

permite expresar tu problema de una manera natural que es muy similar a la notacin matemtica.

Investigacin Operativa I

Utilizando el Lenguaje de Modelamiento


Powerco tiene tres plantas de generacin de energa elctrica que suministran energa requerida a cuatro ciudades. Cada planta puede suministrar las siguientes cantidades de kilowatt-hora (kwh) de energa elctrica : la planta 1, 35 millones; la planta 2, 50 millones; la planta 3, 40 millones. Las demandas mximas de energa en estas ciudades, que se presentan al mismo momento (2 p.m.) son las siguientes (en kwh): la ciudad 1, 45 millones; la ciudad 2, 20 millones; la ciudad 3, 30 millones; la ciudad 4; 30 millones. Los costos para enviar 1 milln de kwh de energa de una planta a una ciudad depende de la distancia que la energa tiene que viajar. Formule un PL que minimice el costo para satisfacer la demanda mxima de energa de cada ciudad.

Utilizando el lenguaje de modelamiento


Investigacin Operativa I

P1 P2 P3

C1 (US$) 8 9 14

C2 (US$) 6 12 9 20

C3 (US$) 10 13 16 30

C4 (US$) 9 7 5 30

Oferta 35 50 40

Deman 45 da

Modelo
Investigacin Operativa I

min z ! s.a

c
ij

ij

xij

x
i

ij

e Oi u Dj

i ! 1,2,3 j ! 1,2,3,4 i,j

x
j

ij

xij u 0

Funcin Objetivo
min
Investigacin Operativa I
Lenguaje modelo LINGO MIN = @SUM(ARCOS(I,J) : C(I,J) * X(I,J));

c
ij

ij

xij

Notacin Matemtica min

ij

Sintaxis LINGO MIN =


@SUM(ARCOS(I,J) :

cij xij

C(I,J) X(I,J));

Las Restricciones de oferta

x
Investigacin Operativa I
j

ij

e Oi

i

@FOR(PLANTAS(I) : @SUM(CLIENTES(J):X(I,J)) <=O(I));

Notacin Matemtica

Sintaxis LINGO
@FOR(PLANTAS(I) :
@SUM(CLIENTES(J) :

i

xij Oi

X(I,J) O(I));

Las Restricciones de demanda

x
Investigacin Operativa I
i

ij

u Dj

j

@FOR(CLIENTES(J) : @SUM(PLANTAS(I):X(I,J)) >=D(J));

Notacin Matemtica

Sintaxis LINGO
@FOR(CLIENTES(J) : @SUM(PLANTAS(I) :

j

xij Dj

X(I,J) D(J));

EL MODELO LINGO ES
Investigacin Operativa I
MODEL : MIN = @SUM(ARCOS(I,J) : C(I,J) * X(I,J)); @FOR(PLANTAS(I) : @SUM(CLIENTES(J):X(I,J))<=O(I)); @FOR(CLIENTES(J) : @SUM(PLANTAS(I):X(I,J))>=D(J)); END

Definiendo los conjuntos


Investigacin Operativa I
Tenemos los siguientes conjuntos a definir : PLANTAS CLIENTES ARCOS

SETS: PLANTAS / P1 P2 P3/ : O; CLIENTES / C1 C2 C3 C4/ : D; ARCOS(PLANTAS,CLIENTES) : C,X; ENDSETS

COLOCANDO LOS DATOS


Investigacin Operativa I
DATA: O = 35 50 40; D = 45 20 30 30; C = 8 6 10 9 9 12 13 7 14 9 16 5; ENDDATA

MODELO LINGO
Investigacin Operativa I

LINGO Document

Investigacin Operativa I

CARACTERISTICAS ADICIONALES
PODEMOS COLOCARLES NOMBRES A NUESTRA FUNCION OBJETIVO, RESTRICCIONES Y UN TITULO AL MODELO

Ejemplo 1: [objetivo] MIN = X; Ejemplo 2: @FOR(PLANTAS(I) : [oferta_planta] @SUM(CLIENTES(J):X(I,J))<=O(I));

LINGO Document

Problema
Investigacin Operativa I
Almacn Fbrica

1
12 10 14

2
13 12 11

3
10 14 15

4
11 10 12

Oferta

1 2 3
Demanda

10 9 7 26

Costos de transporte por unidad

Usando Conjuntos (Sets)


Investigacin Operativa I

Sets son simplemente grupos de objetos relacionados. Un conjunto (set) puede ser una lista de productos, camiones o empleados. Cada miembro del conjunto puede tener una o ms caractersticas relacionadas con l. Estas caractersticas se conocen bajo el nombre de atributos. Los valores de los atributos pueden ser conocidos o desconocidos.

Usando Conjuntos (Sets)


Investigacin Operativa I

LINGO reconoce 2 tipos de conjuntos :


Primitivos Derivados
Primitivos : Es un conjunto compuesto slo de objetos que no pueden ser reducidos posteriormente. Ejemplo : PLANTAS Derivados : Es definido a partir de uno o ms conjuntos. Ejemplo : ARCOS

Usando Conjuntos
Investigacin Operativa I

Un conjunto primitivo se define de la siguiente manera :


setname [/lista_miembros/][: lista_atributos];

Listado explcito de la lista miembros

PLANTAS / P1 P2 P3/ : O;

Usando Conjuntos
Investigacin Operativa I

Un conjunto primitivo se define de la siguiente manera :


setname [/lista_miembros/][: lista_atributos];

Listado implcito de la lista miembros

PLANTAS / miembro1..miembroN/ : O;

Usando Conjuntos
Investigacin Operativa I Lista miembros Implcito (formato) Ejemplo Conjunto de miembros

1..n
stringM..stringN

1..5

1,2,3,4,5

DayM..dayN

TRUCKS3.. TRUCKS3, TRUCKS204 TRUCKS4, ,TRUCKS 204 MON..FRI MON,TUE, WED,THU,F RI OCT..JAN OCT,NOV,D EC,JAN

monthM..monthN

Usando Conjuntos
Investigacin Operativa I

Como una ilustracin, en el ejemplo Powerco, podramos haber definido el conjunto PLANTAS como :
PLANTAS /P1..P3/ : O;

Usando Conjuntos
Investigacin Operativa I

Una forma alternativa, cuando se utiliza el formato 1..n, tu puedes definir la longitud del conjunto en la seccin DATA y entonces realizar la referencia :
DATA:
Nmero_de_plantas = 3;

ENDDATA SETS:
PLANTAS /1..Nmero_de_plantas/ : O;

ENDSETS

Investigacin Operativa I

Para definir un conjunto derivado, tu especificas :


El nombre del conjunto Sus conjuntos PADRES Opcionalmente, sus miembros Opcionalmente, sus atributos

Usando Conjuntos : conjuntos derivados

setname(Lista_conj_padres)[/lista_miembros/][:lista_atrib]

Investigacin Operativa I

Usando Conjuntos : conjuntos derivados


setname(Lista_conj_padres)[/lista_miembros/][:lista_atrib]

EJEMPLO : SETS: PRODUCTO /A B /; MAQUINA /M N/; SEMANA /1..2/; ASIGNACION(PRODUCTO,MAQUINA,SEMANA); ENDSETS

Investigacin Operativa I

Usando Conjuntos : conjuntos derivados y filtros


EJEMPLO : CAMIONES_PESADOS(CAMIONES) | CAPACIDAD(&1) #GT# 50000;

Operadores lgicos reconocidos por LINGO son : #EQ# igual #NE# distinto #GE# mayor o igual que #GT# mayor #LT# menor que #LE# menor o igual que

Investigacin Operativa I

funcin
@FOR @SUM @MIN @MAX

uso

Funciones

Es utilizado para generar conjuntos de restricciones Calcula la suma de una expresin sobre todos los miembros de un conjunto Calcula el mnimo de una expresin sobre todos los miembros de un conjunto Calcula el mximo de una expresin sobre todo los miembros de un conjunto

Funcin @SUM
Investigacin Operativa I
SETS: CLIENTES / C1 C2 C3 C4 C5/ : Demanda; ENDSETS DATA : DEMANDA = 5 1 3 4 6; ENDDATA

Demanda_total = @SUM(CLIENTES(J):DEMANDA(J)); Demanda_total = @SUM(CLIENTES:DEMANDA); Demanda_3 = @SUM(CLIENTES(J)|J #LE3# :DEMANDA(J));

Funcin @MIN, @MAX


Investigacin Operativa I
SETS: CLIENTES / C1 C2 C3 C4 C5/ : Demanda; ENDSETS DATA : DEMANDA = 5 1 3 4 6; ENDDATA

Min_demanda = @MIN(CLIENTES(J):DEMANDA(J)); Max_demanda = @MAX(CLIENTES(J):DEMANDA(J)); Min_demanda = @SUM(CLIENTES:DEMANDA); Max_demanda = @SUM(CLIENTES:DEMANDA);

Funcin @FOR
Investigacin Operativa I
SETS: CAMIONES / RENAULT FORD DODGE / : CARGA; ENDSETS

@FOR(CAMIONES(T) : CARGA(T) <= 2500);

CARGA(RENAULT)<=2500; CARGA(FORD) <= 2500; CARGA(DODGE)<=2500;

Investigacin Operativa I

Usando funciones de dominios para variables


Tipos variables @GIN @BIN @FREE @BND definicin Variable entera Variable binaria Cualquier valor Rango para la variable

Sintaxis
Investigacin Operativa I

@GIN(nombre_variable).
@GIN(X);
LINGO Document

Problema de la mochila : @BIN


artculo 1 2 3 4 5 6 7 8 peso 1 3 4 4 4 1 5 10 Rating 2 9 3 8 10 6 4 10
Investigacin Operativa I

Modelo LINGO
Investigacin Operativa I

MODEL: SETS:
ARTICULOS /A1..A10/: PESO, RATING, INCLUYE;

ENDSETS
DATA: PESO RATING = 1 2 3 9 4 3 3 8 4 10 1 6 5 4 10 10; CAPACIDAD_MOCHILA = 15; ENDDATA

Modelo LINGO
Investigacin Operativa I
MAX = @SUM(ARTICULOS: RATINGS * INCLUYE); @SUM(ARTICULOS:PESO*INCLUYE)<=CAPACIDAD_MOCHILA; @FOR(ARTICULOS:@BIN(INCLUYE)); END

VARIABLES ACOTADAS
Investigacin Operativa I

@BND(cota_inferior,nombre_variable,cota_superior);