View
27
Download
1
Category
Preview:
DESCRIPTION
tutorail competo de programacion en w software lingo.
Citation preview
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Tutorial SOFTWARE LINGO
MSc. Ing° Ezzard Omar Alvarez Díaz
Universidad Nacional Mayor de San Marcos Facultad de Ingeniería Industrial
LINGO Document
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Modelo
0,,
30033
40022
600243
.
5.242
321
321
321
321
321
xxx
xxx
xxx
xxx
as
xxxMax
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Modelo LINGOCada Línea en LINGO debe terminarse con un punto y coma« ; ». Tu modelo no se resolverá sin ellos.
LINGO Document
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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 , LINGOAdoptó la convención de usar los caracteres <= para denotar .Sin embargo, tu puedes entrar simplemente <. Lo mismo ocurrepara >=, tu puedes entrar simplemente >.
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Modelo LINGOTambién podemos incluir al modelo LINGO comentarios, detal manera que mejore la legibilidad de éste.
LINGO Document
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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 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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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.
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
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.
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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.
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a 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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Demanda
45 20 30 30
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Modelo
i,jx
jDx
iOx
as
xcz
ij
jj
ij
iiij
ij
0
1,2,3,4
1,2,3
.
minij
ij
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Las Restricciones de oferta
iOx ij
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
MODELO LINGO
LINGO Document
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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.
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Usando Conjuntos
Lista 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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Usando Conjuntos• Como una ilustración, en el ejemplo
Powerco, podríamos haber definido el conjunto PLANTAS como :
– PLANTAS /P1..P3/ : O;
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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]
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Función @SUMSETS:
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));
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Función @MIN, @MAXSETS:
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);
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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;
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Sintaxis • @GIN(nombre_variable).
– @GIN(X);
LINGO Document
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
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
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Modelo LINGOMODEL:SETS:
ARTICULOS /A1..A10/: PESO, RATING, INCLUYE;
ENDSETSDATA:PESO RATING = 1 23 94 35 86 107 65 410 10;CAPACIDAD_MOCHILA = 15;ENDDATA
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Modelo LINGOMAX = @SUM(ARTICULOS: RATINGS * INCLUYE);
@SUM(ARTICULOS:PESO*INCLUYE)<=CAPACIDAD_MOCHILA;
@FOR(ARTICULOS:@BIN(INCLUYE));
END
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
Inve
stig
ació
n O
per
ativ
a I
VARIABLES ACOTADAS
@BND(cota_inferior,nombre_variable,cota_superior);
Recommended