Programación Lineal (Método Gráfico)

El Método Gráfico (resolución gráfica) constituye una excelente alternativa de representación y resolución de modelos de Programación Lineal que tienen 2 variables de decisión. Para estos efectos existen herramientas computacionales que facilitan la aplicación del método gráfico como los softwares TORA, IORTutorial y Geogebra, los cuales se pueden consultar en detalle en Cómo Resolver Gráficamente un Modelo de Programación Lineal con TORACómo Resolver Gráficamente un Modelo de Programación Lineal con IORTutorialCómo Resolver Gráficamente un modelo de Programación Lineal con Geogebra, respectivamente. En este contexto a continuación presentamos un compendio de ejercicios de Programación Lineal resueltos a través del método gráfico.

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:

variedad-vinos-programacion

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:

  • X_{1} : Hectáreas destinadas al cultivo de de Sauvignon Blanc
  • X_{2} : Hectáreas destinadas al cultivo de Chardonay

Función Objetivo:

Maximizar 50X_{1}+120X_{2}

Restricciones:

  • X_{1}+X_{2}\leq 110
  • 100X_{1}+200X_{2}\leq 10.000
  • 10X_{1}+30X_{2}\leq 1.200
  • X_{1},X_{2}\geq 0

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 X_{1}=60X_{2}=20 (hectáreas). El valor óptimo es V(P)=50(60)+120(20)=5.400 (dólares).

metodo-grafico-vitivinicola

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

tabla-maquinas-y-requerimie

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:

  • X_{1} : Unidades a producir del Producto 1 semanalmente
  • X_{2} : Unidades a producir del Producto 2 semanalmente

Función Objetivo:

Maximizar X_{1}+1,5X_{2}

Restricciones:

  • 2X_{1}+2X_{2}\leq 16
  • X_{1}+2X_{2}\leq 12
  • 4X_{1}+2X_{2}\leq 28
  • X_{1},X_{2}\geq 0

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.

glp-metodo-grafico

La solución óptima es X_{1}=4X_{2}=4 con valor óptimo V(P)=1(4)+1,5(4)=10 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:

  • X_{1} : Unidades a producir diariamente del Producto 1
  • X_{2} : Unidades a producir diariamente del Producto 2

Función Objetivo:

Maximizar (9-1,2)X_{1}+(8-0,9)X_{2}=7,8X_{1}+7,1X_{2}

Restricciones:

  • \frac{X_{1}}{4}+\frac{X_{2}}{3}\leq 90
  • \frac{X_{1}}{8}+\frac{X_{2}}{3}\leq 80
  • X_{1}\leq 200
  • X_{1},X_{2}\geq 0

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 X_{1}=200X_{2}=120 con valor óptimo V(P)=7,8(200)+7,1(120)=2.412 que corresponde a la utilidad máxima para la empresa.

metodo-grafico-produccion

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:

Ejemplo del Método Simplex (Tutorial y Cómo Funciona)

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 método simplex

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:

2x_{1}+3x_{2}+x_{3}\leq 5

Para cada solución factible x_{1},x_{2},x_{3}, 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 x_{4} como variable de holgura de dicha restricción, la cual se puede denotar por x_{4}=5-2x_{1}-3x_{2}-x_{3}, donde x_{4}\geq 0. De forma análoga se pueden definir las variables de holgura (no negativas) x_{5}x_{6} para las restricciones 2 y 3, respectivamente. Finalmente podemos describir la función objetivo 5x_{1}+4x_{2}+3x_{3} utilizando z de forma compacta.

En resumen, para cada selección de valores de las variables x_{1},x_{2}x_{3} podemos definir valores para las variables x_{4},x_{5},x_{6}, y z 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):

  • x_{4}=5-2x_{1}-3x_{2}-x_{3}
  • x_{5}=11-4x_{1}-x_{2}-2x_{3}
  • x_{6}=8-3x_{1}-4x_{2}-2x_{3}
  • z=5x_{1}+4x_{2}+3x_{3}

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 x_{1},x_{2},x_{3} en cero. De esta forma se alcanzan los siguientes resultados:

