Está en la página 1de 8

Aprendiendo LINGO

INTRODUCCIN A LINGO - 1

Introduccin a LINGO
LINGO (LINear Generalize Optimizer) es una verstil herramienta para la formulacin,
resolucin y anlisis de problemas de programacin lineal y no lineal. Esto significa que
usando LINGO es posible resolver sistemas de ecuaciones con una o varias variables
independientes (modelos directos) o bien una o varias variables interdependientes
(optimizacin multiobjetivo) solamente ingresando como mximo unas decenas de lneas.
LINGO est disponible para DOS, Windows y Linux. Al margen de que las interfaces
pueden diferir, las versiones para cada una de estas plataformas tienen exactamente las
mismas funcionalidades.
Uno de los rasgos ms destacables de LINGO es su lenguaje de modelado. Este lenguaje
permite expresar un problema de una manera muy similar a la notacin matemtica
normal. Adems es posible expresar sumatorias 1 mediante expresiones iterativas, lo cual
lleva a modelos que son ms compactos y fciles de mantener. Otro aspecto a destacar
del lenguaje de modelado es la seccin de datos, que permite aislar los datos de la
formulacin del modelo. Por esto LINGO puede leer datos incluso de una hoja de clculo
separada, base de datos, o archivo de texto. Con datos independientes del modelo, es ms
simple hacer cambios, y se reduces las posibilidades de equivocarse al plantear el modelo.
La ventaja de la proximidad del lenguaje de modelado con el lenguaje del modelo
matemtico estndar es que el alumno no debe conocer demasiado el lenguaje de
modelado, slo debe saber plantear los modelos matemticos de los problemas a resolver.
Hoy da los Solvers comerciales ms avanzados, tales como CPLEX (el solver por default
de LINGO), pueden ser vistos como una caja negra donde el usuario puede enviar modelos
en gran escala, con cientos de miles de variables, y estar razonablemente seguro que el
paquete producir una solucin, sin interaccin especial alguna por parte del usuario. El
tamao de los problemas que las corporaciones estn tratando han crecido
dramticamente. Esto significa que los usuarios necesitan herramientas ms avanzadas
para recopilar y administrar los datos, formular modelos y enviarlos al solver. Aqu es
donde un lenguaje de modelado es muy valioso.

Sumas generalizadas.

Ing. Gabriel Arellano

APRENDIENDO LINGO
2 - INTRODUCCIN A LINGO

Comenzando a utilizar LINGO


La manera ms directa de aprender a montar es subirse al caballo, siguiendo esa premisa,
comenzaremos nuestro aprendizaje mediante el planteo y resolucin de uno de los
problemas clsicos de la programacin lineal, me refiero por supuesto, al problema de
mezcla de productos.
Utilizaremos como punto de partida el problema de la Wyndor Glass Co. Planteado como
ejemplo prototipo a lo largo de la mayora de los captulos de la quinta edicin del libro
Introduccin a la Investigacin de Operaciones de Hillier-Lieberman.
El planteo de este problema se puede leer en la seccin 3.1 del mencionado libro y se
resume a continuacin:
La W YNDOR GLASS CO. produce artculos de vidrio de alta calidad, incluyendo ventanas y
puertas de vidrio. La empresa tiene tres plantas de produccin. Los marcos y molduras se
hacen en la planta 1, los marcos de madera se fabrican en la planta 2 y en la 3 se produce
el vidrio y se ensamblan los productos.
Debido a que las ganancias se han reducido, la gerencia general ha decidido reorganizar
la lnea de produccin. Se descontinuarn varios productos no rentables y se dejar libre
una parte de la capacidad de produccin para emprender la fabricacin de uno o dos
productos nuevos que han tendido demanda. Uno de los productos propuestos (Producto
1) es una puerta de vidrio de 2,6 m con marco de aluminio. El otro (Producto 2) es una
ventana grande (1,3 m x 2 m) para vidrio doble con marco de madera. El departamento de
mercadotecnia ha obtenido como conclusin que la compaa puede vender todo lo que
pueda producir de cualquiera de los productos. Sin embargo, como ambos productos
compiten por la misma capacidad de produccin de la planta 3, no es obvio qu mezcla de
los dos productos sera ms redituable. Por todo esto, la gerencia pidi al departamento de
investigacin de operaciones que estudiara el asunto.
Despus de hacer algunas investigaciones, el departamento mencionado determin:
1. El porcentaje de capacidad de produccin de cada planta para cada producto.
2. El porcentaje de esta capacidad que requiere cada unidad producida por minuto.
3. La ganancia unitaria de cada producto.
Esta informacin se resume en la siguiente tabla:
Planta

