Está en la página 1de 29

Branch and Bound

Unidad 1 Dr. Cristian Oliva San Martn coliva@ucsc.cl


Departamento de Ingeniera Civil Industrial

Investigacin de Operaciones II

Temario

Dividir para Conquistar

Temario

Dividir para Conquistar

Enumeracin Implcita

Dividir para Conquistar

Considere el problema z = max {cx : x S }.

Cmo podemos dividir el problema en una serie de problemas ms pequeos, ms fciles de resolver y que uniendo la informacin podamos resolver el problema original?

Proposicin: Sea S = S1 S2 . . . SK una descomposicin de S en conjuntos ms pequeos. Sea z k = max {cx : x Sk } para k = 1, . . . , K . Entonces z = maxk =1,...,K {z k }.

Enumeracin Implcita

Cmo podemos usar las cotas sobre los valores de {z k } inteligentemente?

Proposicin: Sea S = S1 S2 . . . SK una descomposicin de S en conjunto ms pequeos. Sean z k = max {cx : x Sk } para k una cota superior de z k y z k una cota k = 1, . . . , K .. Sea z = maxk {z k } es una cota superior para z inferior de z k . Entonces z k y z = maxk {z } es una cota inferior para z . Ejemplo: En la gura 1 se muestra una descomposicin de S en dos conjuntos S1 y S2 . Adems se ilustran las cotas superiores e inferiores de los problemas correspondientes.
27 S 13 25 S 20

20 S1 20

25 S2 15 S1

25 S2 15

Ejemplo 2

En la gura 2, S se descompone en dos conjuntos S1 y S2 e ilustra las cotas inferiores y superiores de los problemas correspondientes.
27 S S 13 21 20 S1 18 26 26 S2 S1 21 21 S2 26

Figura: Podado por Cota 2

Ejemplo 3

En la gura 3, S se descompone en dos conjuntos S1 y S2 e ilustra las cotas inferiores y superiores de los problemas correspondientes.
40 S S 13 24 S1 13 13 37 24 S2 S1 S2 37 37

Figura: Imposible podar 3

Tres razones que nos permiten podar el rbol

Podar por optimalidad: z t = {max cx : x St } ha sido resuelto.

Tres razones que nos permiten podar el rbol

Podar por optimalidad: z t = {max cx : x St } ha sido resuelto. t z . Podar por cota: z

Tres razones que nos permiten podar el rbol

Podar por optimalidad: z t = {max cx : x St } ha sido resuelto. t z . Podar por cota: z Podar por infactibilidad: St = .

Branch and Bound: Un ejemplo

z = max

4x1 x2 x2
2 x Z+ 0

s .a 7x1 2x2 14 3 2x1 2x2 3

Obtencin de cotas
Para obtener una primera cota superior, se agregan las variables de holgura x3 , x4 , x5 y se resuelve la relajacin de programacin lineal, en la cual las restricciones de integralidad son eliminadas. La representacin ptima resultante es: = max z
59 7 1 4 7 x3 7 x4 1 +7 x3 + 2 7 x4

x1 x2

+ x4 2 7 x3 +
10 7 x4

+ x5

20 7 =3 23 = 7 =

x1 , x2 , x3 , x4 , x5 0 = 59 Se obtiene una cota superior z 7 y una solucin no-entera 20 (x , x ) = ( , 3 ) . Existe alguna forma directa de encontrar una 1 2 7 cota inferior? Aparentemente podemos suponer que la mejor solucin encontrada es (0, 0) con valor objetivo z = 0.

Branch and Bound hasta aqu

59 7
S 0

Ramicando
, se necesita ramicar o dividir. Cmo deberamos Dado que z < z dividir la regin factible? Una idea es seleccionar una variable que requiere ser entera pero que en la solucin de programacin lineal es fraccionaria. Luego, podemos dividir el problema de la siguiente forma:
S1 = S {x : xj x j } S2 = S {x : xj x j } Siguiendo nuestro ejemplo, dado que x 1 = S1 = S {x : x1
20 7 ,

tomamos:

20 } 7 20 S2 = S {x : x1 } 7 59
7
S 0

x1 2
S1

x1 3
S2

Seleccionando un problema (nodo)

La lista de problemas activos (nodos) que tienen que ser examinados contiene ahora S1 y S2 . Arbitrariamente seleccionamos S1 .

Reoptimizando

Cmo deberamos resolver los programas lineales modicados sin tener que resolverlos nuevamente desde el inicio? Dado que slo hemos aadido una restriccin al programa lineal, la base ptima actual sigue siendo factible dual, y es por esta razn que se reoptimiza desde esta base utilizando el algoritmo simplex dual. Aplicando esta idea a la relajacin de programacin lineal de S1 y reescribiendo x1 2 como x1 + x6 = 2, x6 0 se tiene: z 1 = max
15 2 1 2 x5 3x6

