Download pdf - Lingo Tutorial

Transcript
Page 1: Lingo Tutorial

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

Page 2: Lingo Tutorial

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

Page 3: Lingo Tutorial

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

Page 4: Lingo Tutorial

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

Page 5: Lingo Tutorial

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

Page 6: Lingo Tutorial

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.

Page 7: Lingo Tutorial

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 >.

Page 8: Lingo Tutorial

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.

Page 9: Lingo Tutorial

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

Page 10: Lingo Tutorial

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.

Page 11: Lingo Tutorial

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

Page 12: Lingo Tutorial

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.

Page 13: Lingo Tutorial

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.

Page 14: Lingo Tutorial

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

Page 15: Lingo Tutorial

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

Page 16: Lingo Tutorial

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

Page 17: Lingo Tutorial

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

Page 18: Lingo Tutorial

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

Page 19: Lingo Tutorial

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

Page 20: Lingo Tutorial

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

Page 21: Lingo Tutorial

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

Page 22: Lingo Tutorial

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

Page 23: Lingo Tutorial

Inv

esti

gac

ión

Op

era

tiv

a I

MODELO LINGO

Page 24: Lingo Tutorial

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));

Page 25: Lingo Tutorial

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

Page 26: Lingo Tutorial

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.

Page 27: Lingo Tutorial

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

Page 28: Lingo Tutorial

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

Page 29: Lingo Tutorial

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

Page 30: Lingo Tutorial

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

Page 31: Lingo Tutorial

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;

Page 32: Lingo Tutorial

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

Page 33: Lingo Tutorial

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]

Page 34: Lingo Tutorial

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

Page 35: Lingo Tutorial

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

Page 36: Lingo Tutorial

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

Page 37: Lingo Tutorial

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));

Page 38: Lingo Tutorial

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);

Page 39: Lingo Tutorial

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;

Page 40: Lingo Tutorial

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

Page 41: Lingo Tutorial

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);

Page 42: Lingo Tutorial

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

Page 43: Lingo Tutorial

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

Page 44: Lingo Tutorial

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

Page 45: Lingo Tutorial

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);