Está en la página 1de 10

LINDO - Parte 1

Introducción a LINDO

LINDO: abreviatura en inglés de Linear INteractive Discrete Optimization (Optimización Lineal


Discreta e INteractiva).
Es un software muy básico que permite realizar optimización de problemas de programación lineal
y cuadrática, definidos sobre variables reales y/o binarias.

Ejemplo 1: El Problema del Carpintero

A. El problema
Un carpintero sólo fabrica mesas y sillas y vende todas las mesas y las sillas que fabrica en un
mercado. Sin embargo, no tiene un ingreso estable y desea optimizar esta situación.
El objetivo es determinar cuántas mesas y sillas debería fabricar por semana para maximizar sus
ingresos netos.
Los tiempos de producción requeridos para una mesa y una silla en distintos momentos del día se
calculan en 2 horas y 1 hora, respectivamente. Las horas laborales totales por semana son sólo 40
(esta limitación proviene de la familia del carpintero). La materia prima requerida para una mesa y
una silla es de 1 y 2 unidades, respectivamente y el abastecimiento total de materia prima es de 50
unidades por semana.
Los ingresos netos de la venta de una mesa y una silla son 50 euros y 30 euros respectivamente.

B. Formulación del modelo


Las variables de decisión X1 y X2 representan la cantidad de mesas y sillas/semana
La función objetivo es: 50X1 + 30X2
Restricciones: las limitaciones de la mano de obra y los recursos de materia prima.
En resumen se tiene el siguiente modelo matemático para el problema planteado:

Maximizar 50 X1 + 30 X2
Sujeto a:
2 X1 + X2 <= 40 restricción de mano de obra
X1 + 2 X2 <= 50 restricción de materiales
tanto X1 como X2 son no negativas.

1
C. Resolver el problema usando el LINDO y interpretar los resultados
Abra el editor del LINDO y escriba el modelo matemático, con la diferencia que "sujeto a" debe
escribirse "SUBJET TO" o "S.T." o "ST".
No es necesario que agregue las condiciones de no negatividad, porque el programa las supone.
Su archivo debe lucir como:

MAX 50X1 + 30 X2
ST
2X1 + X2 <40
X1 + 2X2 < 50
END

No olvide de dejar los espacios adecuados y de bajar a una nueva línea con la tecla Enter. El no
seguir estas indicaciones puede originar problemas a la hora de resolver el modelo.

NOTA:
1. La función objetivo no debería contener ninguna restricción. Por ejemplo, no se puede ingresar
Max 2X1 + 5.
2. Todas las variables deben aparecer en el lado izquierdo de las restricciones, mientras que los
valores numéricos deben aparecer en el lado derecho de las restricciones
3. Se presupone que todas las variables son no negativas. No ingrese las condiciones de no
negatividad. Por defecto, LINDO ya considera la no negatividad de las variables.
4. LINDO sólo acepta cinco operadores: + , - , <= , >= , = . Así pues, en la formulación del
problema no podrá usarse ningún otro operador ( * , / , ^ , etc.) ni tampoco paréntesis asociativos.
5. LINDO interpreta las desigualdades del tipo ‘<=’ y ‘>=’ como desigualdades estrictas (del tipo ‘<’
y ‘>’)
6. Para separar los dígitos decimales de un numero se usa el punto ‘.’ , por ejemplo en LINDO no se
escribe 1,5 sino 1.5.
7. Siempre hemos de finalizar la formulación del problema añadiendo el comando END.

2
Se puede añadir comentarios personales sin más que anteponerles el signo de admiración !

por ejemplo:

MAX 50X1 + 30 X2
ST
2X1 + X2 <40 ! restricción de mano de obra
X1 + 2X2 < 50 ! restricción de materiales

END

Además se puede asignar un nombre a cada restricción.

Por ejemplo, si escribimos

la restricción de mano de obra tiene el nombre MANO y la restricción de materiales tiene el


nombre MATERIAL

Guarde el archivo con cualquier nombre y asegúrese que quede con la extensión LTX

3
El siguiente paso es pedirle a LINDO que resuelva el problema. Para ello es suficiente con hacer
clic sobre el botón Solve (el que tiene forma de diana), o bien seleccionar esta opción en la barra de
menús.

Nota: Si seleccionamos la opción SOLVE desde la barra de menús :


Si tras resolver un problema hacemos alguna modificación en la formulación del mismo, es
necesario volver a compilar el modelo (Solve>Compile) antes de volver a usar Solve.

