Ejercicios Resueltos del Método Gráfico en Programación Lineal
Ejercicio N°1: Una empresa vitivinícola ha adquirido recientemente un terreno de 110 hectáreas. Debido a la calidad del sol y el excelente clima de la región, se puede vender toda la producción de uvas Sauvignon Blanc y Chardonay. Se desea conocer cuánto plantar de cada variedad en las 110 hectáreas, dado los costos, beneficios netos y requerimientos de mano de obra según los datos que se muestran a continuación:
Suponga que se posee un presupuesto de US$10.000 y una disponibilidad de 1.200 días hombre durante el horizonte de planificación. Formule y resuelva gráficamente un modelo de Programación Lineal para este problema. Detalle claramente el dominio de soluciones factibles y el procedimiento utilizado para encontrar la solución óptima y valor óptimo.
Variables de Decisión:
: Hectáreas destinadas al cultivo de de Sauvignon Blanc
: Hectáreas destinadas al cultivo de Chardonay
Función Objetivo:
Maximizar
Restricciones:
Donde las restricciones están asociadas a la disponibilidad máxima de hectáreas para la plantación, presupuesto disponible, horas hombre en el período de planificación y no negatividad, respectivamente.
El siguiente gráfico muestra la representación del problema de la empresa vitivinícola. El área achurada corresponde al dominio de soluciones factibles, donde la solución básica factible óptima se alcanza en el vértice C, donde se encuentran activas las restricciones de presupuestos y días hombre. De esta forma resolviendo dicho sistema de ecuaciones se encuentra la coordenada de la solución óptima donde y (hectáreas). El valor óptimo es (dólares).
Ejercicio N°2: Un taller tiene tres (3) tipos de máquinas A, B y C; puede fabricar dos (2) productos 1 y 2, todos los productos tienen que ir a cada máquina y cada uno va en el mismo orden: Primero a la máquina A, luego a la B y luego a la C. La siguiente tabla muestra:
Las horas requeridas en cada máquina, por unidad de producto
Las horas totales disponibles para cada máquina, por semana
La ganancia por unidad vendida de cada producto
Formule y resuelva a través del método gráfico un modelo de Programación Lineal para la situación anterior que permite obtener la máxima ganancia para el taller.
Variables de Decisión:
: Unidades a producir del Producto 1 semanalmente
: Unidades a producir del Producto 2 semanalmente
Función Objetivo:
Maximizar
Restricciones:
Las restricciones representan la disponibilidad de horas semanales para las máquinas A, B y C, respectivamente, además de incorporar las condiciones de no negatividad.
Para la resolución gráfica de este modelo utilizaremos el software GLP cual abordamos en el artículo Problema de Planificación Forestal resuelto con Graphic Linear Optimizer (GLP). El área de color verde corresponde al conjunto de soluciones factibles y la curva de nivel de la función objetivo que pasa por el vértice óptimo se muestra con una línea punteada de color rojo.
La solución óptima es y con valor óptimo que representa la ganancia para el taller.
Ejercicio N°3: Una compañía elabora dos productos diferentes. Uno de ellos requiere por unidad 1/4 de hora en labores de armado, 1/8 de hora en labores de control de calidad y US$1,2 en materias primas. El otro producto requiere por unidad 1/3 de hora en labores de armado, 1/3 de hora en labores de control de calidad y US$0,9 en materias primas. Dada las actuales disponibilidades de personal en la compañía, existe a lo más un total de 90 horas para armado y 80 horas para control de calidad, cada día. El primer producto descrito tiene un valor de mercado (precio de venta) de US$9,0 por unidad y para el segundo este valor corresponde a US$8,0 por unidad. Adicionalmente se ha estimado que el límite máximo de ventas diarias para el primer producto descrito es de 200 unidades, no existiendo un límite máximo de ventas diarias para el segundo producto.
Formule y resuelva gráficamente un modelo de Programación Lineal que permita maximizar las utilidades de la compañía.
Variables de Decisión:
: Unidades a producir diariamente del Producto 1
: Unidades a producir diariamente del Producto 2
Función Objetivo:
Maximizar
Restricciones:
La primera restricción representa las limitantes de horas de armado diariamente. La segunda restricción la disponibilidad de horas para labores de control de calidad (también diariamente). La tercera restricción establece una cota superior para la producción y ventas diarias del Producto 1. Adicionalmente se incluyen las condiciones de no negatividad para las variables de decisión.
El dominio de soluciones factibles tiene 5 vértices que corresponden a los candidatos a óptimos del problema. En particular el vértice óptimo es D de modo que la solución óptima es y con valor óptimo que corresponde a la utilidad máxima para la empresa.
Importante: A la fecha de esta publicación disponemos de más de 70 artículos relativos a la Programación Lineal los cuales recomendamos revisar, donde se aborda la resolución gráfica de este tipo de modelos como también la resolución a través de algoritmos como el Método Simplex y la implementación computacional con herramientas como Solver, What’sBest! y OpenSolver, entre otras.
En el siguiente tutorial de nuestro canal de Youtube se explica un ejemplo adicional con todos los elementos del método gráfico en Programación Lineal:
En el siguiente artículo detallaremos cómo funciona el Método Simplex a través de un ejemplo sencillo correspondiente a un modelo de Programación Lineal que considera 3 variables de decisión.
El Método Simplex corresponde a un algoritmo iterativo publicado por George Bernard Dantzig en el año 1947 en donde se busca alcanzar el máximo (o mínimo) de una función lineal compuesta por un conjunto de variables que deben satisfacer condiciones impuestas por restricciones lineales en forma de inecuaciones.
En este contexto, el objetivo de este artículo es definir en detalle distintas aproximaciones para la resolución de un modelo de Programación Lineal utilizando el Método Simplex, además de discutir sobre sus principales características.
Con tal propósito en perspectiva consideremos el siguiente modelo de optimización lineal:
Ejemplo del Método Simplex (Utilizando Diccionarios)
Un paso preliminar consiste en incorporar las denominadas variables de holgura. De modo de comprender este concepto consideremos la primera restricción:
Para cada solución factible , el valor del lado izquierdo será a lo más el valor del lado derecho; o eventualmente existirá una diferencia (holgura) entre estos 2 valores.
De esta forma definimos como variable de holgura de dicha restricción, la cual se puede denotar por , donde . De forma análoga se pueden definir las variables de holgura (no negativas) y para las restricciones 2 y 3, respectivamente. Finalmente podemos describir la función objetivo utilizando de forma compacta.
En resumen, para cada selección de valores de las variables y podemos definir valores para las variables , y utilizando las siguientes fórmulas (conocido comúnmente como diccionarios según la terminología utilizada en el libro Linear Programming de Vasek Chvátal):
El objetivo del Método Simplex es lograr sucesivas mejoras para el valor de la función objetivo asociada a la selección de alguna solución factible. Repetir dicho procedimiento un numero finito de veces debería permitir eventualmente alcanzar la solución óptima del problema lineal en estudio.
Para inicializar el Método Simplex necesitamos una solución factible. En nuestro ejemplo esto es sencillo y se puede alcanzar simplemente fijando las variables en cero. De esta forma se alcanzan los siguientes resultados:
En el contexto del objetivo planteado anteriormente, debemos buscar una solución factible que permita alcanzar un mayor valor para . Si, por ejemplo, mantenemos e incrementamos el valor de obtenemos , de modo que si se obtiene (y ). Mejor aún, si (manteniendo ), se obtiene (y ).
Sin embargo, si asumimos (conservando ) el valor de la función objetivo ahora es , pero que claramente no satisface las condiciones de no negatividad para las variables.
Por tanto la pregunta relevante es: ¿cuánto se puede incrementar el valor de (manteniendo al mismo tiempo) y seguir conservando la factibilidad ()?.
La condición implica ; de forma similar implica y implica . Claramente de estas 3 cotas para la variable la más restrictiva es , de modo que incrementamos el valor de hasta ese valor de modo de obtener una nueva solución:
Que claramente constituye una mejora para el valor de la función objetivo en comparación al valor inicial .
A continuación debemos buscar una nueva solución factible que sea aún mejor que la que acabamos de encontrar. Para ello la variable que cambió su valor desde cero a un número positivo (12,5), debe cambiar su lugar desde el lado derecho al lado izquierdo del sistema de ecuaciones. De forma análoga, la variable que cambio su valor de un número positivo a cero debe cambiar de lugar desde el lado derecho al lado izquierdo.
De esta forma y luego de cierta manipulación algebraica podemos reescribir en términos de según se observa a continuación:
Luego, con el objetivo de expresar y en términos de , simplemente substituimos el resultado anterior en las filas correspondientes:
De esta forma nuestro sistema de ecuaciones (diccionario) queda definido por:
Como lo hicimos en la primera iteración debemos intentar incrementar el valor de la función objetivo () seleccionando una variable adecuada en el lado derecho, mientras que al mismo tiempo mantenemos las restantes variables del lado derecho en cero. En este sentido se puede observar que aumentar el valor de las variables o generaría una disminución en el valor de que va en sentido contrario a nuestro objetivo de maximizar el valor de la función objetivo.
Por tanto, la única selección de una variable en el lado derecho que permitirá aumentar el valor de es seleccionar la variable .
¿Cuánto debemos incrementar el valor de ?. La respuesta se puede obtener directamente del sistema de ecuaciones anterior, considerando , la restricción implica que ; la restricción no impone condiciones adicionales y la restricción implica . En consecuencia es el mejor valor que puede adoptar dicha variable.
La nueva solución corresponde a:
El valor de paso de 12,5 a 13 al cabo de una iteración del Método Simplex.
A continuación actualizamos el sistema de ecuaciones donde las variables que adoptan valores positivos se encontraran en el lado izquierdo, mientras las variables igual a cero estarán en el lado derecho. De este modo pasamos la variable al lado izquierdo, donde que permite substituir en el resto de las ecuaciones:
Notar que no es posible seguir aumentando el valor de la función objetivo mediante un incremento de las variables del lado derecho (en efecto, el valor de decrecería). En consecuencia estamos en presencia de la solución óptima del problema: con valor óptimo .
El procedimiento anterior basado en diccionarios favorece una mejor comprensión conceptual de los fundamentos sobre los que se basa el Método Simplex. De forma complementaria a continuación presentaremos a modo de contraste las iteraciones del Método Simplex utilizando tablas (o tableau) que comúnmente corresponde a la forma en la cual se presenta el algoritmo en cursos de pregrado.
A continuación incorporamos las variables de holgura (no negativas) que por definición tienen coeficiente nulo (cero) en la función objetivo. De esta forma obtenemos la forma estándar (*):
(*). Para nuestros efectos consideraremos que la forma estándar de un modelo de Programación Lineal esta dada por , siendo este formato el que preferentemente hemos utilizado para desarrollar las iteraciones del Método Simplex en otros artículos relacionados en nuestro sitio. En consecuencia la selección de dicho formato es meramente convencional.
Retomando nuestro ejemplo, el tableau inicial queda definido por:
Las variables de holgura definen una Solución Básica Factible Inicial, con (las variables no básicas inicialmente corresponden a las variables originales del modelo, es decir, que por definición adoptan un valor igual a cero.
¿Cómo verificar que el tableau inicial representa una solución básica factible óptima para el problema?.
Criterio de Optimalidad: Si en una iteración del Método Simplex se dispone de una solución básica factible y adicionalmente todos los costos reducidos son mayores o iguales que cero, parar ya que la actual solución básica factible es óptima.
En el ejemplo propuesto si bien nos encontramos frente a una solución básica factible el costo reducido de las variables no básicas son negativos, por tanto no se cumple el criterio de optimalidad, es decir, se puede seguir mejorando el valor de la función objetivo.
En este sentido consideraremos arbitrariamente como la variable que ingresa a la base, aun cuando no hay certeza que la selección de la variable no básica con el costo reducido más negativo contribuya necesariamente a la Rapidez de Convergencia del Método Simplex.
La variable que deja la base para dar lugar a se obtiene del criterio de factibilidad:
Criterio de Factibilidad: Para decidir que variable básica deja la base, es necesario calcular el mayor valor que puede tomar la variable no básica que entra a la base que garantice la factibilidad de la nueva solución básica. Para ello se considera un cuociente entre el valor de la solución básica factible actual y los coeficientes mayores a cero en la columna de la variable entrante. Si todos los cuocientes son negativos el Problema es No Acotado y por tanto no existe solución óptima.
En el ejemplo el criterio de factibilidad para la presente iteración esta dado por:
El menor cuociente se alcanza en la primera fila (restricción) que determina la variable que debe abandonar la base, en este caso, la variable . Luego se actualiza la tabla realizando operaciones filas considerando el denominador del mínimo cuociente como pivote. El objetivo es alcanzar en la columna de la variable lo que actualmente disponemos en la columna de la variable .
Por ejemplo, podemos dividir la fila 1 por 2 de modo de obtener un 1 en la posición del pivote. Luego sobre esta nueva fila 1 podemos multiplicarla por -4 y sumarla a la fila 2. También se puede alcanzar un cero para la variable en la fila 3 multiplicando por -3 la nueva fila 1 y sumándola a la fila 3. Finalmente para lograr un cero en el costo reducido de se multiplica por 5 la nueva fila 1 y se suma a la fila 4.
De este modo el tableau del Método Simplex al cabo de una iteración queda de la siguiente forma:
La solución básica factible actual corresponde a: con valor en la función objetivo . Se puede apreciar que dicho resultado es consistente con el enfoque de diccionarios utilizado inicialmente.
Claramente no se satisface el criterio de optimalidad dado que la variable no básica tiene costo reducido negativo. Por ello ingresa a la base y por tanto debemos calcular nuevamente el criterio de factibilidad para determinar la variable que deberá dejar la base:
El pivote ahora se encuentra en la fila 3 y en consecuencia la variable básica debe dejar la base. Notar que no se ha considerado para el cálculo del criterio de factibilidad el coeficiente de la variable correspondiente a la fila 2 del tableau anterior (cuyo valor es cero y por tanto el cuociente se indefine).
Actualizamos el tableau del Método Simplex obteniendo los siguientes resultados:
Los valores que adoptan las variables básicas correspondientes a esta nueva iteración es que además representa la solución óptima del modelo de Programación Lineal (dado el cumplimiento del criterio de optimalidad). Luego el valor óptimo corresponde a .
Importante: Existen herramientas computacionales y aplicaciones que permiten resolver online un problema de Programación Lineal mediante el Método Simplex. A continuación se presenta un extracto de los resultados alcanzados para nuestro ejemplo utilizando la aplicación disponible en http://www.programacionlineal.net/simplex.html.
Método Simplex (Conclusiones)
El ejemplo que hemos desarrollado en este artículo busca presentar de forma sencilla y didáctica los principales fundamentos asociados al Método Simplex. Cabe destacar que ha sido necesario para la aplicación del algoritmo llevar el modelo original a su forma estándar que como se discutió anteriormente puede tener distintas representaciones según la bibliografía que se consulte.
Si el problema tiene solución óptima, tiene una solución básica factible óptima.
Cabe destacar que no siempre se dispone de una solución básica factible en las variables originales del modelo (luego de llevar el problema a su forma estándar). Si bien existen diversas estrategias algorítmicas para enfrentar esta dificultad, se propone al lector revisar los tutoriales que hemos desarrollado sobre esta problemática, en particular respecto al Método Simplex de 2 Fases, Método de la M Grande y Método Simplex Dual.
Finalmente quisiéramos recordar a nuestros usuarios que en el Blog de Gestión de Operaciones se pueden encontrar a la fecha más de 80 publicaciones relativas a la Programación Lineal y la Investigación de Operaciones. De modo de favorecer una rápida búsqueda ingresa al menú Cómo Comenzar. Por último agradeceríamos compartir y difundir este material en la medida que haya sido considerado útil y evaluar este tutorial utilizando las estrellas al final de esta publicación.
El Método Simplex desarrollado por George B. Dantzig en 1947 es sin duda el algoritmo más popular a la hora de enfrentar la resolución de un modelo de Programación Lineal y ocupa un lugar destacado en los cursos introductorios a la Investigación de Operaciones.
En esta oportunidad hemos buscado resumir 10 conceptos principales sobre el uso y la aplicación del Método Simplex con el objetivo de que nuestros usuarios puedan tener una primera aproximación al método observando algunos aspectos característicos. Esta recopilación se basa sobre nuestra experiencia docente dictando cursos de Investigación Operativa y las preguntas que frecuentemente recibimos por parte de los alumnos de pregrado.
10 Cosas que Necesitas Saber sobre el Método Simplex
Te invitamos a revisar y compartir esta infografía en las redes sociales. Adicionalmente si consideras si un elemento importante quedo fuera de la lista anterior utiliza la herramienta de comentarios al pie de la página para hacernos saber tu opinión. De esta forma podremos ir actualizando periódicamente el artículo con las características principales del Método Simplex.
El el contexto del Análisis de Sensibilidad en Programación Lineal es usual analizar el impacto que tiene la modificación en la disponibilidad de los recursos en la solución óptima alcanzada originalmente. Esto corresponde al Cambio en el Lado Derecho de las Restricciones (Análisis de Sensibilidad en Programación Lineal). En el siguiente artículo abordaremos el caso cuando cambia un coeficiente o parámetro en el lado izquierdo de las restricciones, generalmente asociado a un coeficiente tecnológico o factor de productividad (por ejemplo, la cantidad de horas hombre que puede requerir la fabricación de un producto, la cantidad de dinero requerido por unidad a producir dada una restricción presupuestaria, entre otras). En relación a lo anterior consideremos el caso de una empresa la cual tiene un plan de producción representado por:
Donde es la cantidad a producir del bien j, z la utilidad de la empresa (en unidades monetarias u.m) y los coeficientes de las restricciones, la cantidad de recurso i por unidad del producto j. Al aplicar el Método Simplex al modelo anterior incorporando y como variables de holgura de las restricciones del recurso 1 y 2 respectivamente, resulta la siguiente tabla final:
Si el requerimiento del primer recurso por parte del producto j=2 cambia de 5 a 2 debido a la incorporación de una nueva tecnología ¿Cambia la actual solución óptima? (, y ). Sabemos que:
Luego al cambiar un coeficiente en el lado izquierdo asociado a la variable básica , es necesario actualizar la matriz de base inversa o . Lo anterior se deduce del cálculo de la matriz inversa asociada a la matriz donde los elementos en la columna correspondiente a los coeficientes en el lado izquierdo (forma estándar del Método Simplex) asociadas a las variables básicas y , respectivamente. Finalmente obtenemos la nueva solución básica y verificamos si es factible, esto es si el valor que adopta cada una de las variables básicas satisface las condiciones de no negatividad (en caso que una de las variables básicas alcance un valor negativo se puede continuar las iteraciones con el Método Simplex Dual luego de actualizar el valor de la función objetivo).
En nuestro ejemplo , y lo cual implica que se modifica la solución óptima original pero se conserva la actual base óptima (las mismas variables básicas originales). El nuevo valor óptimo será:
En un artículo previo respecto a Cómo resolver un modelo de Programación Lineal con el Método Simplex de 2 Fases, se consideró en una iteración intermedia (es decir, en un tableau que representa una solución básica factible no óptima) la entrada a la base de una variable no básica que no era aquella con el costo reducido más negativo. Dicha situación por cierto no tuvo incidencia respecto a alcanzar los resultados del modelo en cuanto a su solución óptima y valor óptimo, no obstante, dicha situación afecto la rapidez de convergencia del Método Simplex.
Entendemos por rapidez de convergencia en este caso, el número de iteraciones necesarias en la aplicación del Método Simplex para, comenzando en una solución básica factible inicial llegar a una solución básica factible óptima.
Se debe destacar que si bien es frecuente que en la bibliografía básica asociada a cursos de Investigación de Operaciones se considere como criterio privilegiar la entrada a la base de aquella variable no básica con el costo reducido más negativo esto NO garantiza un menor número de iteraciones en el Método Simplex.
Ejemplo Criterio Costo Reducido Más Negativo en el Método Simplex
Como forma de corroborar lo anterior retomaremos el modelo de Programación Lineal que fue presentado en el artículo mencionado anteriormente:
La resolución del problema anterior se aborda a través del Método Simplex de 2 Fases, incorporando y como variables de exceso y y como variables auxiliares, de las restricciones 1 y 2, respectivamente. Esto da origen al siguiente problema de la Fase 1.
Luego de algunas iteraciones del Método Simplex se alcanza la siguiente tabla:
A continuación podríamos seleccionar como variable que ingresa a la base tanto a , o , al tener cada una de estas variables no básicas un costo reducido negativo.
Luego, y según lo descrito anteriormente, podemos privilegiar la entrada a la base de la variable que tiene el costo reducido más negativo. En consecuencia el mínimo cuociente se calcula en la columna de la variable , siendo éste: , por tanto deja la base. Se actualiza la tabla con esta nueva información obteniendo lo siguiente que representa el fin de la Fase I:
Eliminamos las columnas de las variables auxiliares y y adicionalmente actualizamos el vector de costos reducidos considerando la función objetivo original.
Luego llevamos a cero los costos reducidos de las variables y :
Ahora entra la variable a la base. El criterio de factibilidad o mínimo cuociente determina que la variable deja la base. Se actualiza la tabla:
Que corresponde a la tabla final de la Fase II donde , y y que por cierto demuestra la equivalencia en los resultados obtenidos cuando en la tabla intermedia de la Fase I se ingresa a la base a la variable . Cabe destacar que una forma alternativa de resolver el problema anterior que evita la aplicación de las 2 Fases del Método Simplex es a través del Método Simplex Dual.
Ejemplo Criterio Costo Reducido Negativo en el Método Simplex
Consideremos el siguiente problema de Programación Lineal:
El lector puede corroborar que luego de llevar a la forma estándar el problema anterior, pasando a minimización la función objetivo y agregando como variables de holgura las variables y se dispone de una solución básica factible inicial en el origen (vértice A de la siguiente gráfica).
Si se privilegia la entrada a la base de aquella variable no básica con el costo reducido más negativo se debería seleccionar inicialmente la variable la cual permite concluir con las iteraciones del Método Simplex y alcanzar la solución óptima al cabo de 3 iteraciones (vértice D). Por el contrario si inicialmente se ingresa a la base la variable se alcanza la solución óptima al cabo de 1 iteración. Se recomienda al lector verificar estos resultados.
Este sencillo ejemplo demuestra que NO necesariamente garantiza una mayor rapidez de convergencia del Método Simplex el considerar como criterio de entrada a la base aquella variable no básica con el costo reducido más negativo.