Académique Documents
Professionnel Documents
Culture Documents
OPTIMIZACIÓN MATEMÁTICA
LINGO Optimization Modeling Software for Linear, Nonlinear, and
Integer Programming
CONTENIDOS
I. INTRODUCCIÓN
El presente apunte corresponde a una guía general para la utilización del software LINGO,
contiene las principales aplicaciones utilizadas, acompañadas de ejemplos ilustrativos para
que el alumno comprenda el funcionamiento del software a las múltiples aplicaciones que
puede desarrollar. Para mayores antecedentes sobre el uso de LINGO, se recomienda hacer
uso de la ayuda oficial del software.
Para obtener la versión libre del programa Lingo visitar: http://www.lindo.com. Para
continuar la instalación hay que seguir con los enlaces Downloads en la página, elegir la
versión LINGO apropiada para su computador.
Al iniciar LINGO por primera vez le solicitara una serial (licencia de uso), dependiendo de la
serial ingresada usted podrá hacer uso de diferentes potencialidades del software y
determinara el tamaño del problema que puede resolver, la licencia puede ser adquirida en el
mismo sitio WEB. En el caso que usted no disponga de una serial se asume que utilizara la
versión de estudiante (libre) la cual tiene limitaciones de uso: 150 restricciones, 300 variables,
30 variables enteras y 30 expresiones no lineales
La sintaxis básica para resolver un modelo en LINGO se basa en las siguientes reglas:
Toda sentencia finaliza con un “;”, pudiendo utilizar más de una línea de código.
La función objetivo inicia con “max=” o “min=”, según corresponda y finaliza en “;”.
Las desigualdades pueden escribirse de forma estricta, aunque LINGO las interpreta
siempre como <= o >=, según el caso.
Los nombres de las variables comienzan con un carácter alfabético (A-Z) y no aceptan
espacios pudiendo utilizar hasta 32 caracteres.
Se pueden introducir comentarios, que serán ignorados por LINGO, comenzando con
“!” y terminando “;”.
AC+AD+AE<80; ! Esto es
Un comentario;
Para que LINGO resuelva el problema es suficiente con hacer clic sobre el botón Solve.
LINGO primero compila el modelo formulado, en el caso de que la formulación sea incorrecta
(ya sea desde un punto de vista matemático o de sintaxis), nos devolverá una ventana con el
siguiente mensaje:
En general los errores mas recurrentes consisten en olvidar “;” o signos de multiplicación “*”
y diferencias en los nombres de la variables. El mensaje de error nos indicara el tipo de error
detectado y también la línea de código donde ocurre.
Si no hay errores en la formulación del problema durante la etapa de solución, LINGO utilizara
al módulo de resolución adecuado para buscar la solución óptima. En la ventana ‘STATUS’ se
puede monitorear el proceso de resolución. En general la solución de un modelo ocurre en
tiempo de proceso bastante reducido, sin embargo, problemas de gran tamaño o complejidad
pueden demorar, se recomienda hacer seguimiento a Elapsed Runtime, donde se registra el
tiempo de proceso para verificar el adecuado funcionamiento. En la ilustración 2, se muestra
el BOX SOLVER STATUS, con una breve explicación de cada uno de sus bloques de
información.
Cantidad de memoria
que está utilizando
LINGO para resolver el
modelo.
Best Obj: Valor de la
función objetivo de la mejor
solución entera encontrada Tiempo total utilizado
(solo en modelos de para generar y resolver
programación entera) el modelo. modelo.
Obj Bound: Límite teórico
de la función objetivo para
modelos de programación
entera.
Costos Reducidos. se
puede interpretar el costo
Valor de la función objetivo y N° de iteraciones reducido de una variable
utilizadas para resolver el problema. como la cantidad en que
debería mejorar el
coeficiente de una variable
en la función objetivo,
antes de que llegue a ser
Valores de las variables, rentable dar a la variable
para alcanzar la función en cuestión un valor.
objetivo.
Precios Duales, asociada
a cada restricción. Usted
Holguras, le dice cuán cerca puede interpretar el precio
esta usted de satisfacer una dual de una restricción
restricción como una como la cantidad en que
igualdad. mejoraría el valor óptimo
de la función objetivo, si el
término libre o valor
constante de la restricción
fuese aumentado en una
unidad.
Existe el caso cuando el problema resulta infactible, es decir que el conjunto de restricciones
no genera una región de soluciones posibles, cuando esto ocurre LINGO igualmente resuelve
el problema “rompiendo” la(s) restricción(es) infactibles y mostrando el siguiente mensaje.
PRACTICA LAB-N°1
PROBLEMA 1:
Compupc produce dos modelos de computadoras Estándar y Turbo. Compupc puede vender
cada modelo Estándar que sea capaz de producir con una contribución a las utilidades de US$
100 y cada modelo Turbo con una contribución de US$ 150. La línea de producción del
modelo Estándar puede producir como máximo 100 computadoras al día. Al mismo tiempo, la
línea del modelo Turbo puede lograr una producción de 120 computadoras por día.
Compupc, tiene una disponibilidad limitada de mano de obra (H-H) por día que es de 160 H-H.
Los computadoras Estándar necesitan 1 H-H mientras los computadoras Turbo son un poco
más intensos en necesidad de mano de obra y requieren 2 H-H.
ACTIVIDADES:
Valor de la función objetivo y las variables.
Cantidad disponible en ambas líneas de producción.
¿Cuánto aumentara la utilidad de la empresa si se incrementa en una unidad la mano
de obra disponible?
PROBLEMA 2:
En una granja avícola se crían pollos que deben recibir diariamente al menos 24 unidades de
hierro y 8 de vitaminas. Los animales se alimentan con maíz, harina de huesos y una mezcla
especial para aves. El maíz proporciona 2 unidades de hierro y 5 de vitaminas. La harina de
huesos aporta 4 unidades de hierro y 1 de vitaminas. La mezcla proporciona 2 unidades de
hierro y 1 de vitaminas.
El coste del maíz, la harina de huesos y la mezcla es 40, 20 y 60 u.m. por unidad de alimento,
respectivamente. Se desea conocer qué cantidad de alimento de cada tipo debe utilizarse
para minimizar el costo de alimentar a los pollos.
ACTIVIDADES:
Valor de la función objetivo y las variables.
Si la cantidad de vitaminas requerida aumentara en 5 unidades, ¿cuál sería el costo
mínimo?
La cantidad de hierro que proporciona la dieta óptima ¿supera la cantidad mínima
requerida? Justifique la respuesta.
Si el coste de la mezcla para aves aumentara, ¿se obtendría la misma dieta óptima que
se calculó? ¿valdría la misma respuesta para cualquier aumento de este coste?
Si el coste de la mezcla para aves disminuyera, ¿para qué valores de este coste
podríamos asegurar que la dieta óptima es la misma que se obtuvo?
Optimización Matemática Página 8 Mg. Ing. José Grandón R.
Universidad de Santiago de Chile
Departamento de Ingeniería Geográfica
Análisis de sensibilidad se realiza con la opción de menú LINGO, Range. Si no está activada
está posibilidad hay que activarla previamente con LINGO, Options, General Solver, Dual
Computations, Prices & Ranges. En todo caso, este tipo de análisis estará disponible tras
resolver el modelo y no antes y desde la ventana del modelo, no desde la ventana de la
solución (Ver Ilustración 5) .
El análisis de sensibilidad entregado por LINGO, muestra los coeficientes de las variables X1 y
X2, en la función objetivo al igual que los incrementos y decrementos que dichas variables
pueden aceptar, sin modificar la actual solución del problema, es decir, el coeficiente de la
variable X1 puede encontrarse dentro del intervalo [0;7,5], sin alterar el punto optimo
encontrado.
Para recordar la función objetivo del problema es Max=3*x1+5*x2, por tanto el actual
coeficiente de x1 en la función objetivo es 3 lo que corresponde a Current Coefficient. Este
coeficiente puede ser aumentado en 4,5 lo que corresponde a Allowable Increase y
disminuido en 3 correspondiente a Allowable Decrease.
Igualmente el coeficiente de x2 puede estar en el intervalo [2;∞+] sin alterar el punto optimo.
PRACTICA LAB-N°2
PROBLEMA 1:
Don Ricardo Soto, dueño de la Empresa Piedras Soto, dedicada a la extracción y distribución
de áridos para el sector de la construcción se encuentra buscando nuevas estrategias para
manejar su negocio. Piedras Soto, es una empresa familiar que tiene una concesión municipal
que le permite extraer diariamente 4 toneladas de material de las riveras del río Mapocho.
Don Ricardo ha concentrado la explotación en dos tipos de material, ripio y arena, el negocio
es bastante bueno, pues debido a la alta demanda es posible vender toda la producción. Las
ventas son administradas por la Sra. Juana González de Soto, esposa de Don Ricardo, quien es
la encargada de responder a los requerimientos de los clientes de la empresa y estudiar la
competencia para establecer los precios de venta de los productos. Ella ha determinado,
según las condiciones actuales de mercado, fijar el precio de la arena a $15 mil, cada tonelada
y el ripio a $20.mil, cada tonelada.
La extracción del material se encuentra a cargo de Don José Soto, hijo mayor de Don Ricardo,
para lo cual cuenta con una maquina que opera 6 horas diarias, según su experiencia se
requiere de 1 hora para extraer una tonelada de arena y dos horas para extraer una tonelada
de ripio.
Hoy en día, luego de varios pruebas realizadas se encuentran muy conformes con sus niveles
de producción, según datos aportados por un experto, se encuentran produciendo una
optima combinación de productos pero cada uno de los integrantes de la empresa ha
manifestado algunas inquietudes con respecto a la operación de la empresa.
Don Ricardo y Don José quieren mejorar los ingresos de la empresa para lo cual discuten
sobre diferentes posibilidades, Don Ricardo pretende aumentar la cuota de extracción
solicitando a la municipalidad le permita explotar una tonelada mas diariamente, Don José
opina que esta alternativa no produciría efectos significativos, y plantea aumentar el tiempo
de explotación en una hora mas diaria, con este piensa que tendría mejores resultados.
La Sra. Juana piensa que es mejor que la empresa sea monoproductora pues la crisis que
amenaza el rubro de la construcción generara efectos sobre el precio de la arena pudiendo
llegar a valores de $10 mil la tonelada por lo que opina que no seria rentable seguir
extrayéndola y deberían dedicarse solo al ripio.
ACTIVIDADES: Justificando con las herramientas apropiadas de Lingo determine ¿Quién tiene
la razón?
LABORATORIO 3 “CONJUNTOS”
SETS:
Nombreconjunto / Elem1, Elem2, …., ElemN/:Caract1, Caract2….., CaractN;
Nombreconjunto2 / 1..N/:Caract1, Caract2….., CaractN;
ENDSETS
Los vectores creados en la sección SETS pueden ser de variables o de datos del problema. En
este último caso, hay que asignar a cada vector o matriz de datos sus valores. La asignación
de valores o datos del problema se realiza en la sección DATA del modelo. Además de las
secciones SETS, DATA y, en su caso INIT, el resto de las líneas del modelo se encargan de
describir el problema de optimización. En ellas se puede utilizar el lenguaje básico de Lingo,
tal y como se ha hecho hasta ahora, y también un lenguaje más avanzado para aprovechar la
estructura especial que suelen presentar estos problemas.
Los conjuntos primitivos, son los objetos fundamentales de un modelo y no pueden ser
subdivididos, los Conjuntos Derivados, los cuales son creados a partir de otros conjuntos (uno
o más). Estos conjuntos componentes son referenciados como los padres del conjunto
derivado y pueden ser primitivos o derivados.
Para ejemplificar:
SETS:
Locales /Iquique, Serena, Santiago/:; Trimestre/1..4/;
IngresosTrimestralLocales (Locales,Trimestre):Monto;
ENDSETS
@SUM
La parte “| condición” es optativa y sirve para restringir “nombre del conjunto” (del mismo
modo que se hace al definir conjuntos en Matemáticas El resultado de una función @SUM es
un valor.
@FOR
Esta función genera expresiones para cada elemento de un conjunto que cumpla la condición
especificada. La sintaxis de la función @FOR es igual que la de @SUM, es decir:
PRACTICA LAB-N°3
PROBLEMA 1:
Disponibl
Articulo X1 X2 X3 X4 X5 e
Tiempo
Proceso
Maquina 2 3 2 3 5 600
Precio 50 40 30 50 20
Max. Dda. 100 300 250 200 150
Min. Dda. 10 20 30 10 20
Se desea establecer las cantidades que se debe producir de cada articulo para maximizar el
ingreso.
PROBLEMA 2:
Una empresa manufacturera elabora un producto en tres países diferentes P1, P2 y P3, que
debe ser transportado a tres distribuidores C1, C2 y C3 para su posterior venta. La cantidad de
unidades de producto disponible en P1 es de 9.000, en P2 existen 4.000 y en P3 es de 8.000.
Las unidades de producto requeridas en C1 es de 6.000, en C2 es de 5.000 y en C3 es de
7.000. Los costos unitarios de transporte, en unidades monetarias, desde cada país hasta cada
una de los distribuidores de las tres ciudades se muestran en la siguiente tabla:
Se desea establecer las cantidades que se deben abastecer desde cada país a las diferentes
ciudades, para minimizar costos.
El valor de las variables por defecto en un modelo de LINGO son no-negativas y continuas.
Más específicamente, las variables pueden asumir algún 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 podría 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 descripción breve de su uso son:
LINGO le da la posibilidad de definir dos tipos de variables enteras, una general y otra binaria.
Una variable entera general requiere ser un número entero. Una variable entero binaria
requiere ser cero o uno. Cualquier modelo que contiene uno o más variables enteras, es
denominado modelo programación entera.
X. VARIABLES LIBRES
Las variables en LINGO tiene un límite inferior de cero y un límite superior de infinito. @FREE
quita el límite inferior cero y permite que la variable tome valores negativos. La sintaxis es:
La función @FREE puede usarse en cualquier parte del modelo donde normalmente iría una
restricción.
Considerando que @FREE pone el límite superior e inferior de la variable especificada a más-
menos infinito (quitando cualquier límite en la variable), la función de @BND le permite
poner límite superior e inferior específicos en una variable. En otras palabras, @BND limita el
rango de una variable dentro de algún intervalo. La sintaxis para @BND es:
Limite inferior y limite superior deben ser valores numéricos o variables cuyos valores han
sido fijados en la sección de datos. @BND puede usarse en cualquier lugar que normalmente
se usaría una restricción en el modelo. En términos matemáticos, LINGO interpreta @BND
como:
Además, @BND no cuenta contra el límite del número total de restricciones que Lingo
impone en algunas versiones. En general, se usa @BND en lugar de una restricción siempre
que sea posible. Un ejemplo de @BND sería:
@BND (-1, X1, 1); haría que la variable X1 sólo pueda tomar valores entre -1 y 1.
PRACTICA LAB-N°4
PROBLEMA:
LINGO es muy útil para la modelación de grandes problemas, los mas diversos métodos para
la modelación de cualquier problema, poseen una gran cantidad de información, la cual
generalmente se encuentra registrada en hojas de cálculos u otros archivos.
@OLE, permite la conexión con hojas de calculo Excel, requiriendo dos pasos:
1. En al hoja de calculo, cada área que envía o recibe datos desde Lingo, debe estar
asociada a un nombre de rango, esto se realiza seleccionando las celdas de interés y
utilizando el comando InsertarNombreDefinir.
Los nombres de rango, deben ser los mismos nombres de las características definidas
en el modelo Lingo.
La sintaxis para utilizar datos desde una hoja de calculo Excel es:
DATA:
Caract1 = @OLE(‘c:\direccion…..\nombrearchivo.extencion’);
ENDDATA
DATA:
@OLE(‘c:\direccion…..\nombrearchivo.extencion’)=Variable;
ENDDATA
De igual forma como se mostró la utilización de la función @OLE para la comunicación con
Excel, es posible utilizar @ODBC(), para conectar Lingo a otras bases de datos. Igualmente la
función @TEXT(), esta disponible para conectar con un simple archivo de texto.
DATA
@TEXT(‘datossalida’)=variable;
ENDDATA
Con esta instrucción los valores de variable son enviados a un archivo de texto denominado
datossalida.
PRACTICA LAB-N°5
PROBLEMA
Se quiere establecer cuántos barcos hay que producir en cada uno de los cuatro trimestres
del año. La demanda de barcos en cada uno de ellos es conocida: 40, 60, 75 y 25 en cada
semestre. La empresa tiene que cumplir con las demandas. Al principio tiene un inventario de
10 barcos. La compañía al inicio de cada trimestre decide cuántos barcos producir. Suponga
que los barcos fabricados durante un trimestre pueden usarse para cubrir la demanda en el
mismo trimestre. La compañía puede producir 40 barcos en tiempo normal de trabajo a un
costo unitarios de 400 dólares y puede producir hasta 150 barcos adicionales utilizando
tiempo extra a un costo de unitario de 450 dólares. Al final de cada trimestre se presentan
costos de manejo de inventario por 20 dólares por cada barco.
ACTIVIDAD: