03 Modelando Con LINGO

download 03 Modelando Con LINGO

of 40

description

Modelamiento con Lingo. Programacion basica

Transcript of 03 Modelando Con LINGO

  • Modelando con LINGO

  • R.Delgadillo 2

    Introduccin

    El LINGO es un software de modelaje y resolucin de problemas lineales y no lineales de optimizacin.

    LINGO integra:

    un lenguaje para expresar modelos de optimizacin

    un entorno completo para la creacin y edicin de los problemas, y

    un conjunto de solucionadores.

  • R.Delgadillo 3

    Introduccin

    Caractersticas principales de LINGO incluyen:

    Lenguaje de modelaje algebraico

    Opciones de datos convenientes

    Modelo interactivo (crear aplicaciones )

    Amplia documentacin y Ayuda

    Herramientas y Solucionadores

  • R.Delgadillo 4

    Introduccin

    El lenguaje de modelaje del LINGO permite representar un modelo de una forma simple e intuitiva

    Reescribiendo tanto la funcin objetivo como las restricciones de forma simple y directa.

  • R.Delgadillo 5

    Modelando con LINGO

    Ejemplo:

    Una empresa elabora tres tipos de forraje usando cuatro tipos de cereales. Cada saco de forraje contiene 50 kg. y se vende al precio (en soles) indicado en la tabla siguiente, que contiene tambin la composicin de cada saco y las existencias de cereales en la fbrica:

    Determinar el nmero de sacos que deber producir la empresa de cada tipo de forraje para maximizar el ingreso.

    Forraje Avena Maz Cebada Trigo Precio

    1 25 25 0 0 9

    2 0 20 20 10 12

    3 20 0 30 0 6.20

    Existenc 50000 80000 40000 10000

  • R.Delgadillo 6

    Modelando con LINGO

    El modelo matemtico correspondiente del problema es:

    Max 9x + 12y + 6.2z

    s.a 25x + 20z 50 000

    25x + 20y 80 000

    20y + 30z 40 000

    10y 10 000

    x, y, z >0

  • R.Delgadillo 7

    Modelando con LINGO

    En LINGO se escribe como:

    Max = 9*x+12*y+6.2*z;

    25*x+20*z < 50000;

    25*x+20*y < 80000;

    20*y+30*z < 40000;

    10*y < 10000;

    Obs:

    La Funcin objetivo se escribe con Max = (Min =)

    La desigualdades se escriben =) se abrevia por < (>). La igualdad se escribe =

    No es necesario introducir la restricciones de no negatividad

    Cada instruccin termina obligatoriamente con ;

  • R.Delgadillo 8

    Modelando con LINGO

    Obs:

    Los cambios de lnea son irrelevantes, por claridad se escribe cada ecuacin en una lnea .

    Los nombres de variables no pueden contener espacios ni signos especiales ( , , ) .

    LINGO no distingue entre maysculas y minsculas.

    No se pueden omitir los signos de multiplicacin *

  • R.Delgadillo 9

    Colocando titulo al modelo

    Es posible dar un titulo al modelo, que ser mostrado en la solucin generado por el LINGO.

    Para el ejemplo podemos colocar

    MODEL:

    TITLE: Problema de mezcla;

  • R.Delgadillo 10

    Colocando etiquetas

    Se puede colocar etiquetas (nombres) a las restricciones y funcin objetivo, esto es til por dos razones:

    Los etiquetas son usados en el listado de soluciones generadas, lo que facilita su lectura e interpretacin.

    Los mensajes de errores pueden mencionar la etiqueta para su localizacin.

  • R.Delgadillo 11

    Colocando etiquetas

    Las etiquetas van entre [] y se colocan al inicio de una restriccin o funcin objetivo

    Los etiquetas no pueden contener espacio en blanco, ni signos especiales( , , )

    Deben comenzar con un carcter alfabtico (A-Z), seguido de un alfabtico, numrico o un underline (_)

    No pueden exceder mas de 32 caracteres.

  • Colocando etiquetasEjemplo:

    [Ingresos] Max = 9*x+12*y+6.2*z;

    [Avena] 25*x+20*z < 50000;

    [Maiz] 25*x+20*y < 80000;

    [Cebada] 20*y+30*z < 40000;

    [Trigo] 10*y < 10000;

    R.Delgadillo 12

  • Colocando etiquetas

    Ejemplo:[FO] MIN = @SUM (rutas (i,j): costo(i,j) * qtdEnviada(i,j) );

    @FOR(fabricas(i):

    [Cap_fabricas] @SUM(almacenes(j):qtdEnviada(i,j))

  • Insertando comentarios

    Un comentario queda definido por un signo de exclamacin (!) y un punto y coma (;) los cuales determinan su inicio y fin.

    Ejemplo

    ! Funcin Objetivo;

    [Ingresos] Max = 9*x+12*y+6.2*z;

    ! Las capacidades de las fabricas no se pueden sobrepasar;

    @FOR(fabricas(i):

    @SUM(almacenes(j):qtdEnviada(i,j))

  • R.Delgadillo 15

    Modelo

  • R.Delgadillo 16

    Dando solucin al modelo Una vez introducido un modelo, LINGO lo resuelve si

    seleccionamos el men LINGO Solve

    O, si pulsamos en el icono en forma de diana.

    LINGO genera entonces un documento .lgr que, para el ejemplo anterior contiene lo siguiente:

  • R.Delgadillo 17

    Solucin

  • Operadores y funciones del LINGO

    Los operadores pueden ser:

    Binarios: cuando requieren dos argumentos, uno inmediatamente a la derecha e izquierda del operador

    Unarios: cuando requiere apenas un argumento.

    R.Delgadillo 18

  • Operadores y funciones del LINGO

    Operadores Aritmticos

    LINGO posee cinco operadores aritmticos binarios:

    El nico operador unario, es la negacin (-), que es aplicado al operando inmediatamente a la derecha del signo de negacin.

    R.Delgadillo 19

    Operador Descripcin

    ^ Potenciacin

    * Multiplicacin

    / Divisin

    + Adicin

    - Substraccin

  • Operadores y funciones del LINGOLos operadores Lgicos:

    Son usados principalmente en expresiones condicionales

    Retornan TRUE (1) o FALSE (0)

    R.Delgadillo 20

    Operador Valor de Retorno

    #NOT# TRUE si el operando a la derecha es falso

    #EQ# TRUE si los operando son iguales

    #NE# TRUE si los operando no son iguales

    #GE# TRUE Si el operando de la izq. >= que el de la der.

    #GT# TRUE si el operando de la izq. > que el de la der.

    #LE# TRUE si el operando de la izq.

  • Operadores y funciones del LINGO

    Los operadores relacionales: son usados en el modelo para especificar si el lado izquierdo de una expresin debe ser igual, menor o mayor que el lado derecho

    R.Delgadillo 21

    Operador Descripcin

    = La expresin de la izq. Debe ser igual a la expresin de la derecha

    = La expresin de la izq. Debe ser mayor o igual a la expresin de la derecha

  • Operadores y funciones del LINGO

    El nivel de prioridad de los operadores es:

    R.Delgadillo 22

    Nivel Operadores

    Alto #NOT# -(negacin)

    ^

    * /

    + -

    #EQ# #NE# #GT# #GE# #LT# #LE#

    #AND# #OR#

    Bajo =

  • Operadores y funciones del LINGO

    LINGO tiene un conjunto de funciones matemticas:

    R.Delgadillo 23

    Funcin Retorna

    @ABS(X) Regresa el valor absoluto de X

    @COS(X) Regresa el coseno de X, X es un ngulo en radianes

    @SIN(X) Regresa el seno de X, X es un ngulo en radianes

    @TAN(X) Regresa la tangente de X, X es un ngulo en radianes

    @FLOOR(X) Regresa el menor entero mas prximo de X

    @SMIN(X1, X2,XN)

    Regresa el valor mnimo de los elementos X1, X2, , XN

    @SMAX(X1, X2,XN)

    Regresa el valor mximo de los elementos X1, X2, , XN

  • Operadores y funciones del LINGO

    Funciones de dominio: LINGO asume que las variables son continuas e mayores o iguales a cero, sin embargo las variables pueden tomar valores distintos de estos

    R.Delgadillo 24

    Funcin Descripcin

    @BIN (variable) Limita a la variable a asumir valores 0 1

    @BND(inf,var,sup) Limita a la variable a sumir valores entre inferior y superior

    @FREE(variable) Permite que la variable asuma valores (-,0,+)

    @GIN(variable) Limita a la variable a asumir valores enteros

  • El problema de mezcla

    El problema de mezcla anterior puede ser reescrito de esta forma:

    Donde:

    = Es la variable de decisin, que indica la cantidad de cereal i que se incluye en la mezcla.

    = Es el precio del forraje de tipo i

    = La cantidad que se tiene en stock del cereal j

    = La cantidad de cereal j que se utiliza en la produccin del forraje i. R.Delgadillo 25

    0

    ,...,1 s.a

    z max

    j

    n

    j

    ijij

    j

    jj

    x

    mibxa

    xc

    jx

    jc

    ib

    ija

  • Conjuntos

    LINGO permite introducir los modelos en trminos de conjuntos de ndices, lo cual aporta numerosas ventajas:

    Las ecuaciones son independientes de los datos

    Si el modelo tiene varias ecuaciones que siguen un mismo esquema, se pueden introducir todas ellas como una nica frmula general.

    La estructura del modelo se simplifica

    R.Delgadillo 26

  • Conjuntos

    Para el problema de mezcla:

    SETS:

    Cereal/Avena, Maiz, Cebada, Trigo/:Existencias;

    Forraje /1..3/: Precio, Sacos;

    ENDSETS

    Las palabras SETS: ENDSETS determinan una seccin en un modelo de LINGO.

    Para definir un conjunto escribimos su nombre, luego sus elementos entre barras / / y luego separadas por : las variables asociadas al conjunto.R.Delgadillo 27

  • Conjuntos

    Para asignar un valor fijo a algunas variables (y convertirlas as en constantes) usamos una seccin DATA:

    DATA:

    Existencias = 50000 80000 40000 10000;

    Precio = 9, 12, 6.20;

    ENDDATA

    R.Delgadillo 28

  • Conjuntos

    Si hubiramos querido asignar a todas las existencias el valor 10 000 podramos haber escrito Existencias = 10000;

    Si hubiramos querido dejar las existencias de cebada como variable podramos haber escrito:

    Existencias = 50000, 80000, , 10000;

    (en este caso es obligatorio el uso de comas)

    R.Delgadillo 29

  • Conjuntos

    La declaracin de los elementos de un conjunto puede hacerse indistintamente en la seccin SETS o DATA. Ejemplo:

    SETS:

    Cereal:Existencias;

    Forraje/1..3/: Precio, Sacos;

    ENDSETS

    DATA:

    Cereal = Avena Maiz Cebada trigo;

    Existencias = 50000 80000 40000 10000;

    Precio = 9, 12, 6.20;

    ENDDATAR.Delgadillo 30

  • Conjuntos Para introducir la cantidad de cada cereal que

    contiene cada tipo de forraje. SETS:

    Cereal:Existencias;

    Forraje/1..3/: Precio, Sacos;

    Par (forraje, cereal):cantidad;

    ENDSETS

    DATA:

    Cereal = Avena Maiz Cebada trigo;

    Cantidad = 25 25 0 0

    0 20 20 10

    20 0 30 0;

    Existencias = 50000 80000 40000 10000;

    Precio = 9, 12, 6.20;

    ENDDATAR.Delgadillo 31

  • conjuntos

    Es posible asignar un valor inicial a una variable sin que por ello LINGO deje de considerarla variable. Para ello no asignamos el valor en la seccin DATA, sino en una seccin INIT:

    INIT:

    sacos = 1000;

    ENDINIT

    As, las tres variables sacos toman el valor inicial 1000. Si slo queremos asignar dicho valor a sacos(1) escribimos sacos = 1000, , ;

    R.Delgadillo 32

  • Ecuaciones sobre conjuntos

    Para introducir las ecuaciones de un modelo cuando los datos estn expresados en trminos de conjuntos. Para el ejemplo:

    [Ingresos] Max = @Sum(Forraje(p):

    precio(p)*sacos(p));

    @For(Cereal(c):[Limite] @Sum(forraje(p): Cantidad(p, c)*sacos(p))

  • Ecuaciones sobre conjuntos

    La lnea de la funcin objetivo empieza como siempre, con una etiqueta seguida de Max =.

    @Sum() : Suma para todo forraje p el precio de p por el nmero de sacos producidos de p.

    @For(): define simultneamente cuatro restricciones, una para cada cereal. Se lee: Para todo cereal c, definimos la restriccin etiquetada [Limite] como que la suma para todo forraje p de la cantidad de cereal c en el forraje p por el nmero de sacos producidos de p ha de ser que las existencias de c.

    R.Delgadillo 34

  • Ecuaciones sobre conjuntos

    Las instrucciones de LINGO que recorren los elementos de un conjunto son las siguientes:

    @For(Conjunto(i): ) Repite una tarea para todo i

    @Sum(Conjunto(i): ) Suma una expresin para todo i

    @Prod(Conjunto(i): ) Multiplica una expresin para todo i

    @Max(Conjunto(i): ) Calcula el mximo para todo i

    @Min(Conjunto(i): ) Calcula el mnimo para todo i

    @Writefor(Conjunto(i): ) Escribe una expresin para todo i

    R.Delgadillo 35

  • Ecuaciones sobre conjuntos

    En general, cuando dentro de estas instrucciones slo aparece un ndice, ste se puede suprimir.

    Por ejemplo, la funcin objetivo se podra haber introducido as:

    [Ingresos] Max = @Sum(Forraje: precio*sacos);

    R.Delgadillo 36

  • Ecuaciones sobre conjuntos

    Podemos anidar cualquiera de estas instrucciones dentro de otra. Por ejemplo:

    @Sum(A(i): @Sum(B(j): c(i)*d(j)))

    calcula la suma de ci*dj para todo i del conjunto A y todo j del conjunto B.

    R.Delgadillo 37

  • Ecuaciones sobre conjuntos

    Los bucles pueden recorrer conjuntos de pares, ternas etc., en cuyo caso hemos de introducir tantas variables como componentes tiene el conjunto. Por ejemplo, si queremos sumar todas las cantidades para todo forraje y todo cereal, podemos escribir:

    @Sum(Par (p, c): Cantidad(p, c))

    R.Delgadillo 38

  • El problema de Mezcla[Ingresos] Max = @Sum(Forraje(p): precio(p)*sacos(p));

    @For(Cereal(c):

    [Limite] @Sum(forraje(p): Cantidad(p,c)*sacos(p))

  • Ejercicios

    Modele y resuelva los problemas:

    1, 2 y 3 de los ejercicios de Modelos lineal.

    R.Delgadillo 40