Download - Tutorial SOFTWARE LINGO 8.0
![Page 1: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/1.jpg)
Tutorial SOFTWARE LINGO 8.0
Creado por Cristian Oliva
![Page 2: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/2.jpg)
¿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
![Page 3: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/3.jpg)
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
![Page 4: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/4.jpg)
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
![Page 5: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/5.jpg)
Modelo
0,,
30033
40022
600243
.
5.242
321
321
321
321
321
xxx
xxx
xxx
xxx
as
xxxMax
![Page 6: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/6.jpg)
Modelo LINGOCada Línea en LINGO debe terminarse con un punto y coma« ; ». Tu modelo no se resolverá sin ellos.
LINGO Document
![Page 7: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/7.jpg)
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 , LINGOAdoptó la convención de usar los caracteres <= para denotar .Sin embargo, tu puedes entrar simplemente <. Lo mismo ocurrepara >=, tu puedes entrar simplemente >.
![Page 8: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/8.jpg)
Modelo LINGOTambién podemos incluir al modelo LINGO comentarios, detal manera que mejore la legibilidad de éste.
LINGO Document
![Page 9: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/9.jpg)
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 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
![Page 10: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/10.jpg)
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.
![Page 11: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/11.jpg)
Resolviendo un modelo LINGO
Una vez que el modelo ha sido entrado en la « ventana modelo », éste puede ser resuelto mediante :
LINGO Document
• Un click en el botón « solve »
• Seleccionando « solve » del menú LINGO
• Utilizando la tecla ctrl-s
• Si existen errores, éstos serán informados
![Page 12: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/12.jpg)
Ventana de Status del Solver LINGO Si no se encontraron errores, la ventana del
status del solver de LINGO aparece.
LINGO Document
Aparece también el informe de la solución.
![Page 13: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/13.jpg)
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.
![Page 14: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/14.jpg)
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
![Page 15: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/15.jpg)
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
Demanda
45 20 30 30
![Page 16: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/16.jpg)
Modelo
i,jx
jDx
iOx
as
xcz
ij
jj
ij
iiij
ij
0
1,2,3,4
1,2,3
.
minij
ij
![Page 17: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/17.jpg)
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
![Page 18: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/18.jpg)
Las Restricciones de ofertaiOx i
jij
@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
![Page 19: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/19.jpg)
Las Restricciones de demanda
jDx ji
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
![Page 20: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/20.jpg)
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
![Page 21: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/21.jpg)
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
![Page 22: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/22.jpg)
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
![Page 23: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/23.jpg)
MODELO LINGO
LINGO Document
![Page 24: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/24.jpg)
CARACTERISTICAS ADICIONALES
PODEMOS COLOCARLES NOMBRES A NUESTRA FUNCION OBJETIVO, RESTRICCIONES Y UN TITULOAL MODELO
Ejemplo 1: [objetivo] MIN = X;
Ejemplo 2: @FOR(PLANTAS(I) : [oferta_planta]@SUM(CLIENTES(J):X(I,J))<=O(I));
LINGO Document
![Page 25: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/25.jpg)
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
![Page 26: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/26.jpg)
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.
![Page 27: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/27.jpg)
Usando Conjuntos (Sets)
LINGO reconoce 2 tipos de conjuntos :
• Primitivos
• Derivados
•Primitivos : Es un conjunto compuesto sólo de objetos que nopueden ser reducidos posteriormente. Ejemplo : PLANTAS
•Derivados : Es definido a partir de uno o más conjuntos. Ejemplo : ARCOS
![Page 28: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/28.jpg)
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
![Page 29: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/29.jpg)
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
![Page 30: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/30.jpg)
Usando ConjuntosLista miembros Implícito (formato)
Ejemplo Conjunto de miembros
1..n 1..5 1,2,3,4,5stringM..stringN TRUCKS3..
TRUCKS204
TRUCKS3, TRUCKS4,…,TRUCKS204
DayM..dayN MON..FRI MON,TUE,WED,THU,FRI
monthM..monthN OCT..JAN OCT,NOV,DEC,JAN
![Page 31: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/31.jpg)
Usando Conjuntos
Como una ilustración, en el ejemplo Powerco, podríamos haber definido el conjunto PLANTAS como :
– PLANTAS /P1..P3/ : O;
![Page 32: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/32.jpg)
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
![Page 33: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/33.jpg)
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]
![Page 34: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/34.jpg)
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
![Page 35: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/35.jpg)
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
![Page 36: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/36.jpg)
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
![Page 37: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/37.jpg)
Función @SUM
SETS:CLIENTES / C1 C2 C3 C4 C5/ : Demanda;
ENDSETSDATA :
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));
![Page 38: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/38.jpg)
Función @MIN, @MAX
SETS:CLIENTES / C1 C2 C3 C4 C5/ : Demanda;
ENDSETSDATA :
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);
![Page 39: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/39.jpg)
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;
![Page 40: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/40.jpg)
Usando funciones de dominios para variables
Tipos variables definición
@GIN Variable entera
@BIN Variable binaria
@FREE Cualquier valor
@BND Rango para la variable
![Page 41: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/41.jpg)
Sintaxis
@GIN(nombre_variable).– @GIN(X);
LINGO Document
![Page 42: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/42.jpg)
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
![Page 43: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/43.jpg)
Modelo LINGO
MODEL:SETS:
ARTICULOS /A1..A10/: PESO, RATING, INCLUYE;
ENDSETSDATA:PESO RATING = 10 211 912 313 814 1015 616 417 10;CAPACIDAD_MOCHILA = 15;ENDDATA
![Page 44: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/44.jpg)
Modelo LINGOMAX = @SUM(ARTICULOS: RATINGS * INCLUYE);
@SUM(ARTICULOS:PESO*INCLUYE)<=CAPACIDAD_MOCHILA;
@FOR(ARTICULOS:@BIN(INCLUYE));
END
![Page 45: Tutorial SOFTWARE LINGO 8.0](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814f08550346895dbc9ab5/html5/thumbnails/45.jpg)
VARIABLES ACOTADAS
@BND(cota_inferior,nombre_variable,cota_superior);