Ejemplo del Algoritmo de Branch and Bound (Ramificación y Acotamiento)

El método de Branch and Bound (o Ramificación y Acotamiento) es un algoritmo diseñado para la resolución de modelos de Programación Entera. Su operatoria consiste en linealizar el modelo de Programación Entera, es decir, resolver éste como si fuese un modelo de Programación Lineal y luego generar cotas en caso que al menos una variable de decisión (entera) adopte un valor fraccionario.

El algoritmo genera en forma recursiva cotas (o restricciones adicionales) que favorecen la obtención de valores enteros para las variables de decisión. En este contexto resolver el modelo lineal asociado a un modelo de Programación Entera se conoce frecuentemente como resolver la relajación continua del modelo entero.

Ejemplo Branch & Bound (Ramificación y Acotamiento)

Consideremos el siguiente modelo de Programación Entera el cual resolveremos con el algoritmo de Branch and Bound:

Problema Branch and Bound

El paso inicial consiste en resolver este problema como si fuese un modelo de Programación Lineal (relajación continua). Si la solución de dicho problema llegara a respetar las condiciones de integralidad para las variables de decisión, ésta ya sería la solución óptima del problema entero.

Si bien este procedimiento se puede extender a problemas de mayor dimensión, utilizamos un modelo en 2 variables para poder representar los pasos del algoritmo gráficamente. El gráfico a continuación muestra dicha resolución:

Relajación Continua Branch and Bound

La solución óptima del problema lineal asociado (que llamaremos P0) es X1=2,8 y X2=1,6 con valor óptimo V(P0)=20,8. Claramente esta solución no cumple las condiciones de integralidad para las variables de decisión por tanto es necesario generar cotas o restricciones adicionales de modo de poder obtener soluciones enteras. Para ello debemos seleccionar una de las 2 variables de decisión con valores fraccionarios para poder generar cotas. En estricto rigor es indistinto cuál de ellas seleccionemos debido a que el método nos debe llevar a conclusiones similares (aun cuando la cantidad de pasos requeridos o rapidez de convergencia cambie).

En nuestro ejemplo generaremos cotas adicionales para la variable X1 aproximando su valor actual al entero inferior más cercano (P1) y entero superior más cercano (P2).

La resolución gráfica del problema 1 (P1) nos da como solución óptima X1=2 y X2=2 que es una solución entera. El valor óptimo del problema 1 es V(P1)=20. Notar que V(P1)<V(P0) lo cual es natural dado que el dominio de soluciones factibles del P1 es menor (subconjunto) al dominio de soluciones factibles de P0.

P1 Branch and Bound

Análogamente la resolución gráfica (Método Gráfico) del problema 2 (P2) determina que X1=3 y X2=4/3 con V(P2)=20 según se observa a continuación:

P2 Branch and Bound

Luego no sería del todo necesario seguir desarrollando el algoritmo dado que si generamos cotas para la variable X2 del P2 en ningún caso podríamos obtener una solución entera con valor óptimo superior a 20 (valor que reporta en la función objetivo la actual solución entera de P1) y por tanto podríamos concluir que X1=2 y X2=2 es la solución óptima del problema entero. No obstante el siguiente diagrama muestra los pasos adicionales en caso que quisiera agregar cotas adicionales a partir del P2.

Solución Branch and Bound

Un argumento similar al expuesto previamente en este caso explicaría la no necesidad de seguir ramificando el P21. Se propone al lector verificar que se obtiene la misma solución óptima si luego del P0 ramificamos a través de X2 agregando las restricciones X2<=1 y X2>=2.

Problema de la Dieta en Programación Lineal resuelto con Solver de Excel

Una de las aplicaciones clásicas de la Programación Lineal es el Problema de la Dieta. El objetivo es seleccionar un conjunto de alimentos dados que permitan satisfacer ciertos requerimientos nutricionales y preferencias y que adicionalmente tenga un costo mínimo.

En este contexto en el Servidor NEOS se puede encontrar un conjunto de antecedentes que permiten comprender el contexto histórico del Problema de la Dieta y cómo se puede abordar de forma eficiente a través de modelos de optimización. Al igual que varias de las aplicaciones de la Investigación de Operaciones este problema tiene un origen militar.

Para efectos de este tutorial y con el objetivo de ilustrar esta aplicación consideremos el siguiente listado de alimentos con su perfil nutricional y costo monetario:

Tabla Alimentos

Se desea proponer una dieta que contenga al menos 2.000 (Kcal) , al menos 55 gramos de proteína y 800 (mg) de calcio. Adicionalmente para garantizar cierta variedad en la dieta se establece límites de porciones por día en los alimentos. Con esta información se requiere encontrar la dieta que tenga el menor costo asociado y permita satisfacer los requerimientos anteriores.

Para ello definimos el siguiente modelo de Programación Lineal:

