Вы находитесь на странице: 1из 33

Modelos con LINGO

IO1 R.Delgadillo 2
Introduccin
El LINGO es un software de
modelamiento y resolucin de
problemas lineales y no lineales de
optimizacin.
IO1 R.Delgadillo 3
Introduccin
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.
Caractersticas principales de LINGO incluyen:
Lenguaje de modelamiento algebraico
Opciones de datos convenientes
Modelo interactivo (crear aplicaciones )
Amplia documentacin y Ayuda
Herramientas y Solucionadores
IO1 R.Delgadillo 4
Introduccin de Modelos 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 Maiz 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
IO1 R.Delgadillo 5
Introduccin de Modelos 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
IO1 R.Delgadillo 6
Introduccin de Modelos con LINGO
La forma de escribirlo en LINGO es :
[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;
Obs:
La Funcin objetivo se escribe con Max = o Min =
La desigualdades se escriben <= o >= se abrevia por < o
>. La igualdad se escribe =
No es necesario introducir la restricciones de no negatividad
Cada instruccin termina obligatoriamente con ;
IO1 R.Delgadillo 7
Introduccin de Modelos con LINGO
Obs:
Los cambios de lnea son irrelevantes, por claridad se
escribe cada ecuacin en una lnea .
Las etiquetas van entre [] , y son opcionales, sirven para
relacionar la solucin que proporciona LINGO con las lneas
del modelo. La etiquetas no pueden contener espacio en
blanco, ni signos especiales( , , )
Los nombres de variables tampoco pueden contener
espacios ni signos especiales.
LiNGO no distingue entre maysculas y minsculas.
No se pueden omitir los signos de multiplicacin *
Es posible insertar lneas de comentario, empezando por un
signo ! Y terminando con ;
IO1 R.Delgadillo 8
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;
IO1 R.Delgadillo 9
Colocando titulo al modelo
IO1 R.Delgadillo 10
Interpretacin de los resultados
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:
IO1 R.Delgadillo 11
Interpretacin de los resultados
IO1 R.Delgadillo 12
Interpretacin de los resultados
La columna titulada Value contiene el valor ptimo de
cada variable.
En la columna titulada Slack or Surplus, la entrada
correspondiente a la funcin objetivo (INGRESOS)
contiene el valor ptimo de la funcin objetivo,
mientras que las restantes contienen las variables de
holgura de las restricciones. Por ejemplo, vemos que
para la solucin ptima sobran 10 000 kg de maz.
IO1 R.Delgadillo 13
Interpretacin de los resultados
La columna titulada Reduced Cost contiene (salvo el
signo) los multiplicadores de Kuhn y Tucker de las
variables del problema. El signo es el que se
corresponde con la interpretacin siguiente:
El coste reducido de una variable x que tome el valor
0 es lo que debe mejorar el coeficiente de x en la
funcin objetivo para que el valor ptimo de x pase
a ser no nulo. (Las variables que ya son no nulas
tienen coste reducido nulo.)
IO1 R.Delgadillo 14
Interpretacin de los resultados
por ejemplo, por cada saco de forraje de tipo 3 que
quisiramos fabricar, los ingresos disminuirn en S/1
o, equivalentemente, para que resulte rentable
fabricar sacos de forraje de tipo 3 es necesario que
su precio de venta aumente al menos en S/1.
IO1 R.Delgadillo 15
Interpretacin de los resultados
La columna Dual Price contiene (salvo el signo)
variables duales, en el caso de la PL) de las
restricciones (excepto la entrada correspondiente a la
funcin objetivo, cuyo valor es siempre igual a 1). El
signo es el que se corresponde con la interpretacin
siguiente:
El precio dual de una restriccin indica
aproximadamente lo que mejorar la funcin objetivo
por cada unidad que aumente el trmino
independiente de la restriccin.
Por ejemplo, por cada kg adicional de avena que
pudiramos conseguir los ingresos aumentaran en
S/ 0.36 .
IO1 R.Delgadillo 16
Interpretacin de los resultados
Si seleccionamos la opcin para que LINGO calcule
los intervalos de sensibilidad, LINGO Range . El
resultado es un nuevo documento .lgr con las tablas
siguientes
IO1 R.Delgadillo 17
Interpretacin de los resultados
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
IO1 R.Delgadillo 18
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. IO1 R.Delgadillo 19
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
IO1 R.Delgadillo 20
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)
IO1 R.Delgadillo 21
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;
ENDDATA
IO1 R.Delgadillo 22
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;
ENDDATA
IO1 R.Delgadillo 23
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, , ;
IO1 R.Delgadillo 24
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))<Existencias(c));
IO1 R.Delgadillo 25
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.
IO1 R.Delgadillo 26
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
IO1 R.Delgadillo 27
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);
IO1 R.Delgadillo 28
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.
IO1 R.Delgadillo 29
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))
IO1 R.Delgadillo 30
Ejemplo: problema de transporte
Dado un conjunto de fabricas y um
conjunto de almacenes y uma red de
posibles caminos (rutas) de conexion
entre ellas. El objetivo es determinar la
cantidad de envios que minimiza el
costo total.
IO1 R.Delgadillo 31
Ejemplo: problema de transporte
IO1 R.Delgadillo 32
0
1,...,
,..., 1
z
ij
m
i
j ij
n
j
i ij
j
ij ij
i
x
n j b x
m i a x
x c min
Ejemplo: problema de transporte
MODEL:
TITLE: Problema de Transporte
[FO] MIN = @SUM(rutas(i,j): costo(i,j)*qtdEnviada(i,j));
! Capacidades de las fbricas no se deben ser sobrepasar;
@FOR(fabricas(i): @SUM(almacen(j): qtdEnviada(i,j)) <=
capacidade(i));
! las demandas de los almacenes deben ser atendidos;
@FOR(almacen(j): @SUM(fabricas(i): qtdEnviada(i,j)) =
demanda(j));
@FOR(rutas(i,j): @GIN(qtdEnviada(i,j));
END
IO1 R.Delgadillo 33

Вам также может понравиться