Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIÓN LINEAL
SOLVER – LINDO – LINGO
Si la compañía sabe que podrá vender todos los aparatos Astro y Cosmo que sea capaz de
fabricar, ¿Cuál deberá ser el plan de producción por día (es decir, la producción diaria) para cada
modelo?
2
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
Objetivo:
Maximizar la utilidad diaria obtenida por el fabricante.
Restricciones:
‐ Capacidad máxima de la línea de producción de aparatos Astro y Cosmo
‐ No sobrepasar la cantidad de minutos por día disponibles en los deptos. A y B
‐ Condición de No negatividad.
C. Restricciones:
D. Función Objetivo:
𝐻𝑟𝑠 𝐻𝑟𝑠
1[ ] ∗ 𝑋1[𝑢] + 2 [ ] ∗ 𝑋2[𝑢] ≤ 120[𝐻𝑟𝑠]
𝑢 𝑢
1 ∗ 𝑋1[𝐻𝑟𝑠] + 1 ∗ 𝑋2[𝐻𝑟𝑠] ≤ 120[𝐻𝑟𝑠]
3
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
Aunque la mayoría de las entradas de la hoja de cálculo se explican por sí mismas, conviene poner
atención a la distribución del modelo de la hoja de cálculo y a cómo se emplean los rótulos,
coeficientes y variables de decisión, y fíjese también en el cálculo de la “holgura”.
Rótulos. En forma particular, algunas celdas contienen rótulos. Estos rótulos se usan de la misma
manera que cuando se incluyen en una tabla de datos para facilitar la lectura. Su finalidad es
aclarar el significado de otras entradas de la hoja de cálculo electrónica.
4
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
Coeficientes y variables de decisión. Otras celdas contienen números. Por lo general, estos
números representarán:
1. El valor numérico de los coeficientes que son los datos para el modelo de PL en cuestión
2. Cifras llamadas variables de decisión o, para simplificar, decisiones.
Cálculo de la holgura. Las entradas que aparecen en G9:G12 se conocen con frecuencia como
holguras.
En los modelos de PL en hojas de cálculo electrónicas, la holgura es la diferencia entre la función
de restricción y el lado derecho, calculada de modo que no sea negativa.
Para una restricción ≤, la holgura es el lado derecho menos el lado izquierdo. Para una restricción
≥, la holgura es el lado izquierdo menos el lado derecho.
Con frecuencia se usan rótulos más descriptivos que simplemente holgura. Para las restricciones
≤, podría preferirse un rótulo como No usado, Restante, Residuo o Saldo. Para las restricciones ≥,
tal vez sea mejor usar Sobrante, Sobreoferta, Excedente o Exceso.
5
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
Las hojas de cálculo son muy útiles para representar modelos administrativos de PL y son
particularmente prácticas para las manipulaciones posteriores del tipo “¿qué pasaría si?”. Sin
embargo, para los que recién se inician, las hojas de cálculo electrónicas no siempre son el mejor
camino para formular el modelo de PL inicial. La experiencia ha demostrado que, hasta que usted
se vuelva más hábil con el modelado directo de PL en Excel, la forma preferible de generar un
modelo de PL sin errores consiste en dividir el proceso en dos etapas:
a. Escriba y depure el modelo simbólico de PL: Describa su modelo en una hoja de papel, como
un PL simbólico. Depúrelo, es decir, examine su formulación escrita y busque posibles errores
en la lógica de la formulación.
b. Traduzca y depure la representación del modelo simbólico de PL en la hoja de cálculo: Use
el modelo simbólico de PL como guía para crear la representación en la hoja de cálculo.
Después continúe depurando la representación del modelo en la hoja de cálculo, ensayando
los distintos grupos de valores candidatos para las variables de decisión, a fin de comprobar
si se producen errores obvios (violaciones de restricciones en el caso de decisiones que se
sabe son factibles, valores sin sentido en el LI o en las celdas de medición del desempeño,
etc.).
Solver es un paquete agregado para Excel que optimiza numéricamente los modelos sujetos a
restricciones, como los modelos de PL. Solver emplea una técnica llamada algoritmo matemático
de programación, con la cual encuentra las decisiones óptimas para un modelo determinado en
una hoja de cálculo.
Para la PL, Solver usa un algoritmo de optimización muy eficiente (que sólo trabaja con modelos
de PL) llamado “método simplex”. Solver, puede optimizar tanto los modelos lineales como los
no lineales. Sin embargo, ahora nos concentraremos en modelo lineales. Recuerde: para la
optimización de PL, debe ser lineal cada una de las fórmulas del modelo que incluyan las variables
de decisión directamente (o indirectamente, por medio de una cadena de referencias a celdas), y
que directa o indirectamente afecten a la celda de la función objetivo. La restricción (de linealidad)
es impuesta por el método simplex de programación lineal de Solver, es cual sólo funciona
correctamente con las fórmulas de hojas de cálculo en las que intervienen relaciones lineales.
6
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
Inicie Excel y abra el “libro”, donde tiene guardado el modelo Astro y Cosmo.
Inicie el programa complementario Solver seleccionando el comando “Solver…” en el menú Datos.
Una vez que se haya cargado en memoria el programa complementario Solver, lo cual puede
tardar algunos segundos, deberá aparecer el cuadro de diálogo de Parámetros de Solver, en el
7
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
menú de Datos. Nótese que el modelo predeterminado de Solver es uno de “Maximización” y que
el cursor del cuadro de diálogo se encuentra en el primer campo: “Celda objetivo”.
El primer campo, acompañado por el rótulo “Establecer objetivo”, solicita que indique usted cuál
de las celdas va a optimizar, es decir, la medida de desempeño incorporada a su modelo que
desea utilizar en el proceso de optimización. En el caso de nuestro modelo de ASTRO Y COSMO,
se podría escribir la referencia B6 o, mejor todavía, se podría activar dicha celda para ingresar su
referencia automáticamente.
Cuando se hace clic en la hoja de cálculo para ingresar referencias a celdas, Solver inserta dichas
referencias agregándoles signos $, lo cual significa que se trata de referencias absolutas. Usted
puede emplear tanto referencias absolutas –activando las celdas apropiadas‐ como referencias
relativas –tecleando directamente las referencias de las celdas‐.
El siguiente campo del cuadro de diálogo, rotulado “Para:”, le permite definir el tipo de
optimización que desea realizar. En este caso desea usted maximizar la celda de medición de
desempeño de Ganancias de ASTRO Y COSMO. Para seleccionar esta opción, haga clic en la
opción que aparece junto a “Máx”. Si deseara minimizar haría clic en “Mín”, y en “Valores de:” si
quisiera que el valor de la celda objetivo fuera igual que una cantidad especificada.
El siguiente campo, rotulado “Cambiando las celdas de variables:” permite especificar las
variables de decisión del modelo, que en este caso se encuentran en las celdas B4 y C4. Por lo
tanto, haga clic en el cuadro “Cambiando las celdas de variables:” y después, en la hoja de cálculo,
haga clic y arrastre el cursor para marcar las celdas B4:C4.
A continuación, deberá definir las restricciones del modelo para uso de Solver. Haciendo clic en
el botón “Agregar…”, a la derecha del cuadro “Sujeto a las restricciones:”, se presenta el diálogo
Agregar restricción, donde podrá añadir restricciones. Con el cursor ubicado en el campo
“Referencia de la celda” del cuadro de diálogo Agregar restricción, haga clic y arrastre el cursor
sobre cada una de las celdas de la hoja de cálculo que comprendan el LI. Asimismo, seleccione
según corresponda el tipo de desigualdad. En nuestro caso el signo <=.
A continuación, coloque el cursor en el cuadro del lado derecho del cuadro de diálogo “Agregar”
restricción, haga clic y arrastre el cursor sobre las celdas del LD correspondientes.
Presionando el botón Agregar usted puede introducir cada una de las restricciones del modelo.
Empero una vez ingresada la última restricción, presione el botón Aceptar, para terminar la
introducción de la restricciones y regresar al cuadro del diálogo de Parámetros de Solver. (Sin
8
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
inadvertidamente activa usted “Agregar”, será suficiente que pulse “Cancelar” para que pueda
regresar al cuadro de diálogo de Parámetros de Solver).
Sus especificaciones del modelo de ASTRO Y COSMO para Solver deberán tener ahora el aspecto
que muestra la figura 5. (Aunque en este caso no necesitamos los botones “Cambiar” y “Eliminar”
que aparecen bajo el botón “Agregar” en el cuadro de diálogo de Parámetros del Solver, funcionan
de manera similar a “Agregar”. Primero, resalte la restricción que desea cambiar o eliminar y haga
clic en cualquiera de estos botones). Nota: el botón “Restablecer todo” borra todas las entradas
al cuadro de diálogo de Parámetros de Solver, en caso de que desee volver a empezar la operación
de especificación.
Por último, pulse el botón Resolver. Durante este proceso, el módulo de optimización presenta la
cantidad de “iteraciones” y el valor de la celda de función objetivo, mientras explora el conjunto
de decisiones factibles.
9
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
10
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
11
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
LINDO (Linear, Interactive, and Discrete Optimizer) es un programa sencillo de usar y muy potente
que permite resolver extensos problemas de programación lineal, entera, e incluso cuadrática.
Fue desarrollado por Linus E. Shrage en la Universidad de Chicago. Sus creadores (LINDO
Systems, Inc.) permiten descargar de su página web (www.lindo.com) una versión de
demostración gratuita que tolera hasta 150 restricciones y 300 variables (la versión profesional
es capaz de trabajar con 50.000 restricciones y 200.000 variables).
Al iniciar LINDO (versión 6.1 para Windows), aparecen varias ventanas: la exterior (con la etiqueta
“LINDO”) es la ventana principal, todas las demás ventanas que vayan apareciendo estarán
contenidas dentro de ella. La ventana principal contiene también todos los menús de comandos
y la barra de herramientas. Utilizaremos la ventana secundaria “<untitled>” para formular nuestro
problema.
12
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
1) Podemos añadir comentarios personales sin más que anteponerles el signo de cierre de
exclamación (!).
2) Siempre hemos de finalizar la formulación del problema añadiendo el comando END.
3) Por defecto, LINDO ya considera la no negatividad de las variables.
4) LINDO sólo acepta cinco operadores: + , ‐ , <= , >= , e = . Así pues, en la formulación del problema
no podrá usarse ningún otro operador ( * , / , ^ , etc.) ni tampoco paréntesis asociativos. A su
vez, las desigualdades de tipo <= o >= pueden digitarse con solo < o > respectivamente.
5) 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.
Nota: En el caso de programas del tipo Minimizar, basta digitar el comando MIN en vez de del
comando MAX.
El siguiente paso es pedirle a LINDO que resuelva el problema. Para ello es suficiente con hacer
clic sobre el botón Solve (Resolver), , o bien seleccionar esta opción en la barra de menús, es
decir, seleccionando en el menú Solve la opción Solve, o simplemente pulsando el comando
Ctrl+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:
13
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
Si el modelo ha podido ser compilado, LINDO comenzará la resolución efectiva del problema,
mostrando la ventana “Status” (Estado), donde se da información sobre el estado del proceso
resolutivo:
14
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
Cuando la resolución haya finalizado, el programa además nos dará la opción de obtener el
análisis de sensibilidad y de rangos. Si escoge “SI” y cierra la ventana de estado, LINDO
desplegará la solución completa del problema en una nueva ventana, titulada “Reports Window”
(Ventana de Informe), en la cual LINDO enviará todo el output en forma de texto:
Figura 14: Ventana Reports Window de LINDO para el problema ASTRO y COSMO
La información básica que nos proporciona esta ventana para nuestro ejemplo de los televisores,
es que la solución óptima consiste en fabricar 70 televisores del tipo Astro y 20 del tipo Cosmo,
con lo cual obtendremos un beneficio de 1.600 dólares (el máximo de los posibles bajo las
restricciones que tenemos). Además, con este plan de producción estaremos agotando nuestros
recursos del departamento B y dejando 10 horas ociosas en el Departamento A. Asimismo, hemos
ocupado al máximo la capacidad de la línea de producción para Astro y se ha dejado una
capacidad sobrante para la línea de producción de televisores Cosmo de 30 unidades.
Observe la información que aparece bajo el encabezado del resultado de la computadora OBJ
COEFFICIENT RANGES (Rangos de los coeficientes de la función objetivo). La variable X2, con un
coeficiente de utilidad actual de 10, tiene un incremento permisible de 10 y una reducción
permisible de 10. Agregando 10 y restando 10 del coeficiente actual de 10, nos da el rango de
optimalidad para C2:
0 ≤ C2 ≤ 20
10 ≤ C1 ≤ infinito
15
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
La información bajo el encabezado RIGHTHAND SIDE RANGES (Rangos de los lados derechos)
permite el cómputo del rango de factibilidad de cada lado derecho. Simplemente reste
la reducción permisible de valor actual para obtener el límite actual y agregue el incremento
permisible al valor actual, para obtener el límite superior. Al hacerlo, obtenemos:
Como puede observarse el uso de LINDO es muy cómodo para el usuario de Programación Lineal.
No necesita de conocimientos especializados, sino que tan sólo requiere del uso del sentido
común. Está es la principal ventaja de esta herramienta en optimización lineal.
16
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
LINGO es una herramienta matemática que resuelve una amplia gama de problemas de
optimización, lineales, no lineales y enteros, utilizando un lenguaje sencillo, lo que lo convierte en
un asistente ideal en la academia. Junto con LINDO forma parte del paquete SOLVER SUITE
(manual de usuario, 1996). Para la resolución de los problemas lineales se utiliza LINDO. Sin
embargo, a diferencia de este último, LINGO incorpora un lenguaje de programación que permite
escribir de manera cómoda el modelo. Debe tenerse en cuenta que LINGO detecta óptimos
locales y que salvo para la programación lineal y convexa, no siempre resulta fácil identificar los
óptimos globales. Cabe indicar que estas notas se han elaborado considerando la versión 17.0.
Al iniciar LINGO, al igual como ocurre en LINDO, aparecen varias ventanas: la exterior (con la
etiqueta “LINGO 17.0”) es la ventana principal, todas las demás ventanas que vayan
apareciendo estarán contenidas dentro de ella. La ventana principal contiene también todos los
menús de comandos y la barra de herramientas. Utilizaremos la ventana secundaria “Lingo Model
– Lingo1>” para formular nuestro problema.
17
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
18
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
Nota: En el caso de programas del tipo Minimizar, basta digitar el comando MIN= en vez de del
comando MAX=.
El siguiente paso es pedirle a LINGO que resuelva el problema. Para ello es suficiente con hacer
clic sobre el botón Solver, o bien seleccionar esta opción en la barra de menús, es decir,
seleccionando en el menú Solver la opción Solve, o simplemente pulsando el comando Ctrl+U.
LINGO 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á un mensaje de error (LINGO Error Message), indicando el motivo del
problema (Error Code).
Si el modelo ha podido ser reformulado, LINGO comenzará la resolución efectiva del problema,
mostrando la ventana “Status” (Estado), donde se da información sobre el estado del proceso
resolutivo:
19
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
Cuando la resolución haya finalizado, el programa desplegará la solución completa del problema
en una nueva ventana, titulada “Solution Report” (Informe de Solución), en la cual LINGO enviará
todo el output en forma de texto:
Figura 18: Ventana Solution Report de LINGO para el problema ASTRO y COSMO
En caso de requerir el informe de sensibilidad sobre los coeficientes del modelo, se debe, primero,
habilitar la opción “Prices Ranges”, lo cual se efectúa desde el menú “Solver”, donde se selecciona
“Options…” y luego “General Solver”.
Figura 19: Ventana Lingo Options de LINGO para habilitar los Rangos de Sensibilidad
20
Software de Programación Lineal: Solver, LINDO y LINGO | MG. SEBASTIÁN ARAYA PIZARRO
Luego de ello, manteniendo activa la hoja del modelo (Lingo Model), se selecciona dentro del
menú Solver, la opción Range, que desplegará la ventana “Range Report” con la información
solicitada.
Figura 20: Ventana Range Report de LINGO para el problema ASTRO y COSMO
21