Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Backtracking
Backtracking
Backtracking
Caracterizacin de los problemas :
1/ se trata generalmente de problemas de
optimizacin, con o sin restricciones.
2/ la solucin es expresable en forma de
secuencia de decisiones.
3/ existe una funcin denominada factible que
permite averiguar si una secuencia de decisiones, la
solucin en curso actual, viola o no las restricciones.
4/ existe una funcin, denominada solucin, que
permite determinar si una secuencia de decisiones
factible es solucin al problema planteado.
Mtodo de resolucin :
Vuelta Atrs es un esquema que de forma sistemtica y
organizada, genera y recorre un espacio que contiene
todas las posibles secuencias de decisiones.
Este espacio se denomina el espacio de bsqueda del
problema, el espacio de soluciones.
Primera implicacin : Si existe solucin, seguro que la
encuentra.
EL ESPACIO DE BUSQUEDA EB
Dimensiones :
la altura del espacio : hay k decisiones que tomar para
formar una solucin.
la anchura del espacio : cada decisin tiene asociado
un dominio formado por j valores distintos.
Topologa :
Habitualmente el espacio de bsqueda es un rbol,
aunque puede ser un grafo, como en el caso de los
grafos de juego.
Terminologa :
Todos los nodos que forman parte de cualquier
camino que va desde la raz del EB a cualquier nodo
del EB representan una secuencia de decisiones.
Una secuencia de decisiones es factible si no viola las
restricciones.
Una secuencia de decisiones es prolongable si es
posible aadir ms decisiones a la secuencia y
no_prolongable en caso contrario.
Que una secuencia sea no_prolongable equivale a que
el ltimo nodo de la secuencia es una hoja del EB.
Para muchos problemas se tiene que una solucin es
cualquier secuencia de decisiones factible y
no_prolongable slo cuando se est en una hoja se
tiene una solucin.
2
Coste :
El espacio de bsqueda de la figura tiene
jk hojas y
su nmero de nodos es
k
n_nodos = ji O(jk)
i=0
El tiempo necesario para recorrerlo es del mismo
orden. Segunda implicacin : el coste exponencial en
el caso peor de Vuelta Atrs.
decisin 1
v1
v2
decisin 2 v1 v2 ... vj
.
.
.
altura k
.
.
decisin k v1 v2 ... vj
v3 .........
anchura j
vj
v1 v2 ... vj
.........
v1 v2 ... vj
v1 v2 ... vj
3
Eleccin del EB :
Puede que exista ms de un espacio para el mismo
problema.
Por regla general se elige el ms pequeo o el de
generacin menos costosa, aunque un espacio dado
no tiene porqu satisfacer ambos criterios
simultneamente.
EL ESQUEMA
Vuelta Atrs hace un recorrido en profundidad del
espacio de bsqueda partiendo de la raz.
El recorrido en profundidad regresa sobre sus pasos,
retrocede, cada vez que encuentra un camino que se
ha acabado o por el que no puede continuar.
En un recorrido en profundidad o en un recorrido en
anchura de un espacio de bsqueda se conoce de
antemano el orden en que se van a generar, recorrer,
sus nodos Son recorridos ciegos porque fijado un
nodo del espacio se sabe cual es el siguiente que se
va a generar.
Operaciones sobre el EB :
preparar_recorrido,
siguiente_hermano.
existan_hermanos
UNA SOLUCIN
funcin BACK_1SOL ( x es solucin; k es nat )
dev ( b es bool; sol es solucin )
{ Pre : (x [1..k-1] es factible no es solucin)
1 k altura(espacio bsqueda) }
b:= FALSO;
sol:= sol_vacia;
preparar_recorrido_nivel_k;
*[ existan_hermanos_nivel_k b --->
x[k] := sig_hermano_nivel_k;
/* anlisis de la nueva decisin x[k] */
[ factible(x,k) --->
[ solucion(x,k) --- >
tratar_solucin(x);
sol := x;
/* solucin encontrada */
b := CIERTO;
[] solucion(x,k) --- >
<sol,b> := BACK_1SOL(x, k+1);
]
[] factible(x,k) ---> seguir
]
]
factible(x,k) --->
[ solucion(x,k) --->
tratar_solucin(x);
s := aadir(s, x)
[] solucion(x,k) --->
s1 := BACK_TODAS(x, k+1);
s:= concat(s1,s )
]
[] factible(x,k) ----> seguir
]
]
{ Post : Dado el prefijo x[1...k-1] se han generado
todas las formas posibles de rellenar x desde k hasta
longitud(solucin) y s contiene todas las soluciones
que se han encontrado.
LA MEJOR SOLUCION
Para un problema de MAXIMIZACION.
Despus de recorrer todo el espacio de bsqueda,
devuelve la mejor solucin encontrada en xmejor. El
valor de la solucin ptima se devuelve en vmejor.
factible(x,k) --->
[ solucion(x,k) --->
tratar_solucin(x) ;
<sol,val> := < x, valor(x) >
[] solucion (x,k) --->
<sol,val>:=BACK_MEJOR(x, k+1)
]
10
11
MAX
x(i) .v(i),
i=1
sujeto a
n
( x(i).p(i) ) PMAX ( i : 1i n : x(i) {0,1} )
i=1
*********************************************
Alternativa A : Espacio de bsqueda binario y
solucin factible no_prolongable
*********************************************
tipo solucin es vector [1..n de {0,1};
var x : solucin ;
i : 1in :
(x[i=0 indica que el objeto i NO est en la mochila),
(x[i=1 indica que el objeto i SI est en la mochila )
Solucin de tamao fijo, exactamente contiene n
decisiones, una para cada objeto. El espacio de
bsqueda asociado es un rbol binario de altura n y que
ocupa un espacio de O(2n).
12
anchura 2
objeto 1
objeto 2 0
.
.
objeto n 0 1
1
1
1
.
.
...............
0 1 0 1 altura n
13
[]k<n --->
/* no es una hoja, es prolongable */
<sol,val> := MOCHILA-BINARIO( x, k+1);
]
[ vmejor val ---> seguir
[] vmejor < val --->
< xmejor, vmejor > := < sol, val >;
]
[] peso >PMAX ---> seguir;
/* viola las restricciones */
]
]
{ Post : xmejor es la mejor solucin que se ha
encontrado explorando todo el subrbol que cuelga del
nodo x(k-1), estando ya establecido el camino desde la
raz a este nodo, y
n
vmejor = xmejor(i).v(i) }
i=1
dev ( xmejor, vmejor )
ffuncin
La Primera llamada a la funcin ser :
<s,v> := MOCHILA-BINARIO ( sol_vacia, 1)
El coste es O(2n) debido al tamao mximo del espacio
de bsqueda.
14
ob.1
ob.2
ob.4
ob. 3
ob.3
ob.4
ob. 4
ob.4
ob.4
decisin 4 ob.4
Espacio de bsqueda para n=4. El tamao del espacio
sigue siendo del orden de O(2n).
15
Inicialmente x(0)=0.
El algoritmo devuelve en t el nmero de objetos que
forman parte de la solucin. El coste de este algoritmo
es el mismo que el obtenido para la alternativa anterior.
17
18
MARCAJE
Tcnica de marcaje Inmersin de eficiencia.
Idea : Un nodo aprovecha el trabajo que ya se ha hecho
en otros nodos.
Algoritmo : TODAS LAS SOLUCIONES CON
MARCAJE
funcin BACK_TODAS_MARC ( x es solucin;
k es nat; m es marcaje) dev (s es secuencia(solucin))
{ Pre : (x [1..k-1] es factible no es solucin )
1kaltura(espacio bsqueda) m contiene el marcaje
del nodo x[k-1]}
s:= sec_vacia;
preparar_recorrido_nivel_k ;
*[ existan_hermanos_nivel_k --->
x[k] := sig_hermano_nivel_k;
m:= MARCAR ( m, x, k ); [ 1a ]
[ factible(x, k) --->
[ 1b ]
[ solucion (x,k) --->
tratar_solucion(x);
s := aadir(s, x);
19
20
k-1
( vac = x(i).v(i) ) (1 k n)}
i=1
<xmejor,vmejor>:=<sol_vacia, 0>;
x(k):= -1;
/* preparar recorrido de nivel k */
*[ x(k) < 1 ---->
x(k):= x(k) +1 ; /* siguiente hermano nivel k */
pac := pac + x(k) . p(k); /* marcar */
vac := vac + x(k) . v(k);
[ pac PMAX --- >
/* la solucin en curso es factible */
[ k = n --->
/* es una hoja y por tanto solucin */
<sol,val> := < x, vac >
[] k < n --->
/* no es una hoja, hay que seguir */
<sol,val> := MOCHILAB_MARC( x, k+1, pac, vac);
]
[ vmejor val ---> seguir
[] vmejor < val --->
<xmejor, vmejor> := <sol, val>;
]
[] pac >PMAX ---> seguir;
/* viola las restricciones */
]
21
22
24
26
27
29
30
32
k=1
k=2
k=n-1
3
n 2 4
n-1
n
n
n-2
1
n-1
2
33
*********************************************
Alternativa B : Un tour est compuesto por aristas y
una arista dada pueda estar o no en la solucin.
*********************************************
(1,2)
(1,2)
e aristas
(1,3)
(4,5) (4,5)
(1,3)
(4,5) (4,5)
(1,3)
(1,3)
(4,5) (4,5)
34
36
37
14
0
5
7
7
4
7
0
9
17
10
8
7
0
4
20
7
16
2
0
39
sol:= x;
[] k< n-1 --->
<sol,val>:=TSP_PBC(x,k+1,ltour,lhnos,xmejor,vmejor);
]
/* actualizacin de la mejor solucin en curso */
[ vmejor val ---> seguir
[] vmejor > val --->
<xmejor, vmejor> := <sol, val>;
]
[]est+ ltourvmejor --->/*no prometedor*/
]
/* DESMARCAR */
ltour := ltour - C[x(k-1),x(k)];
[] (arista(x(k-1), x(k)) ----> seguir
]
lhnos := aadir ( lhnos, x(k));
]
{ Post : xmejor es la mejor solucin encontrada y
vmejor su valor}
dev ( xmejor, vmejor )
ffuncin
La primera llamada ser :
x(1,2,...,n)=<1,0,0,...,0>;
k=1;
ltour = 0;
lhnos =<2,3,...,n>;
<xini,vini> = VORAZ( G);
<xm,vm> := TSP_PBC( x, k, ltour, lhnos, xini, vini).
41
42
[] (existe_hno_nivel(k)) --->
/* Subir */
k := k-1;
[ k > 0 ---> DESMARCAR;
[] k = 0 ---> seguir;
]
] /* fin de la alternativa existe_hno */
] /* fin del bucle que itera sobre k */
dev ( MSC );
ffuncin
La PBCMSC se oculta tras la funcin prometedor en
el sentido de que slo avanzamos si podemos
mejorar la mejor solucin en curso.
43