Producto
1
1
0
3

2
0
2
2

Capacidad
Disponible
4
12
18

1
2
3
Ganancia
3
5
unitaria
Datos del problema de Wyndor Glass Co.

Ing. Gabriel Arellano

Aprendiendo LINGO
INTRODUCCIN A LINGO - 3
Para formular el problema lineal primero debemos determinar los elementos del mismo:
Variables de decisin:
Funcin Objetivo:

x1: unidades producidas del producto 1 por minuto.


x2: unidades producidas del producto 2 por minuto.
Z = 3x1 + 5x2

La funcin objetivo representa la contribucin a la ganancia por minuto por lo cual


deseamos maximizarla.
4
12
18

Restricciones: x1
2x2
3x1 + 2x2

Capacidad Planta1.
Capacidad Planta2.
Capacidad Planta3.

Entonces el modelo matemtico del problema sera:

Z = 3x1 + 5x2
Sujeto a:

x1
2x2
3x1 + 2x2

Max
4
12
18

x1 0 ; x2 0

Modelo matemtico del problema.


El modelo matemtico expresado en el lenguaje de modelado de LINGO sera:
! Problema 3.1 Hillier-Lieberman Pag. 30 - Wyndor Glass Co.
Xj = Cantidad a producir del producto j ;
Max = 3*X1 + 5*X2;
!Sujeto a: ;
X1

<=4;
2*X2 <=12;
3*X1 + 2*X2 <=18;

Problema equivalente en lenguaje LINGO.


A menos que especifique lo contrario, el valor de las variables por defecto en un modelo de
LINGO son no-negativas y continuas. Por ello para nuestro modelo no es necesario incluir
las condiciones de no negatividad.
Las lneas que comienzan con ! son comentarios y sern ignoradas por Lingo.
De forma ms general un comentario es un bloque de texto (puede estar
compuesto de una o ms lneas) que comienza con un signo de exclamacin (!) y
termina con punto y coma (;).

Ing. Gabriel Arellano

APRENDIENDO LINGO
4 - INTRODUCCIN A LINGO
Como siguiente paso debemos ingresar este modelo en la aplicacin para lo cual debemos
iniciar la aplicacin:

Seleccionando el men: Inicio Programas Lingo XX Lingo XX

O haciendo doble click en el icono LINGO del escritorio

Luego de iniciar la aplicacin aparece la pantalla principal de LINGO y un modelo en


blanco:

Como puede observarse se trata de dos ventanas: en primer plano la ventana del modelo
actual (con fondo blanco) y detrs se encuentra el entorno de programacin de LINGO del
cual se pueden destacar tres reas: en la parte superior el men de opciones, debajo la
barra de botones y en la parte inferior la barra de estado (donde se puede observar: el
estado del solver, la posicin en el modelo, etc).
Proceda a escribir el modelo en la ventana del modelo (note que la sintaxis de cada uno de
los componentes del mismo se destaca en un color diferente) y cuando este listo proceda
a guardarlo mediante la opcin Save del men File o mediante el botn guardar de la barra
de men. Dele el nombre que considere conveniente, en nuestro caso lo nombramos
[Hill97] - Cap. 3 - Pag. 30 - Ej. 3.1 como se podr observar en la barra de ttulo de la
ventana del modelo. Los archivos de LINGO por default tienen la extensin .lg4.