1. Variables de Decisión: Xi : Porciones de alimentos a consumir durante el día del alimento i (Con i=1 ==> Avena, …. i=6 ==> Porotos).

2. Función Objetivo: Minimizar 30X1+240X2+130X3+90X4+200X5+60X6

3. Restricciones:

  • Mínimo de Calorias (KCal): 110X1+205X2+160X3+160X4+420X5+260X6 >= 2.000
  • Mínimo de Proteínas: 4X1+32X2+13X3+8X4+4X5+14X6 >= 55
  • Mínimo de Calcio: 2X1+12X2+54X3+285X4+22X5+80X6 >= 800
  • Variedad de la Dieta: X1<=4   X2<=3   X3<=2   X4<=8   X5<=2   X6<=2
  • No Negatividad: Xi>=0 Para todo i.

La implementación de este modelo en Solver de Excel para obtener su solución óptima y valor óptimo se muestra en el siguiente tutorial:

La Solución Óptima es X1=4, X2=0, X3=0, X4=2,08, X5=1,68, X6=2 y el Valor Óptimo (costo de la dieta) es $764,07.

Como el modelo es de Programación Lineal se permiten valores fraccionarios para las variables de decisión. Por tanto si buscamos solo valores enteros para las variables de decisión en ese caso debemos definir un modelo de Programación Entera el cual revisamos en el siguiente artículo: Problema de la Dieta en Programación Entera resuelto con Solver de Excel.

Cómo calcular Gráficamente el Precio Sombra de una Restricción

El Precio Sombra de una restricción en Programación Lineal indica cuánto cambia el valor de la función objetivo (óptimo) ante una variación marginal del lado derecho de una restricción. Se asume que el resto de los parámetros del modelo permanecen constantes. De antemano es conveniente señalar que el Precio Sombra puede ser positivo, cero o negativo y en el Blog iremos discutiendo estos distintos escenarios.

Para obtener los Informes de Sensibilidad de un modelo de Programación Lineal se puede hacer uso de herramientas computacionales como Solver de Excel, sin embargo, en esta oportunidad nos enfocaremos en el cálculo del precio sombra de una restricción en forma gráfica, lo que nos ayudará más adelante a entender los conceptos que fundamentan los resultados de Solver.

Cálculo del Precio Sombra de una Restricción con el Método Gráfico

A continuación calcularemos el precio sombra de una restricción del siguiente modelo de Programación Lineal:

Modelo de Programación Lineal

La solución óptima de este modelo es X=100 e Y=350 con valor óptimo V(P)=3.100 según su resolución gráfica con Geogebra o su resolución con Solver de Excel. El siguiente diagrama muestra la solución óptima obtenida gráficamente en el vértice C, que corresponde a la intersección de la restricción 1 (R1: color rojo) y la restricción 3 (R3: color gris), siendo ésta una solución básica factible óptima.

Resolución Gráfica Programación Lineal

Supongamos que deseamos saber cuánto cambiará el valor óptimo (respecto a su valor actual) si aumenta en una unidad el lado derecho de la restricción 1 pero sin resolver nuevamente el problema. El precio sombra nos permite dar respuesta a dicha interrogante y permite anticipar el nuevo valor óptimo ante una variación marginal del lado derecho de una restricción.

Un variación marginal de un lado derecho implica que la nueva solución óptima se seguirá encontrando con las actuales restricciones activas, es decir, aquellas que se cumplen en igualdad en el óptimo (esto es se conserva la base óptima).

En el caso de la restricción 1 si aumentamos su lado derecho, ésta se desplazará en forma paralela hacia arriba. Si buscamos garantizar que la nueva solución óptima aún se encontrará con R1 y R3 activas llegaremos al vértice donde actualmente se interceptan la R2 y R3 que corresponde a la coordenada X=166,67 e Y=350 (ésta será la máxima variación).

En forma análoga si disminuimos el lado derecho de la restricción 1 y buscamos mantener R1 y R3 activas en el nuevo óptimo, el último punto donde se garantiza esto es el vértice B cuyas coordenadas son X=0 e Y=350 (ésta será la menor variación). Con esta información calculamos el precio sombra de la restricción 1:

Precio Sombra R1

Este precio sombra es válido si el lado derecho de la restricción 1 (actualmente b1=1.600) varía entre [1.400,1.733,33]. Por ejemplo, si el lado derecho de R1 aumenta de 1.600 a 1.700 el nuevo valor óptimo será V(P)=3.100+100*1,5=3.250. Análogamente si el lado derecho de R1 disminuye de 1.600 a 1.550 el nuevo valor óptimo será V(P)=3.100-50*1,5=3.025. (Se recomienda corroborar estos resultados gráficamente con TORA o IORTutorial). Notar que si la variación del lado derecho de la restricción 1 está por fuera del intervalo [1.400,1.733,33], no se puede utilizar el precio sombra para predecir cuál será el nuevo valor óptimo.

