Está en la página 1de 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
optimización lineal, no-lineal y enteros.
 Permite formular problemas de gran tamaño
en forma concisa.
 Permite resolverlos
 Permite analizar los resultados
Creando un Modelo LINGO
 En general, un modelo de optimización
consiste de 3 partes :
 Función Objetivo
Una sola fórmula que describe exactamente que es lo que se
desea optimizar.
 Variables
Cantidades que pueden ser cambiadas para producir el valor
óptimo de la función objetivo
 Restricciones
Fórmulas que definen los límites de los valores de las variables
UN EJEMPLO
 Una empresa fabrica tres productos 1,2 y 3. Cada producto
requiere tiempos de producción en tres departamentos
como se ilustra en la siguiente tabla :
Prod. Depart. 1 Depart. 2 Depart. 3 Benef.

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

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

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

Hrs. 600 horas 400 horas 300 horas


Total
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 Línea 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 símbolo , LINGO
Adoptó la convención 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
También podemos incluir al modelo LINGO comentarios, de
tal manera que mejore la legibilidad de éste.
Sintaxis general de LINGO
 Una expresión puede ser escritas en muchas
líneas, pero la expresión debe ser terminada por un
punto y coma. Por ejemplo, podríamos haber
utilizado dos líneas para la función objetivo.

 LINGO no diferencia entre letras mayúsculas o


minúsculas. Por lo tanto, los siguientes nombres
de variables podrían 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
alfabéticos, numéricos o el símbolo _. 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 botón « solve »

• Seleccionando « solve » del menú LINGO

• Utilizando la tecla ctrl-s

• Si existen errores, éstos serán informados


Ventana de Status del Solver
LINGO
 Si no se encontraron errores, la ventana del
status del solver de LINGO aparece.
 Aparece también el informe de la solución.
Utilizando el Lenguaje de
Modelamiento
 Una de las características más poderosas de
LINGO es su lenguaje de modelamiento
matemático.

 El lenguaje de modelamiento de LINGO


permite expresar tu problema de una
manera natural que es muy similar a la
notación matemática.
Utilizando el Lenguaje de
Modelamiento
 Powerco tiene tres plantas de generación de energía
eléctrica que suministran energía requerida a cuatro
ciudades. Cada planta puede suministrar las siguientes
cantidades de kilowatt-hora (kwh) de energía eléctrica : la
planta 1, 35 millones; la planta 2, 50 millones; la planta 3,
40 millones. Las demandas máximas de energía 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 millón de kwh de
energía de una planta a una ciudad depende de la distancia
que la energía tiene que viajar. Formule un PL que
minimice el costo para satisfacer la demanda máxima de
energía de cada ciudad.
Utilizando el lenguaje de
modelamiento
C1 C2 C3 C4 Oferta
(US$) (US$) (US$) (US$)
P1 8 6 10 9 35

P2 9 12 13 7 50

P3 14 9 16 5 40

Deman 45 20 30 30
da
Modelo
min z  c
ij
ij xij

s.a
x
i
ij  Oi i  1,2,3

x
j
ij  Dj j  1,2,3,4

xij  0 i,j
Función Objetivo
min c
ij
ij xij

Lenguaje modelo LINGO

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


Notación Sintaxis LINGO
Matemática
min MIN =
 ij
@SUM(ARCOS(I,J) :

cij C(I,J)
xij X(I,J));
Las Restricciones de oferta
x
j
ij  Oi i

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

Notación Sintaxis LINGO


Matemática
i @FOR(PLANTAS(I) :


j
@SUM(CLIENTES(J) :

xij X(I,J)
Oi O(I));
Las Restricciones de demanda
x
i
ij  Dj j

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

Notación Sintaxis LINGO


Matemática
j @FOR(CLIENTES(J) :


i
@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
Almacén Oferta
1 2 3 4
Fábrica
1 12 13 10 11 10
2 10 12 14 10 9
3 14 11 15 12 7
Demanda 6 5 7 8 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 más
características relacionadas con él.
 Estas características 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 sólo de objetos que no


pueden ser reducidos posteriormente. Ejemplo : PLANTAS

•Derivados : Es definido a partir de uno o más conjuntos.


Ejemplo : ARCOS
Usando Conjuntos
 Un conjunto primitivo se define de la
siguiente manera :
– setname [/lista_miembros/][: lista_atributos];

Listado explícito 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 implícito de la lista miembros

PLANTAS / miembro1..miembroN/ : O;
Usando Conjuntos
Lista miembros Ejemplo Conjunto de
Implícito (formato) miembros
1..n 1..5 1,2,3,4,5
stringM..stringN TRUCKS3.. TRUCKS3,
TRUCKS204 TRUCKS4,
…,TRUCKS
204
DayM..dayN MON..FRI MON,TUE,
WED,THU,F
RI
monthM..monthN OCT..JAN OCT,NOV,D
EC,JAN
Usando Conjuntos
 Como una ilustración, en el ejemplo
Powerco, podríamos 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 sección DATA y entonces realizar la referencia :
– DATA:
• Número_de_plantas = 3;
– ENDDATA

– SETS:
• PLANTAS /1..Número_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 lógicos reconocidos por LINGO son :


#EQ# igual
#NE# distinto
#GE# mayor o igual que
#GT# mayor
#LT# menor que
#LE# menor o igual que
Funciones
función uso

@FOR Es utilizado para generar conjuntos de


restricciones
@SUM Calcula la suma de una expresión sobre
todos los miembros de un conjunto
@MIN Calcula el mínimo de una expresión sobre
todos los miembros de un conjunto
@MAX Calcula el máximo de una expresión sobre
todo los miembros de un conjunto
Función @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));


Función @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);
Función @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 definición

@GIN Variable entera

@BIN Variable binaria

@FREE Cualquier valor

@BND Rango para la


variable
Sintaxis
 @GIN(nombre_variable).
– @GIN(X);
Problema de la mochila : @BIN
artículo peso Rating
1 1 2
2 3 9
3 4 3
4 4 8
5 4 10
6 1 6
7 5 4
8 10 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);

También podría gustarte