Departamento de Cómputo Científico y Estadística ABR./JUL. 2008 CO5423 Algoritmo B+B Esta es una versión simple basada en PL y para problemas enteros puros, de la forma: max cT x s.a. Ax ≤ b x ≥ 0, xi entera ∀i En la descripción, N es el conjunto de nodos, H es el conjunto de hojas y A es el conjunto de nodos abiertos. Algoritmo Branch and Bound begin Inicialización: T0 := {x | Ax ≤ b, x ≥ 0} , H := A := N := {0}, z := −∞, z := +∞, k := 0. Loop Análisis en el nodo k y actualización de cotas superiores: Calcular e z∗k para el programa lineal en el nodo k (región Tk ). Asignar zk := e z∗k y z := máx{zj | j ∈ H}. k if (zk > z y x tiene todas sus componentes enteras (zk = z∗k )) then Completación satisfactoria: La nueva cota inferior es z := zk Cerrar todos los nodos i con zi ≤ z (A := A − {i | zi ≤ z}). else if (zk ≤ z) then Completación no satisfactoria: Cerrar el nodo k: A := A − {k}. end if if (A = ∅) then (* Prueba de optimalidad *) break (* z = z = z∗ (si este valor es finito tenemos una solución óptima) *) end if Selección de nodo: Tomar el mayor j en A tal que zj = z. if (e z∗j ya se obtuvo) then (* Selección del tipo de análisis a realizar *) Selección de la variable para ramificación: Sea i el mínimo índice tal que xjji nok es entera en xj j0 := |N | , Tj0 := Tj ∩ {x | xi ≤ xji }, zj0 := e z∗j j k j00 := j0 + 1, Tj00 := Tj ∩ {x | xi ≥ xji + 1}, zj00 := e z∗j A := A − {j} + {j0 , j00 }, H := H−{j} + {j0 , j00 }, N := N + {j0 , j00 } k = j0 else k=j end if end Loop end