x_{1}=0,x_{2}=0,x_{3}=0,x_{4}=5,x_{5}=11,x_{6}=8,z=0

En el contexto del objetivo planteado anteriormente, debemos buscar una solución factible que permita alcanzar un mayor valor para z. Si, por ejemplo, mantenemos x_{2}=x_{3}=0 e incrementamos el valor de x_{1} obtenemos z=5x_{1}>0, de modo que si x_{1}=1 se obtiene z=5 (y x_{4}=3,x_{5}=7,x_{6}=5). Mejor aún, si x_{1}=2 (manteniendo x_{2}=x_{3}=0), se obtiene z=10 (y x_{4}=1,x_{5}=3,x_{6}=2).

Sin embargo, si asumimos x_{1}=3 (conservando x_{2}=x_{3}=0) el valor de la función objetivo ahora es z=15, pero x_{4}=-1,x_{5}=-1,x_{6}=-1 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 x_{1} (manteniendo x_{2}=x_{3}=0 al mismo tiempo) y seguir conservando la factibilidad (x_{4},x_{5},x_{6}\geq 0)?.

La condición x_{4}=5-2x_{1}-3x_{2}-x_{3}\geq 0 implica x_{1}\leq \frac{5}{2}; de forma similar x_{5}\geq 0 implica x_{1}\leq \frac{11}{4}x_{6}\geq 0 implica x_{1}\leq \frac{8}{3}. Claramente de estas 3 cotas para la variable x_{1} la más restrictiva es x_{1}\leq \frac{5}{2}, de modo que incrementamos el valor de x_{1} hasta ese valor de modo de obtener una nueva solución:

x_{1}=\frac{5}{2},x_{2}=0,x_{3}=0,x_{4}=0,x_{5}=1,x_{6}=1/2,z=\frac{25}{2}

Que claramente constituye una mejora para el valor de la función objetivo en comparación al valor inicial z=0.

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 x_{1} 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 x_{4} 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 x_{1} en términos de x_{2},x_{3},x_{4} según se observa a continuación:

x_{1}=\frac{5}{2}-\frac{3}{2}x_{2}-\frac{1}{2}x_{3}-\frac{1}{2}x_{4}

Luego, con el objetivo de expresar x_{5},x_{6}z en términos de x_{2},x_{3},x_{4}, simplemente substituimos el resultado anterior en las filas correspondientes:

  • x_{5}=11-4(\frac{5}{2}-\frac{3}{2}x_{2}-\frac{1}{2}x_{3}-\frac{1}{2}x_{4})-x_{2}-2x_{3}
  • x_{5}=1+5x_{2}+2x_{4}
  • x_{6}=8-3(\frac{5}{2}-\frac{3}{2}x_{2}-\frac{1}{2}x_{3}-\frac{1}{2}x_{4})-4x_{2}-2x_{3}
  • x_{6}=\frac{1}{2}+\frac{1}{2}x_{2}-\frac{1}{2}x_{3}+\frac{3}{2}x_{4}
  • z=5(\frac{5}{2}-\frac{3}{2}x_{2}-\frac{1}{2}x_{3}-\frac{1}{2}x_{4})+4x_{2}+3x_{3}
  • z=\frac{25}{2}-\frac{7}{2}x_{2}+\frac{1}{2}x_{3}-\frac{5}{2}x_{4}

De esta forma nuestro sistema de ecuaciones (diccionario) queda definido por:

  • x_{1}=\frac{5}{2}-\frac{3}{2}x_{2}-\frac{1}{2}x_{3}-\frac{1}{2}x_{4}
  • x_{5}=1+5x_{2}+2x_{4}
  • x_{6}=\frac{1}{2}+\frac{1}{2}x_{2}-\frac{1}{2}x_{3}+\frac{3}{2}x_{4}
  • z=\frac{25}{2}-\frac{7}{2}x_{2}+\frac{1}{2}x_{3}-\frac{5}{2}x_{4}

