03 Modelando Con LINGO
-
Upload
whaltherhq -
Category
Documents
-
view
24 -
download
0
description
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