Branch and Bound

Ramificación, cotas, poda por suboptimalidad y ejemplo completo de mochila entera.

Branch and Bound: idea central

Branch and Bound es una técnica para resolver problemas de optimización explorando un árbol de decisiones. En cada nodo se calcula una cota que estima qué tan buena podría llegar a ser la mejor solución dentro de esa rama.

La técnica combina dos acciones: ramificar y acotar. Ramificar significa dividir el problema en decisiones más específicas. Acotar significa estimar si una rama todavía tiene posibilidad de mejorar la mejor solución encontrada.

Idea esencial

Branch and Bound no explora una rama solo porque sea válida. La explora únicamente si todavía puede mejorar la mejor solución conocida.

Diferencia básica con backtracking

CriterioBacktrackingBranch and Bound
Tipo de problemaBúsqueda de soluciones válidas.Búsqueda de la mejor solución.
Poda principalPor infactibilidad.Por infactibilidad y por suboptimalidad.
Orden de exploraciónNormalmente profundidad.Profundidad, anchura o cola de prioridades.

Conceptos clave

El algoritmo mantiene una mejor solución conocida y una lista de nodos pendientes. Cada nodo se conserva o se descarta según sus cotas.

Modelo de poda en maximización

En un problema de maximización, es la cota superior (estimación optimista) del nodo . Si este valor máximo posible ni siquiera alcanza a la mejor solución ya encontrada (mejor), la rama se corta porque no tiene sentido seguir explorando algo que no puede superar lo que ya tenemos.

Modelo de poda en minimización

En minimización, representa la cota inferior (el costo mínimo estimado). Si el costo más bajo que podríamos conseguir en esta rama es mayor o igual que el mejor costo ya conocido, descartamos el nodo.

Glosario técnico de Branch and Bound

ConceptoRol en el algoritmo
Cota global / IncumbenteReferencia del mejor valor factible encontrado hasta ahora.
Lista de Nodos Vivos (LNV)Estructura que guarda los nodos generados pero no expandidos.

Modelo general de Branch and Bound

Cada nodo representa una solución parcial. Además de las decisiones tomadas, el nodo guarda el valor acumulado, los recursos usados, una cota optimista y el siguiente nivel de decisión.

Modelo de nodo

Un nodo N se define por el vector de decisiones parciales , el valor y recurso consumido hasta el momento, las cotas inferior () y superior (), y el nivel en el árbol de decisiones.

Modelo de ramificación binaria

Ramificar consiste en dividir el problema actual en dos o más subproblemas. En el caso binario, esto suele significar tomar una decisión (valor 1) o ignorarla (valor 0) para el siguiente elemento del problema.

Actualización de la mejor solución

La variable se actualiza únicamente cuando encontramos una solución que es factible (cumple restricciones), completa (todas las decisiones tomadas) y que además supera el valor previo.

Modelo completo de decisión sobre un nodo

Este modelo resume el destino de un nodo. Puede morir por exceder recursos, por ser una hoja del árbol, o por ser suboptimal (su cota superior no supera al mejor). Si no cumple nada de esto, el nodo permanece vivo para ser explorado más tarde.

Flujo general de Branch and Bound

Renderizando diagrama...

Ejemplo completo: Mochila entera 0/1

En la mochila entera 0/1 se tienen objetos con valor y peso. El objetivo es maximizar el valor total sin superar la capacidad.

Modelo de decisión

La variable de decisión es binaria. Un valor de 1 indica que el objeto forma parte de la mochila, y un 0 indica que se queda fuera.

Modelo de optimización

Buscamos maximizar la suma de los valores () de los objetos elegidos, con la restricción de que la suma de sus pesos () no exceda la capacidad total W.

Árbol de exploración Branch and Bound — Mochila 0/1

Renderizando diagrama...

Solución óptima

La solución óptima es , es decir, tomar los objetos 1, 2 y 4. El peso total es y el valor total es .

Cota superior por mochila fraccionaria

Para estimar una cota superior en mochila 0/1, permitimos tomar fracciones de objetos. Esa solución fraccionaria es siempre mayor o igual a cualquier solución entera.

Modelo de cota superior

La cota superior del nodo es la suma del valor ya acumulado más el valor que obtendríamos si pudiéramos llenar el resto de la capacidad de forma óptima usando fracciones de los objetos que sobran.

Valor de una fracción

Cuando un objeto ya no cabe completo, tomamos solo la parte proporcional que complete la capacidad W. Su valor se calcula multiplicando el valor total del objeto por la fracción de peso que estamos aprovechando.

Complejidad de Branch and Bound

Branch and Bound puede ser rápido en la práctica, pero su peor caso sigue siendo exponencial.

Modelo general de costo

El tiempo total depende del número de nodos visitados multiplicado por el costo de las operaciones por nodo: generar hijos (), calcular la cota () y gestionar la lista de nodos vivos ().

Peor caso binario

En el peor de los casos, la cota no descarta ninguna rama y visitamos todo el árbol binario de tamaño . Sin embargo, una buena cota puede hacer que el número real de nodos sea órdenes de magnitud menor.

Mochila 0/1 con cota fraccionaria

Como el cálculo de la cota fraccionaria requiere un recorrido lineal por los objetos restantes, el costo por nodo es , lo que multiplica el costo total del árbol.

Costo adicional de cola de prioridad

Si usamos una cola de prioridad para Max Benefit o Least Cost, insertar y extraer nodos tiene un costo logarítmico respecto al número de nodos vivos en ese momento.

Resumen operativo

Receta mínima
  1. Define la función objetivo.
  2. Representa cada solución como secuencia de decisiones.
  3. Define ramificación y cotas seguras.
  4. Mantén la mejor solución factible (incumbente).
  5. Elige estrategia de recorrido (Max Benefit recomendado).
  6. Expande y poda hasta vaciar la LNV.

Modelos clave

Nodo

Un nodo guarda el estado de la búsqueda en un punto dado.

Poda en maximización

Se descarta la rama si su máximo potencial no supera lo ya conseguido.

Costo general

El costo se mide en nodos multiplicados por el trabajo en cada uno.