Como lo hicimos en la primera iteración debemos intentar incrementar el valor de la función objetivo (z) 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 x_{2}x_{4} generaría una disminución en el valor de z 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 z es seleccionar la variable x_{3}.

¿Cuánto debemos incrementar el valor de x_{3}?. La respuesta se puede obtener directamente del sistema de ecuaciones anterior, considerando x_{2}=x_{4}=0, la restricción x_{1}\geq 0 implica que x_{3}\leq 5; la restricción x_{5}\geq 0 no impone condiciones adicionales y la restricción x_{6}\geq 0 implica x_{3}\leq 1. En consecuencia x_{3}=1 es el mejor valor que puede adoptar dicha variable.

La nueva solución corresponde a:

x_{1}=2,x_{2}=0,x_{3}=1,x_{4}=0,x_{5}=1,x_{6}=0,z=13

El valor de z 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 x_{1},x_{3},x_{5} se encontraran en el lado izquierdo, mientras las variables igual a cero estarán en el lado derecho. De este modo pasamos la variable x_{3} al lado izquierdo, donde x_{3}=1+x_{2}+3x_{4}-2x_{6} que permite substituir en el resto de las ecuaciones:

  • x_{3}=1+x_{2}+3x_{4}-2x_{6}
  • x_{1}=2-2x_{2}-2x_{4}+x_{6}
  • x_{5}=1+5x_{2}+2x_{4}
  • z=13-3x_{2}-x_{4}-x_{6}

Notar que no es posible seguir aumentando el valor de la función objetivo z mediante un incremento de las variables del lado derecho x_{2},x_{4},x_{6} (en efecto, el valor de z decrecería). En consecuencia estamos en presencia de la solución óptima del problema: x_{1}=2,x_{2}=0,x_{3}=1,x_{4}=0,x_{5}=1,x_{6}=0 con valor óptimo z=13.

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.

Ejemplo del Método Simplex (Utilizando Tableau)

Consideremos nuevamente nuestro problema de Programación Lineal:

ejemplo método simplex

A continuación incorporamos las variables de holgura (no negativas) x_{4},x_{5},x_{6} que por definición tienen coeficiente nulo (cero) en la función objetivo. De esta forma obtenemos la forma estándar (*):

forma estándar ejemplo método simplex

(*). Para nuestros efectos consideraremos que la forma estándar de un modelo de Programación Lineal esta dada por Minimizar[c^{t}x, Ax=b,x\geq 0], 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:

tableau inicial método simplex

