Especificación del Algoritmo "Branch and Bound"

Anuncio
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
Descargar