En un próximo análisis complementaremos el cálculo del precio sombra de las restricciones 2 y 3 en conjunto con otros Análisis de Sensibilidad en la resolución de modelos de programación lineal. Hasta entonces!

Cómo resolver un modelo de Programación Lineal con el Método Simplex

Existen algunas herramientas en Internet que permiten resolver modelos de Programación Lineal utilizando el Método Simplex. Este tipo de aplicaciones resultan de bastante utilidad para los estudiantes de ingeniería que desean verificar si los resultados que obtienen en la aplicación manual del método resultan ser correctos.

En esta oportunidad revisaremos la interfaz para resolver modelos de Programación Lineal con el Método Simplex disponible en el sitio web ProgramacionLineal.net. Para ello utilizaremos un modelo lineal en 2 variables que previamente resolvimos gráficamente con el complemento Solver de Excel y el software Geogebra.

Cómo resolver un modelo de Programación Lineal con el Método Simplex

Modelo de Programación Lineal

El siguiente tutorial muestra cómo implementamos este modelo de optimización con la herramienta de resolución del Método Simplex:

La última tabla del Método Simplex luego de la resolución con esta aplicación y eliminando la columna p (no es necesaria) es la siguiente:

Tabla Optima Metodo Simplex

La Solución Óptima (que corresponde a una solución básica factible óptima) es x=100 e y=350 (x e y son las variables básicas de las filas 1 y 3 respectivamente). El valor óptimo es V(P)=3.100. Notar que la solución óptima corresponde al vértice C de la representación gráfica del problema propuesto que se muestra a continuación:

resolver pl con geogebra

Importante: Las variables s1 y s3 son variables no básicas en la actual solución óptima y por tanto su valor es cero. La variable s2 es la variable básica de la fila 2 y toma el valor de 400. Notar que las variables s1, s2 y s3 son inicialmente las variables de holgura necesarias para llevar el modelo de Programación Lineal a su forma estándar.

Problema de Transporte resuelto con Solver de Excel

Un Problema de Transporte consiste básicamente en determinar una política de distribución óptima que permita satisfacer los requerimientos de un determinado número de clientes asociado a la capacidad o logística de un cierto conjunto de oferentes.

Este tipo de problemas es una aplicación clásica de los modelos de Programación Lineal debido a que nos permite abordar problemas de naturaleza real y adicionalmente, se puede incorporar elementos adicionales que hacen más compleja la representación a través de un modelo de optimización, pero que, sin embargo, en la mayoría de los casos resulta ser más realista.

En el siguiente artículo podrás encontrar un vídeo que describe la formulación general de un problema de transporte básico, como también el detalle de un caso específico o instancia y su posterior resolución computacional.

Problema de Transporte

A continuación se presenta probablemente el caso más simple a considerar para un Problema de Transporte. Asumamos que tenemos 2 oferentes (P1 y P2) con capacidad de producción de 160.000 y 120.000 unidades de un producto homogéneo. Estos oferentes deben abastecer a 3 clientes (C1, C2 y C3) con demandas unitarias de 80.000, 70.000 y 90.000 unidades, respectivamente. El gráfico a continuación muestra sobre las flechas los costos unitarios de transporte entre un origen (oferente) a un cliente (demandante).

Problema de Transporte

El problema consiste en determinar una política óptima de abastecimiento desde los oferentes a los demandantes de modo de cumplir los requerimientos y lograr los costos más bajos posibles. Para ello definiremos el siguiente modelo de Programación Lineal:

1. Variables de Decisión:

Xij : Unidades Transportadas desde la Planta i hasta el Cliente j (Con i=1,2, y j=1,2,3)

2. Función Objetivo:

Consiste en minimizar la función que representa los costos de transporte entre los oferentes y los demandantes.

Minimizar 3X11 + 4X12 + 6X13 + 5X21 + 3X22 + 5X23

3. Restricciones:

  • X11 + X21 = 80.000   (Satisfacer Demanda Cliente 1)
  • X12 + X22 = 70.000   (Satisfacer Demanda Cliente 2)
  • X13 + X23 = 90.000   (Satisfacer Demanda Cliente 3)
  • X11 + X12 + X13 <= 160.000   (Capacidad Planta 1)
  • X21 + X22 + X23 <= 120.000   (Capacidad Planta 2)
  • Xij >= 0   (No Negatividad)

Luego de implementar este modelo en Solver de Excel se obtiene la Solución Óptima: X11=80.000; X12=40.000; X13=0; X21=0; X22=30.000; X23=90.000. El Valor Óptimo (mínimo costo) es de $940.000. A continuación un video tutorial con el detalle de la resolución.

El ejemplo de transporte anterior es sin duda una de las versiones más sencillas que se puede encontrar de esta clase de problemas. Una extensión interesante y generalmente objeto de estudio en los cursos de Investigación de Operaciones es el Modelo de Transporte con TransbordoProblema de Transbordo en una Red Logística de Transporte Multiperíodo.