Ing. Gabriel Arellano

Aprendiendo LINGO
INTRODUCCIN A LINGO - 5
Luego de guardar nuestro modelo estamos en condiciones de ordenar a LINGO que intente
resolverlo. Para esto ltimo recurrimos a la opcin SOLVE del men LINGO o bien al botn
Solve (indicado en la imagen).

Al finalizar la resolucin del modelo nos mostrar la ventana de resultados:


Global optimal solution found at iteration:
Objective value:
Variable
X1
X2
Row
1
2
3
4

Value
2.000000
6.000000
Slack or Surplus
36.00000
2.000000
0.000000
0.000000

3
36.00000
Reduced Cost
0.000000
0.000000
Dual Price
1.000000
0.000000
1.500000
1.000000

En primer lugar podemos observar el nmero de iteraciones, en realidad el nmero de


iteraciones ms uno (ya que Lingo llama a la primera SBF como iteracin uno).
A continuacin nos informa el valor de la funcin objetivo en el punto ptimo (en nuestro
ejemplo 36), el valor de las variables bsicas y su costo reducido, y por ltimo el sobrante
(o slack) y el precio sombra (dual price) de cada restriccin. Se debe tener en cuenta que
la fila (row) 1 es el funcional.

Ing. Gabriel Arellano

APRENDIENDO LINGO
6 - INTRODUCCIN A LINGO

El lenguaje de modelado de LINGO


Sintaxis de LINGO
La sintaxis que se utiliza en este programa es muy sencilla. Para el nombre de las
variables y otros identificadores se establece que pueden tener 32 caracteres como
mximo, Deben comenzar con una letra seguido de letras, dgitos o _. LINGO no distingue
entre maysculas y minsculas.
Con respecto a las sentencias:
Todas las sentencias deben terminar en un punto y coma.
Para darle un nombre a la funcin objetivo o a las restricciones, estos se deben
colocar entre corchetes.
Para declarar la funcin objetivo debemos colocar las palabras reservadas MAX
o MIN, (aparecern resaltadas en azul), seguidas del signo =.
Los comentarios deben comenzar con un signo !, los cuales aparecen
resaltados en verde.
Nombre de las restricciones
Como se pudimos observar en los resultados de la resolucin del problema resulta un
poco confuso distinguir las distintas restricciones del modelo.
LINGO tiene la habilidad de nombrar las restricciones en su modelo. sta es una buena
prctica por dos razones:
Primero, los nombres de restricciones se usan en el reporte de las soluciones
que los hacen ms fcil interpretar.
Segundo, en muchos de los mensajes de error de LINGO se indica la restriccin
mediante su nombre.
Dar nombre a una restriccin es bastante simple. Se inserta el nombre entre corchetes,
adelante de una lnea de cdigo. El nombre debe obedecer los requisitos normales para un
identificador de LINGO.
! Problema 3.1 Hillier-Lieberman Pag. 30 - Wyndor Glass Co.
Xj = Cantidad a producir del producto j ;
[Beneficio] Max = 3*X1 + 5*X2;
!Sujeto a:
Restricciones de tiempo de produccion;
[Planta_1]
X1
<=4;
[Planta_2]
2*X2 <=12;
[Planta_3]
3*X1 + 2*X2 <=18;

Modelo con nombres en las restricciones.


Resuelva nuevamente el modelo y notar los cambios:
....

Ing. Gabriel Arellano

Variable
X1
X2

Value
2.000000
6.000000

Row
BENEFICIO
PLANTA_1
PLANTA_2
PLANTA_3

Slack or Surplus
36.00000
2.000000
0.000000
0.000000

Reduced Cost
0.000000
0.000000
Dual Price
1.000000
0.000000
1.500000
1.000000

Aprendiendo LINGO
INTRODUCCIN A LINGO - 7

Uso de funciones de dominio de variables