x1 x2 x3 1 2 x5

+ x6 + x6 x5 5x6 x4 + 1 2 x5 + 6x6 x1 , x2 , x3 , x4 , x5 , x6 0

=2 1 = 2 =1 5 = 2

con z 1 =

15 2 ,

1 y (x 1, x 2 ) = (2, 2 ).

Branch and Bound hasta aqu

59 7
S 0

x1 2
15 2
S1 0

x1 3
S2

Ramicando
S1 no puede ser podado, as usando la misma regla de ramicacin 1 anterior creamos dos nodos S3 y S4 . Dado que x 2 = 2 , tomamos:
1 } 2 1 S2 = S {x : x2 } 2 S1 = S {x : x2
59 7
S 0

x1 2
15 2
S1 0

x1 3
S2

x2 = 0
S3

x2 1
S4

Seleccionando un problema (nodo)

La lista de problemas activos (nodos) que tienen que ser examinados contiene ahora S2 ,S3 y S4 . Arbitrariamente seleccionamos S2 .

Reoptimizando

Aplicando el algoritmo simplex dual a la relajacin de programacin lineal de S2 y reescribiendo x1 3 como x1 x7 = 3, x7 0 se tiene: = max z
59 7 1 4 7 x3 7 x4 2 +1 7 x3 + 7 x4

x1 x2

+ x4 2 7 x3 +
1 7 x3 10 7 x4

+ x5

2 +7 x4 + x7

20 7 =3 23 = 7 1 = 7 =

x1 , x2 , x3 , x4 , x5 , x7 0 es infactible y por ello S2 se poda por infactibilidad.

Branch and Bound hasta aqu

59 7
S 0

x1 2
15 2
S1 0

x1 3
S2

x2 = 0
S3

x2 1
S4

Seleccionando un problema (nodo)

La lista de problemas activos (nodos) que tienen que ser examinados contiene ahora S3 y S4 . Arbitrariamente seleccionamos S4 .

Reoptimizando

Aplicando el algoritmo simplex dual a la relajacin de programacin lineal de S4 = S {x : x1 2, x2 1 la solucin ptima es: (x 1, x 2 ) = (2, 1) con valor 7. Como esta solucin es entera, z 4 = z4 = z4 = 7. El nodo se poda por optimalidad.
59 7
S 0

x1 2
15 2
S1 0

x1 3
S2

x2 = 0
S3

x2 1
7 S4

Actualizacin del Branch and Bound

Como la solucin es entera, actualizamos el valor de la mejor solucin factible encontrada hasta aqu: z max {0, 7}, almacenar la solucin correspondiente (2,1).59
7
S 7

x1 2
15 2
S1 7

x1 3
S2

x2 = 0
S3

x2 1
7 S4 7

Seleccionando un problema (nodo)

La lista de problemas activos (nodos) que tienen que ser examinados contiene ahora slo S3 . Seleccionamos S3 .

Reoptimizando

Aplicando el algoritmo simplex dual a la relajacin de programacin lineal de S3 = S {x : x1 2, x2 = 0 la solucin 3 ptima es: (x 1, x 2 ) = ( 2 , 0) con valor 6.
59 7
S 7

x1 2
15 2
S1 7

x1 3
S2

x2 = 0
6 S3

x2 1
7 S4 7

Actualizacin del Branch and Bound


Como z = 7 > z 3 = 6, S3 se poda (muere) por cota.
59 7
S 7

x1 2
15 2
S1 7

x1 3
S2

x2 = 0
6 S3

x2 1
7 S4 7

Seleccionando un problema (nodo) y Conclusiones

La lista de problemas activos (nodos) que tienen que ser examinados esta vaca. Por ello, la solucin ptima es (x1 , X2 ) = (2, 1) con z = 7. Observe que tambin se hubiera podido utilizar un preprocesamiento de la cota superior observando que el valor de la funcin objetivo debe ser entero dado que los coecientes son enteros y las variables enteras. Con ello, no hubiera sido necesario explorar el nodo S3 .

Branch and Bound basado en programacin lineal


En la gura se presenta un ujograma de un algoritmo simple del tipo branch and bound.
Inicializacin Problema inicial S con Formulacin P en la lista z = Lista vaca? no ? Seleccione Problema Si con formulacin P i Resuelva relajacin PL de P i Cota dual z i = valor PL x i (PL)=solucin PL SI

-PARE. OPTIMO x

? ?

si  si  si 

Si P i vaco, pode por infactibilidad no

? ? ?

Si z i z , pode por cota no Si x (PL) entero, actualice cota primal z = z i i Actualice x = x (PL) pode por optimalidad no i i generar dos subproblemas S1 y S2 i i con formulaciones P1 y P2

También podría gustarte