Tutorial Lingo profesor Cristian Oliva

45
Tutorial SOFTWARE LINGO 8.0 Creado por Cristian Oliva

description

Tutorial de lingo, con esta información sep uede empezar a programar todo tipo de modelos matemáticos lineales

Transcript of Tutorial Lingo profesor Cristian Oliva

  • Tutorial SOFTWARE LINGO 8.0Creado por Cristian Oliva

  • Qu es LINGO?LINGO (Linear, INteractive, and General Optimizer).Es una herramienta simple para utilizar la optimizacin lineal, no-lineal y enteros.Permite formular problemas de gran tamao en forma concisa.Permite resolverlosPermite analizar los resultados

  • Creando un Modelo LINGOEn general, un modelo de optimizacin consiste de 3 partes :Funcin ObjetivoUna sola frmula que describe exactamente que es lo que se desea optimizar.VariablesCantidades que pueden ser cambiadas para producir el valor ptimo de la funcin objetivoRestriccionesFrmulas que definen los lmites de los valores de las variables

  • UN EJEMPLOUna empresa fabrica tres productos 1,2 y 3. Cada producto requiere tiempos de produccin en tres departamentos como se ilustra en la siguiente tabla :

    Prod.Depart. 1Depart. 2Depart. 3Benef.13 hrs./unid.2 hrs./unid.1 hr./unid.$ 224 hrs./unid.1 hr./unid.3 hr./unid.$ 432 hrs./unid.2 hr./unid.3 hr./unid.$ 2.5Hrs. Total600 horas400 horas300 horas

  • Modelo

  • Modelo LINGOCada Lnea en LINGO debe terminarse con un punto y coma;. Tu modelo no se resolver sin ellos.

  • Modelo LINGOYa que los computadores no tienen el smbolo , LINGOAdopt la convencin de usar los caracteres .

  • Modelo LINGOTambin podemos incluir al modelo LINGO comentarios, detal manera que mejore la legibilidad de ste.

  • Sintaxis general de LINGOUna expresin puede ser escritas en muchas lneas, pero la expresin debe ser terminada por un punto y coma. Por ejemplo, podramos haber utilizado dos lneas para la funcin objetivo.LINGO no diferencia entre letras maysculas o minsculas. Por lo tanto, los siguientes nombres de variables podran ser equivalentes.TURBO, Turbo, turbo

  • Sintaxis general de LINGOCuando se le dan nombres a las variables en LINGO, todos los nombres deben comenzar con un caracter (A-Z). Los otros pueden ser alfabticos, numricos o el smbolo _. Los nombres pueden tener una longitud de 32 caracteres.

  • Resolviendo un modelo LINGOUna vez que el modelo ha sido entrado en la ventana modelo, ste puede ser resuelto mediante : Un click en el botn solve Seleccionando solve del men LINGO Utilizando la tecla ctrl-s Si existen errores, stos sern informados

  • Ventana de Status del Solver LINGOSi no se encontraron errores, la ventana del status del solver de LINGO aparece.Aparece tambin el informe de la solucin.

  • Utilizando el Lenguaje de ModelamientoUna de las caractersticas ms poderosas de LINGO es su lenguaje de modelamiento matemtico.El lenguaje de modelamiento de LINGO permite expresar tu problema de una manera natural que es muy similar a la notacin matemtica.

  • Utilizando el Lenguaje de ModelamientoPowerco tiene tres plantas de generacin de energa elctrica que suministran energa requerida a cuatro ciudades. Cada planta puede suministrar las siguientes cantidades de kilowatt-hora (kwh) de energa elctrica : la planta 1, 35 millones; la planta 2, 50 millones; la planta 3, 40 millones. Las demandas mximas de energa 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 milln de kwh de energa de una planta a una ciudad depende de la distancia que la energa tiene que viajar. Formule un PL que minimice el costo para satisfacer la demanda mxima de energa de cada ciudad.

  • Utilizando el lenguaje de modelamiento

  • Modelo

  • Funcin ObjetivoLenguaje modelo LINGOMIN = @SUM(ARCOS(I,J) : C(I,J) * X(I,J));

    Notacin MatemticaSintaxis LINGOminMIN =@SUM(ARCOS(I,J) :cijC(I,J)xijX(I,J));

  • Las Restricciones de oferta@FOR(PLANTAS(I) : @SUM(CLIENTES(J):X(I,J))
  • Las Restricciones de demanda@FOR(CLIENTES(J) : @SUM(PLANTAS(I):X(I,J))>=D(J));

    Notacin MatemticaSintaxis LINGO@FOR(CLIENTES(J) :@SUM(PLANTAS(I) :xijX(I,J)DjD(J));

  • EL MODELO LINGO ESMODEL :MIN = @SUM(ARCOS(I,J) : C(I,J) * X(I,J));@FOR(PLANTAS(I) : @SUM(CLIENTES(J):X(I,J))=D(J));END

  • Definiendo los conjuntosTenemos los siguientes conjuntos a definir :PLANTAS

    CLIENTES

    ARCOSSETS:PLANTAS / P1 P2 P3/ : O;

    CLIENTES / C1 C2 C3 C4/ : D;

    ARCOS(PLANTAS,CLIENTES) : C,X;ENDSETS

  • COLOCANDO LOS DATOSDATA: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

  • CARACTERISTICAS ADICIONALESPODEMOS COLOCARLES NOMBRES A NUESTRA FUNCION OBJETIVO, RESTRICCIONES Y UN TITULOAL MODELOEjemplo 1: [objetivo] MIN = X;Ejemplo 2: @FOR(PLANTAS(I) : [oferta_planta]@SUM(CLIENTES(J):X(I,J))
  • ProblemaCostos de transporte por unidad

    Almacn

    Fbrica

    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

  • 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 ms caractersticas relacionadas con l.Estas caractersticas se conocen bajo el nombre de atributos.Los valores de los atributos pueden ser conocidos o desconocidos.

  • Usando Conjuntos (Sets)LINGO reconoce 2 tipos de conjuntos :

    Primitivos

    DerivadosPrimitivos : Es un conjunto compuesto slo de objetos que nopueden ser reducidos posteriormente. Ejemplo : PLANTASDerivados : Es definido a partir de uno o ms conjuntos. Ejemplo : ARCOS

  • Usando ConjuntosUn conjunto primitivo se define de la siguiente manera :setname [/lista_miembros/][: lista_atributos];PLANTAS / P1 P2 P3/ : O;Listado explcito de la lista miembros

  • Usando ConjuntosUn conjunto primitivo se define de la siguiente manera :setname [/lista_miembros/][: lista_atributos];PLANTAS / miembro1..miembroN/ : O;Listado implcito de la lista miembros

  • Usando Conjuntos

    Lista miembros Implcito (formato)EjemploConjunto de miembros1..n1..51,2,3,4,5stringM..stringNTRUCKS3..TRUCKS204TRUCKS3, TRUCKS4,,TRUCKS204DayM..dayNMON..FRIMON,TUE,WED,THU,FRImonthM..monthNOCT..JANOCT,NOV,DEC,JAN

  • Usando ConjuntosComo una ilustracin, en el ejemplo Powerco, podramos haber definido el conjunto PLANTAS como :

    PLANTAS /P1..P3/ : O;

  • Usando ConjuntosUna forma alternativa, cuando se utiliza el formato 1..n, tu puedes definir la longitud del conjunto en la seccin DATA y entonces realizar la referencia :DATA:Nmero_de_plantas = 3;ENDDATA

    SETS:PLANTAS /1..Nmero_de_plantas/ : O;ENDSETS

  • Usando Conjuntos : conjuntos derivadosPara definir un conjunto derivado, tu especificas :El nombre del conjuntoSus conjuntos PADRESOpcionalmente, sus miembrosOpcionalmente, sus atributossetname(Lista_conj_padres)[/lista_miembros/][:lista_atrib]

  • Usando Conjuntos : conjuntos derivadossetname(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 filtrosEJEMPLO :CAMIONES_PESADOS(CAMIONES) | CAPACIDAD(&1) #GT# 50000;Operadores lgicos reconocidos por LINGO son :#EQ# igual#NE# distinto#GE# mayor o igual que#GT# mayor#LT# menor que#LE# menor o igual que

  • Funciones

    funcinuso@FOREs utilizado para generar conjuntos de restricciones@SUMCalcula la suma de una expresin sobre todos los miembros de un conjunto@MINCalcula el mnimo de una expresin sobre todos los miembros de un conjunto@MAXCalcula el mximo de una expresin sobre todo los miembros de un conjunto

  • Funcin @SUMSETS:CLIENTES / C1 C2 C3 C4 C5/ : Demanda;ENDSETSDATA :DEMANDA = 5 1 3 4 6;ENDDATADemanda_total = @SUM(CLIENTES(J):DEMANDA(J));Demanda_total = @SUM(CLIENTES:DEMANDA);Demanda_3 = @SUM(CLIENTES(J)|J #LE3# :DEMANDA(J));

  • Funcin @MIN, @MAXSETS:CLIENTES / C1 C2 C3 C4 C5/ : Demanda;ENDSETSDATA :DEMANDA = 5 1 3 4 6;ENDDATAMin_demanda = @MIN(CLIENTES(J):DEMANDA(J));Max_demanda = @MAX(CLIENTES(J):DEMANDA(J));Min_demanda = @SUM(CLIENTES:DEMANDA);Max_demanda = @SUM(CLIENTES:DEMANDA);

  • Funcin @FORSETS:CAMIONES / RENAULT FORD DODGE / : CARGA;ENDSETS@FOR(CAMIONES(T) : CARGA(T)
  • Usando funciones de dominios para variables

    Tipos variablesdefinicin@GINVariable entera@BINVariable binaria @FREECualquier valor@BNDRango para la variable

  • Sintaxis @GIN(nombre_variable).@GIN(X);

  • Problema de la mochila : @BIN

    artculopesoRating112239343448541061675481010

  • Modelo LINGOMODEL:SETS:ARTICULOS /A1..A10/: PESO, RATING, INCLUYE;ENDSETSDATA:PESO RATING = 2938106410;CAPACIDAD_MOCHILA = 15;ENDDATA

  • Modelo LINGOMAX = @SUM(ARTICULOS: RATINGS * INCLUYE);

    @SUM(ARTICULOS:PESO*INCLUYE)

  • VARIABLES ACOTADAS@BND(cota_inferior,nombre_variable,cota_superior);