else if @zk ≤ zA

Anuncio
CO-5423 (V08) 17/05/2008
28
Con estos preliminares estamos listos para enunciar de forma precisa un algoritmo general de B + B
basado en PL para problemas enteros puros de la forma:
máx. cT x
s.a. Ax ≤ b
x ≥ 0, xi entera ∀i
Para mayor claridad en la exposición, supondremos que este problema y su relajación lineal son
acotados.
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 ).
z∗k y z := max{zj | j ∈ H}.
Asignar zk := e
if (zk > z y xk 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
CO-5423 (V08) 17/05/2008
if (A = ∅) then
break
29
(* Prueba de optimalidad *)
(* z = z = z∗ (si este valor es nito tenemos una solución óptima) *)
end if
Selección de nodo:
Tomar el mayor j en A tal que zj = z.
if (ez∗j ya se obtuvo) then
(* Selección del tipo de análisis a realizar *)
Selección de la variable para ramicación:
Sea i el mínimo índice tal que xji no es entera en xj
j k
j0 := |N | ,
Tj0 := Tj ∩ {x | xi ≤ xji },
zj0 := zj
j k
zj00 := zj
j00 := j0 + 1,
Tj00 := Tj ∩ {x | xi ≥ xji + 1},
A := A − {j} + {j0 , j00 },
H := H−{j} + {j0 , j00 },
N := N + {j0 , j00 }
k = j0
else
k=j
end if
end Loop
end
Formas de completar un nodo j.
Un nodo j se cierra cuando zj ≤ z.
Hay dos posibilidades:
1. Se ha obtenido, en el nodo j una nueva y mejor solución entera z = zj = z∗j > −∞ (Completación
satisfactoria
)
CO-5423 (V08) 17/05/2008
2. No sabemos si z∗j = z pero sí que zj ≤ z (Completación
insatisfactoria
30
)
El análisis ulterior del nodo j no produciría soluciones mejores que la actual, como mucho, una
del mismo valor. Pero no buscamos soluciones óptimas alternativas.
En el ejemplo, los nodos 3 y 5 se cerraron por 1. mientras que los nodos 2 y 6 se cerraron por 2.
Observaciones:
La parte computacionalmente más cara del algoritmo es el análisis del nodo, donde debe aplicarse un algoritmo de programación lineal (Simplex).
La estrategia de selección de nodo se llama de
mejor nodo abierto
(best open node BON).
Notar que al ramicar, se analiza primero el nodo j0 . Luego, cuando se llega a la selección de
nodo otra vez, por herencia, j00 debe ser el mejor nodo abierto y es seleccionado. Luego se analiza
j00 . En otras palabras, al ramicar, los dos nuevos nodos generados se analizan inmediatamente
antes de analizar cualquier otro nodo.
Las cotas generadas por este algoritmo satisfacen la siguiente propiedad que luego será usada para
garantizar la correctitud.
Teorema
Los valores z y z generados por el algoritmo satisfacen: z ≤ z∗ ≤ z. La sucesión de cotas
superiores generadas es monótona no creciente y la de cotas inferiores es monótona creciente.
Prueba:
Inicialmente z = −∞ y z = +∞, entonces las dos desigualdades se satisfacen.
Cuando se genera una nueva cota superior z en el análisis del nodo, por el lema anterior, es una
cota superior sobre z∗ . Cuando cambia H, al menos un elemento del conjunto {zj | j ∈ H} se
borra y los elementos que se añaden al ramicar tienen valores iguales al borrado. Es decir, el
máximo sobre este conjunto no puede
. En realidad el máximo sólo puede cambiar en el
crecer
análisis del nodo al decrecer uno de los elementos del conjunto. Tenemos, entonces lo referente
a las cotas superiores.
CO-5423 (V08) 17/05/2008
31
Las cotas z siempre acotan inferiormente a z∗ ya que provienen de la completación satisfactoria
como valores objetivo de soluciones factibles de P. De hecho, cuando se actualizan lo hacen sólo
para
.
crecer
Con esto estamos listos para demostrar la correctitud del algoritmo, esto es,
termina
si el algoritmo
entonces produce el resultado correcto.
La nitud del algoritmo es otra cosa. La terminación es fácil de ver en el caso 0-1 y aún en el caso
de región factible acotada. Basta acotar las posibles ramicaciones para cada variable. Sin embargo
en el caso general no
hay garantía de terminación
y aún habiéndola, como en los casos mencionados,
no hay garantía de viabilidad computacional.
Teorema
Prueba:
Si en el algoritmo A = ∅, entonces z = z = z∗ .
Es sencilla. Según el teorema anterior z ≤ z∗ ≤ z, basta probar que z = z.
Como A = ∅, los nodos de H están todos cerrados. Pero z = max{zj | j ∈ H}. Si z y z no fuesen
iguales (z < z) existiría una hoja k tal que zk > z que entonces debería estar abierta. 
Descargar