Las variables de holgura definen una Solución Básica Factible Inicial, con x_{4}=5,x_{5}=11,x_{6}=8 (las variables no básicas inicialmente corresponden a las variables originales del modelo, es decir, x_{1},x_{2},x_{3} 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 x_{1} 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 x_{1} 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:

Min[\frac{5}{2},\frac{11}{4},\frac{8}{3}]=\frac{5}{2}

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 x_{4}. 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 x_{1} lo que actualmente disponemos en la columna de la variable x_{4}.

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 x_{1} 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 x_{1} 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:

segundo tableau método simplex

La solución básica factible actual corresponde a: x_{1}=\frac{5}{2},x_{2}=0,x_{3}=0,x_{4}=0,x_{5}=1,x_{6}=1/2 con valor en la función objetivo z=\frac{25}{2}. 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 x_{3} tiene costo reducido negativo. Por ello x_{3} ingresa a la base y por tanto debemos calcular nuevamente el criterio de factibilidad para determinar la variable que deberá dejar la base:

Min[\frac{5/2}{1/2},\frac{1/2}{1/2}]=1

El pivote ahora se encuentra en la fila 3 y en consecuencia la variable básica x_{6} debe dejar la base. Notar que no se ha considerado para el cálculo del criterio de factibilidad el coeficiente de la variable x_{3} 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:

tableau óptimo método simplex

Los valores que adoptan las variables básicas correspondientes a esta nueva iteración es x_{1}=2,x_{2}=0,x_{3}=1,x_{4}=0,x_{5}=1,x_{6}=0 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 z=13.

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 online ejemplo

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.

En este contexto, cada problema de Programación Lineal en su forma estándar cumple con las siguientes propiedades establecidas en el Teorema Fundamental de la Programación Lineal:

  1. Si el problema no tiene solución óptima entonces es no-acotado o infactible.
  2. Si tiene una solución factible, tiene una solución básica factible.
  3. 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.

Adicionalmente con el objetivo de resumir algunas ideas principales del algoritmo hemos preparado una infografía que hemos llamado 10 Cosas que Necesitas saber sobre el Método Simplex.

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.

Problema de Tamaño de Lote No Capacitado (Formulación y Resolución en Solver)

El Problema de Tamaño de Lote No Capacitado o ULS (por sus siglas en inglés, Uncapacitated Lot-Sizing), consiste en decidir sobre un Plan de Producción para un horizonte de T periodos para un solo producto. El objetivo consiste en minimizar la sumatoria de los costos de producción, almacenamiento de productos en inventario y setup (costos de emisión), asumiendo que las demandas son conocidas en cada uno de los T periodos y éstas deben ser satisfechas de forma íntegra.

Una formulación típica del Problema de Tamaño de Lote No Capacitado considera los siguientes parámetros y variables de decisión.

Formulación Tradicional Problema de Tamaño de Lote No Capacitado

Variables de Decisión:

  • x_{t} = cantidad producida en el periodo t.
  • s_{t} = inventario al final del periodo t.
  • y_{t} = 1 si la producción ocurre en el periodo t, 0 si no.

Parámetros:

  • f_{t} = costo fijo de producción en el periodo t.
  • p_{t} = costo unitario de producción en el periodo t.
  • h_{t} = costo unitario de almacenamiento en el periodo t.
  • d_{t} = demanda en el periodo t.

La definición anterior da origen al siguiente problema de Programación Entera Mixta (PEM).

formulación tradicional tamaño de lote no capacitado

La función objetivo consiste en minimizar la suma de los costos de producción, costos de almacenamiento de productos en inventario y costos de emisión de pedidos, para todo el horizonte de planificación (T períodos).

Por otra parte las restricciones del problema quedan definidas por:

Balance de Inventario s_{t}=s_{t-1}+x_{t}-d_{t}: El inventario al final de un período t es igual al inventario al final del período anterior (t-1) más lo producido en el período t y menos lo demandado en el período t.

Capacidad de Producción x_{t}\leq M\cdot y_{t}: Si bien hemos definido el problema como no capacitado, esta restricción permite vincular la decisión de producción en un período con la cantidad (volumen) de dicha producción. De esta forma se evita situaciones anómalas como que en un período cualquiera se produzca y al mismo tiempo el y_{t} respectivo sea cero.

Además, asumiremos que la constante M es lo suficientemente grande (por ejemplo, la suma de las demandas para el horizonte de planificación). En términos prácticos esto hace que el problema no tenga limitantes de capacidad (es decir, es no capacitado) y que, en un extremo, podría producir en el primer período todo lo requerido durante el horizonte de planificación para luego ir satisfaciendo dichos requerimientos con los remanentes de inventario.

Inventario Inicial s_{0}=0: Se asume que no se dispone de inventario al inicio del horizonte de planificación.

Finalmente se establecen condiciones de no negatividad y binarios a las variables según corresponda.

Alternativamente se propone otra formulación como alternativa al Problema de Tamaño de Lote No Capacitado.

Formulación Dinámica Problema de Tamaño de Lote No Capacitado

Variables de Decisión:

  • w_{ts} = cantidad producida en el periodo t para satisfacer la demanda en el periodo s.
  • s_{ts} = inventario al final del periodo t destinado para el periodo s.
  • y_{t} = 1 si la producción ocurre en el periodo t, 0 si no.

Al conservar la definición de parámetros definida para la formulación anterior, se propone el siguiente modelo de Programación Entera:

formulación dinámica tamaño de lote no capacitado

De modo de corroborar la equivalencia de las formulaciones anteriores se propone una instancia sencilla que corresponde a 5 períodos de planificación (T=5) y donde los valores de los parámetros se resumen en la siguiente tabla. Por ejemplo, p_{1}=3 representa el costo de producción unitario en el período 1.

parámetros uls

La solución óptima alcanzada con la Formulación Tradicional del Problema de Tamaño de Lote No Capacitado ULS se observa en las celdas de color amarillo en la imagen a continuación. Se producen 32, 125 y 20 unidades en los períodos 1, 2 y 5, respectivamente, almacenando sólo productos en inventario al final del período 2 y 3 (84 y 36 unidades, respectivamente). El valor óptimo (costo total) asciende a $781.

solución óptima formulación tradicional uls

De forma análoga la solución óptima obtenida con la Formulación Dinámica del Problema de Tamaño de Lote No Capacitado ULS se observa en las celdas de color amarillo en la tabla a continuación.

Notar que w_{11}=32, es decir, en el primer período se produce sólo lo necesario para satisfacer los requerimientos de dicho período. Adicionalmente w_{22}=41, w_{23}=48 y w_{24}=36, es decir, en el período 2 se producen en total 125 unidades (41+48+36), para satisfacer la demanda de los períodos 2, 3 y 4. Por último en el período 5 se produce simplemente 20 unidades (w_{55}=20) para cumplir lo requerido.

Naturalmente dado lo descrito, la solución alcanzada en la Formulación Dinámica del ULS es equivalente a la obtenida en la Formulación Tradicional del ULS.

solución óptima formulación dinámica uls

Se puede consultar otras variantes de Problemas de Planificación de la Producción en nuestro sitio donde se detalla diversas formulaciones e instancias de problemas de esta naturaleza, donde destaca la contribución de la Investigación de Operaciones como herramienta de apoyo para la toma de decisiones.

[sociallocker]Descarga Aquí el Problema de Tamaño de Lote No Capacitado (ULS)[/sociallocker]




Ejemplo de Relajación Lagrangeana en Programación Entera

El método de Relajación Lagrangeana (o Relajación Lagrangiana) consiste básicamente en un Método de Descomposición cuya idea se basa en descomponer un problema original restringido, en principio complejo de resolver, de modo de reemplazarlo por otro problema que permita simplificar la resolución. Esto se logra incorporando aquellas restricciones que se consideran difíciles (las que hacen compleja la resolución directa del problema) a la función objetivo, donde cada una de éstas tendrá asociada un Multiplicador de Lagrange \lambda que permitirá (iterativamente) penalizar el incumplimiento de las mismas al ser establecidos distintos valores para los multiplicadores. De esta forma se espera que las restantes restricciones (las que no se incorporan mediante penalizaciones en la función objetivo) permitan verificar un problema cuya resolución sea fácil (o al menos más sencilla que el problema en su estructura original).

El problema asociado a encontrar los valores de \lambda que permitan minimizar la función LR(\lambda) (que en sí es un problema de maximización) se conoce como el Problema Dual Lagrangeano. En general puede resultar un problema tedioso de resolver, no obstante, a continuación se enumeran una serie de pasos que permiten una aproximación a la implementación del método de Relajación Lagrangeana.

Supongamos que el problema original es de Maximización y que la o las restricciones relajadas son inecuaciones del tipo \leqslant:

  1. Comenzar con cada \lambda igual a cero. Definir inicialmente (y de forma arbitraria) un Paso de magnitud k.
  2. Resolver LR(\lambda) de modo de alcanzar la solución óptima en términos de x.
  3. Para cada restricción violada por x, incrementar el correspondiente \lambda por k.
  4. Si han transcurrido m iteraciones desde que se alcanzo la última relajación para el problema dual lagrangeano, disminuir k a la mitad.
  5. Ir al Paso 2.

Para ilustrar el procedimiento anterior consideremos un Problema de la Mochila como el que se describe a continuación:

ejemplo relajación lagrangeana

Luego de resolver el problema de Programación Entera propuesto haciendo uso de Solver de Excel se alcanza la Solución Óptima: x_{1}=0, x_{2}=0, x_{3}=1, x_{4}=1 con Valor Óptimo: V(PE)=13.

Relajaremos las Restricciones 1 y 2 incorporando éstas a la función objetivo y dejando exclusivamente las condiciones de binarios para las variables de decisión. Esto da origen a nuestro problema de Relajación Lagrangeana LR(\lambda):

relajación lagrangeana programación entera

Consideraremos inicialmente \lambda_{1}=0 y \lambda_{2}=0. La resolución de dicha instancia es trivial obteniéndose como Solución Óptima: x_{1}=1, x_{2}=1, x_{3}=1, x_{4}=1 y Valor Óptimo: LR(\lambda)=22. Notar que la solución alcanzada no satisface la Restricción 1 (sin embargo, se satisface la Restricción 2).

Penalizaremos la Restricción 1 al considerar \lambda_{1}=0,5 (penalización arbitrariamente definida como punto de partida) y manteniendo \lambda_{2}=0 (dado que la Restricción 2 se satisface). La Solución Óptima es x_{1}=1, x_{2}=1, x_{3}=1, x_{4}=1 con Valor Óptimo de LR(\lambda)=20. En consecuencia, la penalización establecida resulto ser insuficiente para que se evitara la violación (incumplimiento) de la Restricción 1.

Sea \lambda_{1}=1 (aumentamos nuevamente en 0,5 la penalización de la Restricción 1) y \lambda_{2}=0. La Solución Óptima se mantiene: x_{1}=1, x_{2}=1, x_{3}=1, x_{4}=1 con Valor ÓptimoLR(\lambda)=18.

Sea \lambda_{1}=1,5 y \lambda_{2}=0. La Solución Óptima se mantiene: x_{1}=1, x_{2}=1, x_{3}=1, x_{4}=1 con Valor Óptimo: LR(\lambda)=16. Se sigue violando la Restricción 1.

Sea \lambda_{1}=2 y \lambda_{2}=0. La Solución Óptima ahora es: x_{1}=0, x_{2}=1, x_{3}=0, x_{4}=0 con Valor ÓptimoLR(\lambda )=15. Ahora se satisfacen las Restricciones 1 y 2, teniendo éstas holguras de 5 y 1, respectivamente. Luego si se decide disminuir la penalización de la Restricción 1 a \lambda_{1}=1,5 se vuelve al mismo punto de la iteración anterior. En consecuencia se disminuye la magnitud del paso (penalización) a 0,25 de modo que \lambda_{1}=1,75 y \lambda_{2}=0. La Solución Óptima es: x_{1}=1, x_{2}=1, x_{3}=1, x_{4}=0 con Valor Óptimo: LR(\lambda)=15.

No obstante, la Restricción 2 no se satisface para esta nueva solución y de esta forma se establecen nuevas penalizaciones: \lambda_{1}=1,75 y \lambda_{2}=0,25 y  que dan origen a la Solución Óptima: x_{1}=1, x_{2}=1, x_{3}=1, x_{4}=1 con Valor Óptimo: LR(\lambda)=15.

El procedimiento continua de esta forma disminuyendo la magnitud del paso (penalización) cuando resulta necesario. Notar que de esta forma las respectivas penalizaciones pueden aumentar o disminuir al cabo de una iteración. El detalle de las iteraciones realizadas se muestra a continuación:

iteraciones relajación lagrangeana

Para cada iteración k se muestra la penalización aplicada para la Restricción 1 y 2 respectivamente, el criterio para la actualización del Paso, el valor de la función objetivo de la Relajación Lagrangeana LR(\lambda ), la Solución Óptima alcanzada para el problema (destacado con color amarillo), el valor que representa dicha solución óptima al ser evaluada en la función objetivo original V(PE), la holgura de la Restricción 1 (2) (con color rojo se destaca cuando se viola la restricción en una determinada magnitud) y si la solución óptima alcanzada en la iteración k-ésima es factible en el problema original PE).