LINDO intentará primero compilar el modelo formulado (para determinar si está bien planteado o no) y, en el caso
de que la formulación sea incorrecta (ya sea desde un punto de vista matemático o de sintaxis), nos devolverá el
siguiente mensaje:
An error ocurred during compilation on line: n
.

Si el modelo ha podido ser compilado, LINDO comenzará la resolución efectiva del problema,
mostrando la ventana “Status”, donde se da información sobre el estado del proceso resolutivo:

4
A continuación se describen algunos de los campos que aparecen en la ventana anterior:
• Status: ofrece el estado de la solución actual (óptima, factible, no factible, o no acotada).

• Iterations: número de iteraciones (tablas del algoritmo) que se han realizado.

• Infeasibility: cantidad por la cual las restricciones han sido excedidas o violadas.

• Objective: valor actual de la función objetivo.

• Elapsed time: tiempo transcurrido desde el inicio de la resolución.

Cuando la resolución haya finalizado, el programa nos preguntará si queremos realizar un análisis
de sensibilidad. De momento elegiremos la opción NO.

Cerramos la ventana ’Status’:

Aparecerá una nueva ventana en la pantalla, la “Reports Window” (hay que hacer ‘clic’ en la
ventana debajo de la ventana principal del LINDO)

5
La información básica que nos proporciona esta ventana para nuestro ejemplo es que
1. Se han necesitado dos iteraciones para llegar a la solución óptima `LP OPTIMUM FOUND
AT STEP 2' (OPTIMO DE PL ENCONTRADO EN EL PASO 2) indica que se encontró la
solución óptima en la iteración 2. LINDO utiliza el método de optimización simplex.

Muchas veces, aparecerá un mensaje muy confuso: "LP OPTIMUM FOUND AT STEP 0" (OPTIMO DE PL
ENCONTRADO EN EL PASO 0). ¿Cómo puede ser ’ paso 0’?

Lindo lleva un registro en su memoria de todas las actividades previas realizadas antes de resolver cualquier
problema que usted ingrese. Por lo tanto, no muestra exactamente cuántas iteraciones fueron necesarias para
resolver el problema en cuestión.

Para saber cuántas iteraciones lleva realmente resolver un problema en particular, debe salir de Lindo y
luego reingresar, volver a escribir y a presentar el problema. De esta manera aparecerá la cantidad exacta de
vértices (excluyendo el origen) visitados para llegar a la solución óptima (si es que existe) en forma correcta.

2. Inmediatamente debajo aparece el óptimo del valor de la función objetivo.

Este significa que los ingresos netos óptimos (solución optima del LP) son 1100 euros.

6
3. Después sigue la solución del problema, es decir la estrategia para fijar las variables de
decisión a fin de lograr el valor óptimo antes mencionado. Esto aparece con una columna de
variables y una columna de valores.

La columna de valores contiene la solución del problema.


Es decir, la estrategia optima es fabricar 10 mesas (variable X1) y 20 sillas (variable X2).
Esta solución va a sorprender al carpintero (debido a los mayores ingresos netos provenientes de la
venta de una mesa (50 euros) ).

4. La reducción de costos asociada con cada variable se imprime a la derecha de la columna de


valores
La reducción de costos (REDUCED COST) es la cantidad que tendría que ‘mejorar’
(aumentar en un MAX, disminuir en un MIN) el coeficiente objetivo asociado con la variable,
para que resultase ‘rentable’ asignar un valor no nulo a la variable.
Entonces, una variable que aparece en la solución optima (con un valor distinto de cero) tendrá
siempre un coste reducido igual a cero.

5. Debajo de la solución, aparecen los valores de las variables de holgura/excedente de la tabla


final. Los valores de las variables de holgura/excedente para la solución final figuran en la
columna `SLACK OR SURPLUS' (HOLGURA O EXCEDENTE).

Holgura representa la cantidad que sobra de un recurso y Excedente representa el exceso de


producción. Es decir, esta columna nos dice cuan cerca estamos (en unidades) de ‘agotar’ la
restricción asociada (cumplirla en igualdad). Si es del tipo <= será un ‘SLACK’ (Holgura) y
si es del tipo >=, un ‘SURPLUS’ (excedente).
Una restricción es obligatoria (activa) si su holgura tiene el valor cero.

