You are on page 1of 45

Tutorial SOFTWARE LINGO 8.

0
Creado por Cristian Oliva

Qu es LINGO?
LINGO (Linear, INteractive, and General

Optimizer). Es una herramienta simple para utilizar la optimizacin lineal, no-lineal y enteros.
Permite formular problemas de gran tamao

en forma concisa.
Permite resolverlos
Permite analizar los resultados

Creando un Modelo LINGO


En general, un modelo de optimizacin

consiste de 3 partes :
Funcin Objetivo

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

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

Frmulas que definen los lmites de los valores de las variables

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

Depart. 1

Depart. 2

Depart. 3

Benef.

3 hrs./unid. 2 hrs./unid. 1 hr./unid. $ 2

2
3

4 hrs./unid. 1 hr./unid.
2 hrs./unid. 2 hr./unid.

3 hr./unid. $ 4
3 hr./unid. $ 2.5

Hrs. Total

600 horas

400 horas

300 horas

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

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

Modelo LINGO

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

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

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

Sintaxis general de LINGO


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


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


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

Ventana de Status del Solver LINGO


Si no se encontraron errores, la ventana del

status del solver de LINGO aparece.


Aparece tambin el informe de la solucin.

Utilizando el Lenguaje de Modelamiento


Una de las caractersticas ms poderosas de

LINGO es su lenguaje de modelamiento matemtico.


El lenguaje de modelamiento de LINGO

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

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


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
min z s.a

c
ij

ij

xij

x x
j i

ij

Oi Dj

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

ij

xij 0

Funcin Objetivo
min

c
ij

ij

xij

Lenguaje modelo LINGO


MIN = @SUM(ARCOS(I,J) : C(I,J) * X(I,J));

Notacin Matemtica min

ij

Sintaxis LINGO MIN =


@SUM(ARCOS(I,J) :

cij

C(I,J)

xij

X(I,J));

Las Restricciones de oferta


x
j ij

Oi

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

Notacin Matemtica

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

xij

X(I,J)

Oi

O(I));

Las Restricciones de demanda


x
i ij

Dj

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

Notacin Matemtica

Sintaxis LINGO
@FOR(CLIENTES(J) :

@SUM(PLANTAS(I) :

xij

X(I,J)

Dj

D(J));

EL MODELO LINGO ES
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


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


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

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

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


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)


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
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
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
Lista miembros Implcito (formato) Ejemplo Conjunto de miembros

1..n
stringM..stringN

1..5

1,2,3,4,5

DayM..dayN

monthM..monthN

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

Usando Conjuntos
Como una ilustracin, en el ejemplo

Powerco, podramos haber definido el conjunto PLANTAS como :


PLANTAS /P1..P3/ : O;

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

Usando Conjuntos : conjuntos derivados


Para definir un conjunto derivado, tu

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

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

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

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

Funciones
funcin
@FOR @SUM @MIN @MAX

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


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
SETS:
CAMIONES / RENAULT FORD DODGE / : CARGA;

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

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

Usando funciones de dominios para variables


Tipos variables
@GIN @BIN @FREE @BND

definicin
Variable entera Variable binaria Cualquier valor Rango para la variable

Sintaxis
@GIN(nombre_variable). @GIN(X);

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

Modelo LINGO
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
MAX = @SUM(ARTICULOS: RATINGS * INCLUYE); @SUM(ARTICULOS:PESO*INCLUYE)<=CAPACIDAD_MOCHILA; @FOR(ARTICULOS:@BIN(INCLUYE));

END

VARIABLES ACOTADAS
@BND(cota_inferior,nombre_variable,cota_superior);

You might also like