Universidad Nacional Mayor de San Marcos
Facultad de Ingeniería Industrial
Investigación Operativa I
Tutorial SOFTWARE LINGO
MSc. Ing° Ezzard Omar Alvarez Díaz
LINGO Document
¿Qué es LINGO?
Investigación Operativa I
• 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
Investigación Operativa I
• 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 :
Investigación Operativa I
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
Investigación Operativa I
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
Investigación Operativa I
« ; ». Tu modelo no se resolverá sin ellos.
LINGO Document
Modelo LINGO
Ya que los computadores no tienen el símbolo , LINGO
Investigación Operativa I
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
Investigación Operativa I
tal manera que mejore la legibilidad de éste.
LINGO Document
Sintaxis general de LINGO
• Una expresión puede ser escritas en muchas líneas,
Investigación Operativa I
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 Document
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
Investigación Operativa I
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
Investigación Operativa I
• 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
LINGO Document
Ventana de Status del Solver
LINGO
Investigación Operativa I
• Si no se encontraron errores, la ventana del
status del solver de LINGO aparece.
Aparece también el informe de la
solución.
LINGO Document
Utilizando el Lenguaje de
Modelamiento
Investigación Operativa I
• 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
Investigación Operativa I
• 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
Investigación Operativa I
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
Investigación Operativa I
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 cij
ij xij
Investigación Operativa I
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
Investigación Operativa I
@FOR(PLANTAS(I) : @SUM(CLIENTES(J):X(I,J))
<=O(I));
Notación Sintaxis LINGO
Matemática
i @FOR(PLANTAS(I) :
@SUM(CLIENTES(J) :
j
xij X(I,J)
Oi O(I));
Las Restricciones de demanda
x
i
ij Dj j
Investigación Operativa I
@FOR(CLIENTES(J) : @SUM(PLANTAS(I):X(I,J))
>=D(J));
Notación Sintaxis LINGO
Matemática
j @FOR(CLIENTES(J) :
@SUM(PLANTAS(I) :
i
xij X(I,J)
Dj D(J));
EL MODELO LINGO ES
Investigación 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
Tenemos los siguientes conjuntos a definir :
Investigación Operativa I
PLANTAS
CLIENTES
ARCOS
SETS:
PLANTAS / P1 P2 P3/ : O;
CLIENTES / C1 C2 C3 C4/ : D;
ARCOS(PLANTAS,CLIENTES) : C,X;
ENDSETS
COLOCANDO LOS DATOS
Investigación 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
Investigación Operativa I
LINGO Document
CARACTERISTICAS
ADICIONALES
Investigación Operativa I
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
Investigación Operativa I
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)
Investigación 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
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)
Investigación Operativa I
• 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
Investigación Operativa I
• 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
Investigación Operativa I
• 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
Investigación Operativa I
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
Investigación Operativa I
• Como una ilustración, en el ejemplo
Powerco, podríamos haber definido el
conjunto PLANTAS como :
– PLANTAS /P1..P3/ : O;
Usando Conjuntos
Investigación Operativa I
• 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
Investigación Operativa I
• 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
Investigación Operativa I
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
Investigación Operativa I
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
Investigación Operativa I
@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
Investigación 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));
Función @MIN, @MAX
Investigación 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);
Función @FOR
Investigación Operativa I
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
Investigación Operativa I
Tipos variables definición
@GIN Variable entera
@BIN Variable binaria
@FREE Cualquier valor
@BND Rango para la
variable
Sintaxis
Investigación Operativa I
• @GIN(nombre_variable).
– @GIN(X);
LINGO Document
Problema de la mochila : @BIN
artículo peso Rating
Investigación Operativa I
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
Investigación Operativa I
MODEL:
SETS:
ARTICULOS /A1..A10/: PESO, RATING, INCLUYE;
ENDSETS
DATA:
PESO RATING =
1 2
3 9
4 3
5 8
6 10
7 6
5 4
10 10;
CAPACIDAD_MOCHILA = 15;
ENDDATA
Modelo LINGO
Investigación Operativa I
MAX = @SUM(ARTICULOS: RATINGS * INCLUYE);
@SUM(ARTICULOS:PESO*INCLUYE)<=CAPACIDAD_MOCHILA;
@FOR(ARTICULOS:@BIN(INCLUYE));
END
VARIABLES ACOTADAS
Investigación Operativa I
@BND(cota_inferior,nombre_variable,cota_superior);