Como se dijo anteriormente, a menos que especifique lo contrario, el valor de las variables
por defecto en un modelo de LINGO son no-negativas y continuas. Ms especficamente,
las variables pueden asumir algn valor real desde cero a infinito positivo. En muchos
casos, este dominio de valor por defecto puede ser impropio. Por ejemplo, se puede querer
una variable que asuma valores negativos, o se podra querer una variable restringida
puramente a valores enteros. LINGO proporciona cuatro funciones de dominio de variables
que permite sustituir el dominio predefinido de una variable. Los nombres de estas
funciones y una descripcin breve de su uso son:
@GIN restringe el dominio de la variable a valores enteros.
@BIN hace que la variable tome valores binarios (es decir, 0 o 1).
@FREE permite que la variable pueda asumir cualquier valor real.
@BND limita los valores de la variable a un rango finito.
Variables enteras y binarias
LINGO le da la posibilidad de definir dos tipos de variables enteras, una general y otra
binaria. Una variable entera general requiere ser un nmero entero. Una variable entero
binaria requiere ser cero o uno. Cualquier modelo que contiene uno o ms variables
enteras, es requerido para un modelo programacin entera (IP)
En muchos proyectos de modelos, usted se enfrentar con tipos de decisiones (si/no).
Algunos ejemplos incluiran Produce/No Produce, Abre un Plan/Cierra un Plan, etc. Las
variables binarias son el mtodo normal usado por modelar estas decisiones de si/no.
Variables libres
Por default, las variables en LINGO tiene un lmite inferior de cero y un lmite superior de
infinito. @FREE quita el lmite inferior cero y permite que la variable tome valores
negativos. La sintaxis es:
@FREE (nombre_de_variable);
donde la variable_name es el nombre de la variable libre.
La funcin @FREE puede usarse en cualquier parte del modelo donde normalmente ira
una restriccin. Un ejemplo de @FREE sera:
@FREE (X1);

hara libre a la variable X1.

Variables limitadas
Considerando que @FREE pone el lmite superior e inferior de la variable especificada a
ms-menos infinito (quitando cualquier lmite en la variable), la funcin de @BND le
permite poner lmite superior e inferior especficos en una variable. En otras palabras,
@BND limita el rango de una variable dentro de algn intervalo.
La sintaxis para @BND es:
@BND (lower_bound, nombre_de_variable, upper_bound);

donde el nombre_de_variable es la variable a ser limitada debajo por el limite_inferior y


limitada superiormente por el limite_superior. Limite_inferior y limite_superior deben ser
valores numricos o variables cuyos valores han sido fijados en la seccin de datos.
@BND puede usarse en cualquier lugar que normalmente se usara una restriccin en el
modelo.

Ing. Gabriel Arellano

APRENDIENDO LINGO
8 - INTRODUCCIN A LINGO
En trminos matemticos, LINGO interpreta @BND como:
limite_inferior <= nombre_de_variable <= limite_superior
Adems, @BND no cuenta contra el lmite del nmero total de restricciones que
Lingo impone en algunas versiones. En general, se usa @BND en lugar de una
restriccin siempre que sea posible.
Un ejemplo de @BND sera:
@BND (-1, X1, 1);

hara que la variable X1 slo pueda tomar valores entre -1 y 1.


Operadores y Funciones
LINGO proporciona varias funciones y operadores para agergar al modelo matemtico. Se
muestran las categoras siguientes:

Los Operadores Normales: Aritmtica, lgicos, y correlativos como +, -, =, <=.


Mathematical: las funciones matemticas, trigonomtricas y generales.
Financial : las funciones financieras.
Probabilidad: las Funciones utilizadas para determinar una gama amplia de
probabilidad y las respuestas estadsticas.
Dominio de variables : son funciones que definen el rango de valores (dominio)
que una variable puede asumir.
Manejadores de conjuntos: las funciones tiles para manipular conjuntos.
Set Looping: Funciones loop que se utilizan para realizar operaciones en un
conjuntos de datos.
Import/Export: son funciones que crean conexiones con las fuentes de los datos
externas.
Miscellaneous: funciones de distintos tipos.

Ing. Gabriel Arellano

También podría gustarte