convergencia dual lagrangeano

Según se señala en un tutorial  por Michael A. Trick (donde se ha tomado este ejemplo y se ha extendido a un número mayor de iteraciones con ciertas variaciones en la aplicación de las mismas) las penalizaciones “óptimas” (luego de seguir iterando) corresponderán aproximadamente a \lambda_{1}=1,83 y \lambda_{2}=0,33, alcanzando LR(\lambda )=14,67 que constituye una cota superior del valor óptimo del problema original. La Solución Óptima asociada a este escenario es x_{1}=0, x_{2}=1, x_{3}=1, x_{4}=0 que es factible en el problema original y reporta un valor en la función objetivo de 11. Notar que la Solución Óptima del PE) es x_{1}=0, x_{2}=0, x_{3}=1, x_{4}=1 con Valor Óptimo de 13.




Informes de Sensibilidad en Premium Solver Pro (Interpretación)

Las ventajas que ofrece la utilización de una herramienta de optimización profesional como Premium Solver Pro son múltiples y son rápidamente identificadas por quienes comienzan a formarse en el apasionante mundo de la Investigación de Operaciones. Respecto a este tema en particular he tenido el honor de publicar un artículo (en inglés) en el Blog del prestigioso sitio de FrontlineSolvers (desarrolladores del complemento Solver para Excel) llamado How to Correctly Interpret Sensitivity Reports in Premium Solver. En este contexto a continuación presentamos la traducción del mismo a español teniendo en cuenta que parte mayoritaria de nuestros lectores son de países de habla hispana.