7
6. Los precios duales relacionados aparecen a la derecha.
Los Precios duales (DUAL PRICES) nos dan la cantidad en que ‘mejoraría’ la función
objetivo (aumentado en un MAX, disminuyendo en un MIN) si ‘relajásemos’ la restricción
asociada en una unidad.
Nota: Con asignar un nombre a cada restricción es mas fácil interpretar los resultados del
LINDO. Por ejemplo, si habíamos asignado el nombre MANO a la restricción de mano de
obra y el nombre MATERIAL a la restricción de materiales tendríamos los resultados:

8
Ejemplo 2: El Problema del Carpintero (2)
¿...Contratar o no contratar a un ayudante?
Supóngase que el carpintero pudiera contratar a un ayudante a un costo de 5 euros por hora. ¿Le
conviene al carpintero contratar a un ayudante? En caso afirmativo, ¿por cuántas horas?
Para resolver este problema hay que añadir una nueva variable X3 para representar la cantidad de
horas extra.
Entonces el problema modificado es:
Maximizar 50 X1 + 30 X2 - 5 X3
Sujeta a:
2 X1 + X2 < 40 + X3 restricción de la mano de obra con horas adicionales desconocidas
X1 + 2 X2 < 50 restricción de materiales

Ejercicio 1:
1. Escribir el problema del carpintero (2) en la forma necesaria para el paquete LINDO
(¡Cuidado con la restricción de la mano de obra! Recuerda que en la parte derecha de una
desigualdad sólo se permiten valores numéricos, mientras que en la parte izquierda sólo se
permiten expresiones lineales de variables y sus coeficientes)
2. Hallar la solución optima usando LINDO
3. Responda a las siguientes preguntas:
3.1 ¿Cual es el nuevo valor de los ingresos netos óptimos del carpintero? ¿Le conviene
contratar a un ayudante?
3.2 ¿Por cuántas horas debe contratar (en caso afirmativo) el ayudante?
3.3 ¿Cuál es la estrategia optima (cuantas mesas y sillas van a fabricar el carpintero con
su ayudante en el caso optimo)?
3.4 ¿ Qué cambiaría con la producción de sillas si el carpintero contrata un ayudante?
¿Es posible modificar el coeficiente de la variable X2 (=ingresos netos de venda de sillas) para
que la producción de sillas sea rentable? ¿Cómo? (COLUMNA DEL COSTE REDUCIDO).
3.5 ¿Cuáles son las restricciones activas en este problema? (COLUMNA DE
HOLGURA).
3.6 ¿Se puede anticipar (sin cambiar el modelo) qué ocurriría si las horas laborables por
semana sean aumentados a 41 horas? ¿Qué ocurriría si el abastecimiento total de materia prima
sea 55 unidades por semana? (COLUMNA DE PRECIOS DUALES).

9
Ejemplo 3: El Problema de mesas de ordenador
Una empresa fabrica dos modelos de mesas para ordenador, M1 y M2. Para su producción se
necesita un trabajo manual de 20 minutos para el modelo M1 y de 30 minutos para el M2; y un
trabajo de máquina de 20 minutos para M1 y de 10 minutos para M2. Se dispone de 100 horas al
mes de trabajo manual y de 80 horas al mes de máquina. El beneficio por unidad es de 1,5 y 1 euros
para M1 y M2, respectivamente. ¿Cómo se puede planificar la producción para obtener el máximo
beneficio?

Llamamos: M1 = “nº unidades producidas al mes de M1”


M2 = “nº unidades producidas al mes de M2 ”
La función objetivo sería: Maximizar 1,5M1 + M2
y las restricciones vendrán dadas por:
Sujeto a:
20M1 + 30M2 <= 100*60
20M1 + 10M2 <= 80*60
M1>= 0
M2>= 0
Las dos últimas restricciones, si bien no constan de forma explícita en el enunciado, sí figuran de
forma implícita, pues el número de mesas a producir no puede ser inferior a 0.

Ejercicio 2:
1. Escribir el problema anterior en la forma necesaria para el paquete LINDO.
(¡Cuidado! El número 1,5 se escribe como 1.5)
2. Hallar la solución optima usando LINDO
3. Responda a las siguientes preguntas:
3.1 ¿Cual es el máximo beneficio?
3.2 ¿Cuáles son los valores óptimos de M1 y M2 unidades producidas?
3.5 ¿Cuáles son las restricciones activas en este problema?
3.6 ¿Qué ocurriría si las 100 horas de disponibilidad de trabajo manual al mes sean ahora
110 horas al mes? ¿Se puede anticipar (sin cambiar el modelo)?

10

También podría gustarte