Está en la página 1de 29

Programación Lineal Entera

Recuerdo
 Modelo de programación lineal entera

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


(algunos llaman a esto prog. lineal entera mixta)
 Caso particular: variables binarias
Relajación
 Sean dos problemas de optimización

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:
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

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:

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

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

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

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  x 

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

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  x  x  x 

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

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  x  x  x 

8.875 P6 P7 INF 10 P4 P5 INF

y 2 y 

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 =
 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

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

Usar http://vinci.inesc.pt/lp/ u otro solver online.

También podría gustarte