En mi experiencia como profesor de Investigación de Operaciones he constatado de forma directa los beneficios de implementar computacionalmente modelos de optimización de distinta complejidad en un ambiente de aprendizaje intuitivo y al mismo tiempo confiable. En este sentido los alumnos adquieren rápidamente las destrezas suficientes para resolver problemas de optimización de distinto tamaño en una plataforma conocida como resulta ser Excel.

Cabe destacar adicionalmente que Premium Solver Pro no solo nos permite resolver modelos de optimización, también ofrece la oportunidad de generar Informes de Sensibilidad una vez alcanzada la solución óptima y valor óptimo de un modelo base. En este contexto el análisis de sensibilidad o postoptimal buscar analizar el impacto que tiene en los resultados de un modelo la modificación de uno o varios parámetros del mismo.

Un Informe de Sensibilidad de Premium Solver Pro se divide en 3 partes:

  1. Función objetivo
  2. Celdas variables
  3. Restricciones

A continuación presentamos un sencillo modelo de Programación Lineal el cual será implementado computacionalmente, obteniendo el Informe de Sensibilidad que analizaremos en detalle con el objetivo de interpretarlo de forma correcta.

modelo pl premium solver

Luego de utilizar Premium Solver Pro para resolver el modelo anterior se alcanza la solución óptima x_{1}=3 y x_{2}=6, con valor óptimo V(PL)=342.

