Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Recuerdo
Modelo de programación lineal entera
xLP = (0,2.5)
zLP = 2.5
¿cómo redondeamos?
¿(0,2)? ¿(0,3)?
¿Factible? ¿Óptimo?
Idea: subdividir en 2 problemas,
agregando y≤2 o y≥3)
Branch & Bound
El algoritmo de Branch & Bound (ramificación y
acotamiento) permite resolver un problema de
optimización lineal entera, resolviendo una secuencia de
problemas lineales.
Se resuelven solamente problemas continuos
Se subdividen los problemas, agregando restricciones
adicionales.
El algoritmo converge eventualmente al óptimo.
Conceptos
Solución Incumbente: mejor solución factible (entera)
conocida del problema.
Árbol de B&B: Representación gráfica de lo realizado por
el algoritmo.
Ramificar: subdividir un problema agregando
restricciones.
Podar: Dejar de explorar una rama del árbol, ya que:
es infactible, o
no nos lleva a una mejor solución que la incumbente.
Branch & Bound
Problema inicial
7.6 P y 2 y3
2 P3 5.33
Branch & Bound (del P3)
O bien x≥1 o x≤0
7.6 P y 2 y3
2 P3 5.33
x x
10 P4 P5 INF
Branch & Bound (del P2)
O bien x≥1 o x≤0
7.6 P y 2 y3
2 P3 5.33
x x x x
7.6 P y 2 y3
2 P3 5.33
x x x x
y 2 y
9 P8 P9 17.8
P4
P8
P9
Algoritmo de Branch & Bound
1. Definir P1 el problema original, A={P1} y I=infinito
2. Si conjunto A es vacío, entonces:
Si I=, TERMINAR. El problema es infactible
Si I≠, TERMINAR. La solución xI es óptima.
3. Elegir un problema de A (digamos, Pi) y resolverlo.
4. Si Pi es infactible, podar el nodo (eliminar Pi de A) y volver al
paso 2. De lo contrario, sea x* su solución.
5. Si x* es entero y z*>I, entonces xI = x* y I=z*
6. Si x* es fraccionaria, elegir una variable xk tal que xk* sea
fraccionaria
Definir P2i =
Definir P2i+1 =
Agregar P2i y P2i+1 al conjunto A.
7. Podar Pi y volver paso 2.
Algoritmo de Branch & Bound
Mejoras:
Si un nodo tiene una función objetivo de valor mayor que el
incumbente. PODAR (ya que lo que se obtenga en esa rama
sólo puede ser peor que esa función objetivo)
Como elegir que nodo ramificar? El que tenga mejor función
objetivo.
En la práctica:
Se abre no sólo de a 2 ramas, sino que de muchas.
Cada nodo se resuelve usando Simplex dual.
Se agregan otros “cortes” válidos
No se resuelve exacto, sino hasta un GAP suficientemente
pequeño
CPLEX # de Iteraciones
de Simplex
Nodes Cuts/
Node Left Objective IInf Best Integer Best Bound ItCnt Gap