Está en la página 1de 30

Programación Lineal Entera

Recuerdo
Ø Modelo de programación lineal entera
min cx
Ax  b
x2N

§ Pueden ser todas las variables enteras, o sólo algunas de ellas


(algunos llaman a esto prog. lineal entera mixta)
§ Caso particular: variables binarias x 2 {0, 1}n
Relajación
Ø Sean dos problemas de optimización

P1 : min f (x) P2 : min f (x)


x2⌦ x2⇤
decimos que P2 es una relajación de P1 si ⌦✓⇤
Ø Si P2 es una relajación de P1, entonces
§ Si el óptimo de P2 pertenece a P1, entonces es óptimo de P1.
§ Si P2 es infactible entonces P1 tambiénes infactible
§ El valor objetivo óptimo de P2, es menor que P1
z P 2  zP 1
Programación Lineal Entera
Ø ¿Por qué es complicado resolver un problema lineal
entero?
§ El dominio no es convexo!

Ø Idea para resolverlo: Usar una relajación del problema


min cx
Ax  b
x2N
Hablaremos de “la” relajación lineal del problema
Relajación Lineal
Ø Primera idea:
§ Resolver la relajación lineal
del problema.
§ “Aproximar” la solución
por el entero más cercano.
• Por ejemplo, “redondeando”
la solución.
xLP=(0.6, 2.1) xIP=(1,2)
Problema
Ø Un problema entero y su relajación lineal pueden ser muy
distintos.

xLP=(3.8, 7.2) xIP=(4,0)


Redondeo
Ø Supongamos que resolvemos la relajación lineal de un
problema entero: min 7x + y
3x + 2y  5
xLP = (0,2.5) 5x + 8y 20
zLP = 2.5 20x + y  80
Ø ¿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

P1 : min 7x + y
3x + 2y  5
5x + 8y 20
20x + y  80

xLP = (0,2.5), z=2.5


Árbol de B&B
Incumbente = ¥
P1 2.5
Branch & Bound
Ø 2 casos: o bien y≤2 o y≥3

xLP = (0.8,2), z=7.6 xLP = (0.33,3), z=5.33


Branch & Bound
Ø 2 casos: o bien y≤2 o y≥3

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
y2 y 3

xLP = (0.8,2), z=7.6 xLP = (0.33,3), z=5.33


Branch & Bound
Ø Gráficamente
Árbol de B&B
Incumbente = ¥
P1 2.5

7.6 P y£ 2 y³ 3
2 P3 5.33
Branch & Bound (del P3)
Ø O bien x≥1 o x≤0

xLP = (1,3), z=10 Infactible


ENTERO!
Branch & Bound (del P3)
Ø O bien x≥1 o x≤0
P4 : min 7x + y P5 : min 7x + y
3x + 2y  5 3x + 2y  5
5x + 8y 20 5x + 8y 20
20x + y  80 20x + y  80
y 3 y 3
x 1 x0

xLP = (1,3), z=10 Infactible


ENTERO!
Árbol de B&B
Incumbente = 10
P1 2.5

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

xLP = (1,1.875), z=8.875 Infactible


Branch & Bound (del P2)
Ø O bien x≥1 o x≤0
P6 : min 7x + y P7 : min 7x + y
3x + 2y  5 3x + 2y  5
5x + 8y 20 5x + 8y 20
20x + y  80 20x + y  80
y2 y2
x 1 x0
xLP = (1,1.875), z=8.875 Infactible
Árbol de B&B
Incumbente = 10
P1 2.5

7.6 P y£ 2 y³ 3
2 P3 5.33
x³ 1 x£ 0 x³ 1 x£ 0

8.875 P6 P7 INF 10 P4 P5 INF


Branch & Bound (del P6)
Ø O bien y≥2 o y≤1

xLP = (1,2), z=9 xLP = (2.4,1), z=17.8


Branch & Bound (del P6)
Ø O bien y≥2 o y≤1
P8 : min 7x + y P9 : min 7x + y
3x + 2y  5 3x + 2y  5
5x + 8y 20 5x + 8y 20
20x + y  80 20x + y  80
y2 y2
x 1 x 1
y 2 y1
xLP = (1,2), z=9 xLP = (2.4,1), z=17.8
Árbol de B&B
Incumbente = 9
P1 2.5

7.6 P y£ 2 y³ 3
2 P3 5.33
x³ 1 x£ 0 x³ 1 x£ 0

8.875 P6 P7 INF 10 P4 P5 INF

y³ 2 y£ 1

9 P8 P9 17.8

Óptimo: x* = (1,2), z*=9


Branch & Bound
Ø Lo que hicimos: particionar el espacio factible en
subproblemas.

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

0 0 52.0000 408 52.0000 408


0 0 52.0000 718 Cuts: 266 1189
0 0 52.0000 248 Cuts: 262 1505
0 0 52.1083 309 Cuts: 194 1758
0 0 52.1124 283 Cuts: 104 1850
0 0 52.1327 251 Cuts: 75 1914
0 0 52.1327 223 Cuts: 33 1945
0 0 52.1327 212 Cuts: 17 1960
0 0 52.1327 208 Cuts: 3 1963
* 0+ 0 178.0000 52.1327 1963 70.71%
0 2 52.1327 161 178.0000 52.1327 1963 70.71%
Elapsed real time = 0.72 sec. (tree size = 0.01 MB, solutions = 1)
* 8+ 8 63.0000 52.2000 2504 17.14%
* 304+ 207 62.0000 52.2000 4524 15.81%
* 416+ 319 61.0000 52.2000 4847 14.43%
* 492+ 379 55.0000 52.2000 5000 5.09%
* 578+ 164 54.0000 52.2000 5163 3.33%
658 20 53.0000 45 54.0000 52.2000 5242 3.33%
* 666+ 14 53.0000 52.2000 5248 1.51%
Mejor cota GAP
Nodos visitados Solución Solución
inferior
y por explorar Nodo actual Incumbente
(relajación)
Otro ejemplo
Ø Resolver usando B&B el siguiente problema
max 2x1 + x2 + 2x3
x1 + 2x2 + x3  3
2x1 + 2x2 + 2x3  3
x1 + 2x2 + 2x3  4
x1 , x2 , x3 2 {0, 1}
Usar http://vinci.inesc.pt/lp/ u otro solver online.

También podría gustarte