Tutorial SOFTWARE LINGO 8.0

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
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.
Total
600 horas
300 horas
400 horas
Depart. 3
Benef.
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
C2
(US$)
6
C3
(US$)
10
C4
(US$)
9
Oferta
P1
C1
(US$)
8
P2
9
12
13
7
50
P3
14
9
16
5
40
20
30
30
Deman 45
da
35
Modelo
min z 
c
ij
xij
ij
s.a
x
ij
 Oi
i  1,2,3
i
x
ij
 Dj
j  1,2,3,4
j
xij  0
i,j
Función Objetivo
min
c
ij
xij
ij
Lenguaje modelo LINGO
MIN = @SUM(ARCOS(I,J) : C(I,J) * X(I,J));
Notación
Matemática
min

ij
Sintaxis LINGO
MIN =
@SUM(ARCOS(I,J) :
cij
C(I,J)
xij
X(I,J));
Las Restricciones de oferta
x
ij
 Oi
i
j
@FOR(PLANTAS(I) : @SUM(CLIENTES(J):X(I,J))
<=O(I));
Notación
Matemática
i

Sintaxis LINGO
@FOR(PLANTAS(I) :
@SUM(CLIENTES(J) :
j
xij
X(I,J)
Oi
O(I));
Las Restricciones de demanda
x
ij
 Dj
j
i
@FOR(CLIENTES(J) : @SUM(PLANTAS(I):X(I,J))
>=D(J));
Notación
Matemática
Sintaxis LINGO
j
@FOR(CLIENTES(J) :

@SUM(PLANTAS(I) :
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
1
2
3
Oferta
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
Costos de transporte por unidad
8
26
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
Implícito (formato)
Ejemplo
Conjunto de
miembros
1..n
1..5
1,2,3,4,5
stringM..stringN
TRUCKS3.. TRUCKS3,
TRUCKS204 TRUCKS4,
…,TRUCKS
204
DayM..dayN
MON..FRI
monthM..monthN
OCT..JAN
MON,TUE,
WED,THU,F
RI
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
Calcula la suma de una expresión sobre
todos los miembros de un conjunto
@SUM
@MIN
@MAX
Calcula el mínimo de una expresión sobre
todos los miembros de un conjunto
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
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);