solución premium solver

A continuación podemos obtener el Informe de Sensibilidad accediendo al módulo Reports > Optimization > Sensitivity, tal cual se muestra a continuación:

sensitivity report premium solver

Una vez que solicitemos el Informe de Sensibilidad se generará una nueva hoja en el archivo Excel que estemos trabajando con el reporte de los resultados. Para el ejemplo propuesto en este artículo los resultados son los siguientes:

análisis de sensibilidad premium solver

A continuación detallaremos cómo interpretar cada una de las 3 partes que nos ofrece el Informe de Sensibilidad de Solver.

  1. Objective Cell (Max): Se observa que el valor óptimo, es decir, el valor de la función objetivo del problema de maximización al ser evaluada en la solución óptima alcanzada es de 342. Dicho valor se obtiene de: V(PL)=(34)*3+(40)*6=342.

  1. Decision Variable Cells: En esta sección se puede identificar la solución óptima (valores bajo la columna etiquetada como Final Value), los coeficientes o parámetros en la función objetivo (valores en la columna Objective Coefficient), el aumento permisible y la disminución permisible para cada uno de los coeficientes de forma individual en la función objetivo que permite garantizar que se conserva la actual solución óptima.

Por ejemplo, consideremos el coeficiente c_{1}=34 asociado a la variable de decisión x_{1} en la función objetivo de maximización. La disminución permisible para dicho parámetro es de 7,333 aprox (equivalente a 22/3) unidades y el aumento permisible de 6, de modo que si c_{1}\epsilon [34-\frac{22}{3},34+6] ==>c_{1}\epsilon [26,\bar{6},40] se conserva la solución óptima original (notar que se asume para este análisis que el resto de los parámetros del modelo mantienen sus valores iniciales). De forma análoga recomendamos al lector verificar que el intervalo de variación para c_{2} que conserva la actual solución óptima es c_{2}\epsilon [34,51].

  1. Constraints: Un primer aspecto a observar es si una restricción se encuentra activa al ser evaluada en la solución óptima. Una restricción activa es aquella que se satisface en igualdad. Por ejemplo, se puede ver que para las Restricciones 1 y 2 el valor bajo la columna Final Value es idéntico al lado derecho de la restricción o Constraint R.H. Side. Dicho de otra forma, dado que las Restricciones 1 y 2 son activas en el óptimo, la solución óptima del problema propuesto se puede obtener mediante la resolución de un sistema de ecuaciones con 1 y 2 activas. Notar que adicionalmente la Restricción 3 si bien se satisface no se cumple en igualdad.

