Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción a LINDO
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.
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
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.
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).
• Infeasibility: cantidad por la cual las restricciones han sido excedidas o violadas.
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.
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.
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.
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?
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