lingo tutorial
DESCRIPTION
operativa, 1, san marcosTRANSCRIPT
Inv
esti
gac
ión
Op
era
tiv
a I
Tutorial SOFTWARE LINGO
MSc. Ing° Ezzard Omar Alvarez Díaz
Universidad Nacional Mayor de San MarcosFacultad de Ingeniería Industrial
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
¿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
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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.
Total
600 horas 400 horas 300 horas
Inv
esti
gac
ión
Op
era
tiv
a I
Modelo
0,,
30033
40022
600243
.
5.242
321
321
321
321
321
xxx
xxx
xxx
xxx
as
xxxMax
Inv
esti
gac
ión
Op
era
tiv
a I
Modelo LINGOCada Línea en LINGO debe terminarse con un punto y coma
« ; ». Tu modelo no se resolverá sin ellos.
Inv
esti
gac
ión
Op
era
tiv
a I
Modelo LINGO
;30033
;40022
;600243
;5.242 max
321
321
321
321
xxx
xxx
xxx
xxx
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 >.
Inv
esti
gac
ión
Op
era
tiv
a I
Modelo LINGOTambién podemos incluir al modelo LINGO comentarios, de
tal manera que mejore la legibilidad de éste.
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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úsculaso minúsculas. Por lo tanto, los siguientesnombres de variables podrían serequivalentes.
TURBO, Turbo, turbo
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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.
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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.
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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.
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
• Powerco tiene tres plantas de generación de energíaeléctrica que suministran energía requerida a cuatrociudades. Cada planta puede suministrar las siguientescantidades de kilowatt-hora (kwh) de energía eléctrica : laplanta 1, 35 millones; la planta 2, 50 millones; la planta 3,40 millones. Las demandas máximas de energía en estasciudades, que se presentan al mismo momento (2 p.m.)son las siguientes (en kwh): la ciudad 1, 45 millones; laciudad 2, 20 millones; la ciudad 3, 30 millones; la ciudad4; 30 millones. Los costos para enviar 1 millón de kwh deenergía de una planta a una ciudad depende de la distanciaque la energía tiene que viajar. Formule un PL queminimice el costo para satisfacer la demanda máxima deenergía de cada ciudad.
Utilizando el Lenguaje de
Modelamiento
Inv
esti
gac
ión
Op
era
tiv
a I
Utilizando el lenguaje de
modelamiento
C1
(US$)
C2
(US$)
C3
(US$)
C4
(US$)
Oferta
P1 8 6 10 9 35
P2 9 12 13 7 50
P3 14 9 16 5 40
Deman
da
45 20 30 30
Inv
esti
gac
ión
Op
era
tiv
a I
Modelo
i,jx
jDx
iOx
as
xcz
ij
j
j
ij
i
iij
ij
0
1,2,3,4
1,2,3
.
minij
ij
Inv
esti
gac
ión
Op
era
tiv
a I
Función Objetivo
ij
ijxc ijmin
Lenguaje modelo LINGO
MIN = @SUM(ARCOS(I,J) : C(I,J) * X(I,J));
Notación
Matemática
Sintaxis LINGO
min MIN =
@SUM(ARCOS(I,J) :
cij C(I,J)
xij X(I,J));
ij
Inv
esti
gac
ión
Op
era
tiv
a I
Las Restricciones de oferta
iOx i
j
ij
@FOR(PLANTAS(I) : @SUM(CLIENTES(J):X(I,J))
<=O(I));
Notación
Matemática
Sintaxis LINGO
@FOR(PLANTAS(I) :
@SUM(CLIENTES(J) :
xij X(I,J)
Oi O(I));
j
i
Inv
esti
gac
ión
Op
era
tiv
a I
Las Restricciones de demanda
jDx j
i
ij
@FOR(CLIENTES(J) : @SUM(PLANTAS(I):X(I,J))
>=D(J));
Notación
Matemática
Sintaxis LINGO
@FOR(CLIENTES(J) :
@SUM(PLANTAS(I) :
xij X(I,J)
Dj D(J));
i
j
Inv
esti
gac
ión
Op
era
tiv
a I
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
Inv
esti
gac
ión
Op
era
tiv
a I
Definiendo los conjuntosTenemos 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
Inv
esti
gac
ión
Op
era
tiv
a I
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
Inv
esti
gac
ión
Op
era
tiv
a I
MODELO LINGO
Inv
esti
gac
ión
Op
era
tiv
a 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));
Inv
esti
gac
ión
Op
era
tiv
a I
Problema
Almacén
Fábrica
1 2 3 4 Oferta
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
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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.
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
Usando Conjuntos
• Un conjunto primitivo se define de la
siguiente manera :
– setname [/lista_miembros/][: lista_atributos];
PLANTAS / P1 P2 P3/ : O;
Listado explícito de la lista miembros
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
Usando Conjuntos
• Un conjunto primitivo se define de la
siguiente manera :
– setname [/lista_miembros/][: lista_atributos];
PLANTAS / miembro1..miembroN/ : O;
Listado implícito de la lista miembros
Inv
esti
gac
ión
Op
era
tiv
a I
Usando Conjuntos
Lista miembros
Implícito (formato)
Ejemplo Conjunto de
miembros
1..n 1..5 1,2,3,4,5
stringM..stringN TRUCKS3..
TRUCKS204
TRUCKS3,
TRUCKS4,
…,TRUCKS
204
DayM..dayN MON..FRI MON,TUE,
WED,THU,F
RI
monthM..monthN OCT..JAN OCT,NOV,D
EC,JAN
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
Usando Conjuntos
• Como una ilustración, en el ejemplo
Powerco, podríamos haber definido el
conjunto PLANTAS como :
– PLANTAS /P1..P3/ : O;
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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]
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a 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
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
Funcionesfunció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
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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));
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
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);
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
Función @FORSETS:
CAMIONES / RENAULT FORD DODGE / : CARGA;
ENDSETS
@FOR(CAMIONES(T) : CARGA(T) <= 2500);
CARGA(RENAULT)<=2500;
CARGA(FORD) <= 2500;
CARGA(DODGE)<=2500;
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
Usando funciones de dominios
para variables
Tipos variables definición
@GIN Variable entera
@BIN Variable binaria
@FREE Cualquier valor
@BND Rango para la
variable
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
Sintaxis
• @GIN(nombre_variable).
– @GIN(X);
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
Problema de la mochila : @BINartí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
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
Modelo LINGO
MODEL:
SETS:
ARTICULOS /A1..A10/: PESO, RATING, INCLUYE;
ENDSETSDATA:
PESO RATING =
1 2
3 9
4 3
3 8
4 10
1 6
5 4
10 10;
CAPACIDAD_MOCHILA = 15;
ENDDATA
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
Modelo LINGOMAX = @SUM(ARTICULOS: RATINGS * INCLUYE);
@SUM(ARTICULOS:PESO*INCLUYE)<=CAPACIDAD_MOCHILA;
@FOR(ARTICULOS:@BIN(INCLUYE));
END
Inv
esti
gac
ión
Op
era
tiv
a I
Inv
esti
gac
ión
Op
era
tiv
a I
VARIABLES ACOTADAS
@BND(cota_inferior,nombre_variable,cota_superior);