Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Recuerdo
Ø Modelo de programación lineal entera
min cx
Ax b
x2N
Ø ¿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
P1 : min 7x + y
3x + 2y 5
5x + 8y 20
20x + y 80
P2 : min 7x + y P3 : min 7x + y
3x + 2y 5 3x + 2y 5
5x + 8y 20 5x + 8y 20
20x + y 80 20x + y 80
y2 y 3
7.6 P y£ 2 y³ 3
2 P3 5.33
Branch & Bound (del P3)
Ø O bien x≥1 o x≤0
7.6 P y£ 2 y³ 3
2 P3 5.33
x³ 1 x£ 0
10 P4 P5 INF
Branch & Bound (del P2)
Ø O bien x≥1 o x≤0
7.6 P y£ 2 y³ 3
2 P3 5.33
x³ 1 x£ 0 x³ 1 x£ 0
7.6 P y£ 2 y³ 3
2 P3 5.33
x³ 1 x£ 0 x³ 1 x£ 0
y³ 2 y£ 1
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 = {x 2 Pi : xk bx⇤k c}
§ Definir P2i+1 = {x 2 Pi : xk dx⇤k e}
§ 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
Cortes
Ø Dado un problema entero, un corte válido es una
restricción al problema tal que no afecta el conjunto
factible entero (pero sí la relajación lineal)
min 3x1 + 2x2
x1 + x2 1.5 x1 + x2 d1.5e = 2
1
2 x1 + 13 x2 1.1 3x1 + 2x2 b6.6c = 6
x 1 , x2 2 N
§ Cortes de Gomory: para cualquier u > 0
X X
ai xi b =) buai cxi bubc
i2N i2N
CPLEX # de Iteraciones
de Simplex
Nodes Cuts/
Node Left Objective IInf Best Integer Best Bound ItCnt Gap