También resulta de interés interpretar lo que se conoce como Precio Sombra de una restricción.

El Precio Sombra corresponde a la tasa de cambio del valor óptimo de un modelo de Programación Lineal ante la modificación marginal del lado derecho de una restricción. Se entiende por una modificación marginal aquella que permite conservar la base óptima del problema (idénticas variables básicas originales en el caso del Método Simplex) o la geometría del problema (mantener las restricciones activas originales).

Dada la definición anterior es natural comprender que el Precio Sombra de la Restricción 3 sea cero. Si el lado derecho representa la disponibilidad de un recursos (por ejemplo, horas hombre, unidades de materia prima, etc), en la solución óptima original se utiliza 12 de las 16 unidades disponibles (que es consistente con una disminución permisible de 4 unidades y un aumento permisible de 1E+30 o infinito) para el recurso. Adicionalmente como la Restricción 3 no es activa, cualquier variación del lado derecho de dicha restricción en el intervalo b_{3}\epsilon [12,+\infty[  no solo conserva el valor óptimo, sino también la solución óptima original.

El caso de las Restricciones 1 y 2 es diferente. Por ejemplo, si aumenta en una unidad el lado derecho de la Restricción 1, pasando de 48 a 49 unidades (notar que el aumento permisible para dicho parámetro  es de 6 unidades) el valor óptimo aumentará de forma proporcional al Precio Sombra de dicha restricción: V(\bar{P})=V(P)+\Delta b_{1}*\pi _{1}=342+(49-48)*3=345. De forma análoga si, por ejemplo, en vez de aumentar el lado derecho de la Restricción 1, disminuye de 48 a 45 (disminución de 3 unidades que está dentro del rango permitido), el nuevo valor óptimo será: V(\bar{P})=V(P)+\Delta b_{1}*\pi _{1}=342+(45-48)*3=333. Recomendamos al lector verificar directamente estos resultados luego de reoptimizar ante los cambios propuestos.

En síntesis queda en evidencia que la utilidad de Premium Solver Pro va más allá de implementar y resolver computacionalmente un modelo de optimización. En este sentido interpretar de forma correcta el análisis de sensibilidad que nos ofrece genera un ahorro de tiempo frente al escenario de reoptimizar que muchas veces es evitable, además de que nos permitir comprender de mejor forma la estructura de una solución óptima, que no sólo se limita a identificar cuál es el valor que alcanzan las variables de decisión en la resolución computacional.