Upload
andres
View
329
Download
0
Embed Size (px)
Citation preview
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 1/46
Búsqueda con retroceso Pág. 1
Búsqueda con retroceso
Introducción
El problema de las ocho reinas
El problema de la suma desubconjuntos
Coloreado de grafos
Ciclos hamiltonianos
Atravesar un laberinto
El problema de la mochila 0-1
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 2/46
Búsqueda con retroceso Pág. 2
Búsqueda con retroceso:Introducción
Problemas que consideraremos:
² Problemas de Decisión: Búsqueda de lassoluciones que satisfacen ciertasrestricciones.
² Problemas de Optimización: Búsqueda de lamejor solución en base a una función objetivo.
² Cada solución es el resultado de una secuenciade decisiones.
² En algunos problemas de este tipo se conoce uncriterio óptimo de selección en cada decisión:técnica voraz.
² En otros problemas se cumple el principio deoptimalidad de Bellman y se puede aplicar latécnica de la programación dinámica.
² Existen otros problemas en los que no hay másremedio que buscar.
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 3/46
Búsqueda con retroceso Pág. 3
Planteamiento del problema:² Se trata de hallar todas las soluciones que
satisfagan un predicado Sol.
² La solución debe poder expresarse como unatupla (x1,«,xn) donde cada xi pertenece a undominio C i.
² Si |C i|=ti, entonces hay
n-tuplas candidatas para satisfacer Sol.
² Método de fuerza bruta: examinar las t n-tuplasy seleccionar las que satisfacen Sol.
² Búsqueda con retroceso (backtracking, eninglés): formar cada tupla de manera progresiva,elemento a elemento, comprobando para cadaelemento xi añadido a la tupla que (x1,«,xi)puede conducir a una tupla completasatisfactoria.
Búsqueda con retroceso:Introducción
t ! t i
i !1
n
�
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 4/46
Búsqueda con retroceso Pág. 4
² Deben existir unas funciones objetivo parciales opredicados acotadores Completable(x1,«,xi).
Dicen si (x1,«,xi) puede conducir a una solución.
² Diferencia entre fuerza bruta y búsqueda conretroceso:
si se comprueba que (x1,«,xi) no puedeconducir a ninguna solución, se evita formarlas ti+1v���vtn tuplas que comienzan por
(x1,«,xi)
² Para saber si una n-tupla es solución, suele haberdos tipos de restricciones:
explícitas: describen el conjunto C i devalores que puede tomar xi (todas las tuplas
que satisfacen estas restricciones definen unespacio de soluciones posibles);
implícitas: describen las relaciones quedeben cumplirse entre los xi (qué solucionesposibles satisfacen el predicado objetivo Sol).
Búsqueda con retroceso:Introducción
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 5/46
Búsqueda con retroceso Pág. 5
Ejemplo: el problema de las ocho reinas
² El problema consiste en colocar ocho reinas en
un tablero de ajedrez sin que se den jaque (dosreinas se dan jaque si comparten fila, columna odiagonal).
Búsqueda con retroceso:Introducción
1 2 3 4 5 6 7 81
2
3
4
5
67
8
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 6/46
Búsqueda con retroceso Pág. 6
² Formulación 1:
² Formulación 2: Puesto que no puede haber másde una reina por fila, podemos replantear elproblema como:
´colocar una reina en cada fila del tablero deforma que no se den jaqueµ.En este caso, para ver si dos reinas se dan jaquebasta con ver si comparten columna o diagonal.
Por lo tanto, toda solución del problema puederepresentarse con una 8-tupla (x1,«,x8) en la quexi es la columna en la que se coloca la reina que
está en la fila i del tablero. El espacio de soluciones consta de
88 8-tuplas (16.777.216 8-tuplas)
² Formulación 3: Puesto que no puede haber másde una reina por columna, sólo hace falta queconsideremos las 8-tuplas (x1,«,x8) que seanpermutaciones de (1,2,...,8)
El espacio de soluciones consta de8! 8-tuplas (40.320 8-tuplas)
Búsqueda con retroceso:Introducción
64
8
¨
ª©
¸
º¹! 4.426.165.368
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 7/46
Búsqueda con retroceso Pág. 7
Volviendo al planteamiento general:² Para facilitar la búsqueda, se adopta una
organización en árbol del espacio de soluciones.
En el ejemplo, con la 2ª formulación ypara el problema de las cuatro reinas(en un tablero 4v4):
Búsqueda con retroceso:Introducción
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 8/46
Búsqueda con retroceso Pág. 8
Búsqueda con retroceso:Introducción
algoritmo BackTracking(ent k:entero;entsal X:vector[1..n]de valor)
{Pre: X[1..k-1] es completable}
variable v:valor
para todo v en Ci hacerX[k]:=v;si completable(X,k) entonces
si Sol(X,k) entonces
guardar(X,k)fsi;si
k<nentonces
BackTracking(k+1,X)
fsi;fsi
fpara
La llamada inicial es:
...BackTracking(1,X);
...
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 9/46
Búsqueda con retroceso Pág. 9
Nótese que el árbol no se construyeexplícitamente sino implícitamentemediante las llamadas recursivas del
algoritmo de búsqueda.
El algoritmo no hace llamadasrecursivas cuando:
² k = n+1, o cuando
² el nodo generado no es completable (PODA).
Backtracking :búsqueda primero enprofundidad (DFS) en un árbol y con
detección de soluciones parciales nocompletables (poda)
El algoritmo anterior halla todas lassoluciones y además éstas pueden ser
de longitud variable (< n+1).
Búsqueda con retroceso:Introducción
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 10/46
Búsqueda con retroceso Pág. 10
Variantes:² Limitar el número de soluciones a una sola
añadiendo un parámetro booleano de salida queindique si se ha encontrado una solución.
² Forzar a que sólo los nodos hoja puedansignificar solución (realizando la recursión sólo sino se ha encontrado un nodo solución):
² Resolver problemas de optimización: además de
la solución actual en construcción hay queguardar la mejor solución encontrada hasta elmomento.Se mejora la eficiencia de la búsqueda si elpredicado ´completableµ permiten eliminar losnodos de los que se sabe que no pueden llevar auna solución mejor que la ahora disponible
(poda; métodos de ramificación y acotación).
Búsqueda con retroceso:Introducción
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 11/46
Búsqueda con retroceso Pág. 11
Sobre la eficiencia:² Depende de:
el número de nodos del árbol de búsqueda
que se visitan: v(n) el trabajo realizado en cada nodo
(normalmente un polinomio): p(n)² Coste de: Completable y Sol
en general: O( p(n) v(n))
² Mejoras: Si se consigue que los predicados acotadores
reduzcan mucho el número de nodosgenerados (aunque un buen predicadoacotador precisa mucho tiempo deevaluación; compromiso«)
² Si lo reducen a un solo nodo generado
(solución voraz): O( p(n) v n) nodos agenerar en total
² Normalmente:
� O( p(n) v 2n) ó O( p(n) v n!)
Búsqueda con retroceso:Introducción
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 12/46
Búsqueda con retroceso Pág. 12
El problema de la suma desubconjuntos
Problema:² Dados un conjunto W ={w1,«,wn} de n números
positivos y otro número positivo M , se trata deencontrar todos los subconjuntos de W cuyasuma es M .
² Ejemplo: si W ={11,13,24,7} y M =31, entonces lasolución es {11,13,7} y {24,7}.
Primera representación de la solución:² La solución puede representarse simplemente
con los índices de los elementos de W .
² En el ejemplo: (1,2,4) y (3,4).² En general, todas las soluciones son k-tuplas
(x1,x2,«,xk), 0<k<n+1.
² Restricciones sobre las soluciones:
Explícitas:
Implicitas: i
� j j t r y e j e
_ a
i { j x i { x j
w x i i !1
k
§ ! M
x i x i 1, 1e i n
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 13/46
Búsqueda con retroceso Pág. 13
Segunda representación de la solución:
² Cada solución puede representarse con una
n-tupla (x1,x2,«,xn), tal que xi � {0,1}, 1�i�n,
de forma que:
xi = 0 si wi no se elige y
xi = 1 si wi se elige.
² En el ejemplo anterior: (1,1,0,1) y (0,0,1,1).
Conclusión:² Pueden existir varias formas de formular un
problema, con distintas representaciones de lassoluciones (aunque siempre verificando éstas un
conjunto de restricciones explícitas e implícitas).
² En el problema que consideramos, ambasrepresentaciones nos llevan a un espacio deestados que consta de 2n tuplas.
El problema de la suma desubconjuntos
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 14/46
Búsqueda con retroceso Pág. 14
Arbol del espacio de soluciones (n=4)para la primera representación (tuplasde tamaño variable):
² Un arco del nivel i al nivel i+1 representa unvalor para xi.
² El espacio de soluciones está definido por todoslos caminos desde la raíz hasta cualquier hoja delárbol.
El problema de la suma desubconjuntos
16
1312
6 7 8
2
1
x1=1
x2=2
x2=3 x2=4
14 15
109
3 4 5
x1=2 x1=3
x1=4
11
x2=3 x2=4x2=4
x3=3 x3=4 x3=4 x3=4
x4=4
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 15/46
Búsqueda con retroceso Pág. 15
Arbol del espacio de soluciones (n=4)para la segunda representación (tuplasde tamaño fijo):
² Los arcos del nivel i al nivel i+1 están etiquetadoscon el valor de xi (1 ó 0).
² Todos los caminos desde la raíz a una hojadefinen el espacio de soluciones (24 hojas querepresentan las 16 posibles 4-tuplas).
El problema de la suma desubconjuntos
1
x1=1
30 31 28 29 24 25 22 23 16 17 14 15 10 11 8 9
26 27 20 21 12 13 6 7
18 19 4 5
2 3
x1=0
x2=1 x2=0 x2=1 x2=0
x3=1 x3=0 x3=1 x3=0 x3=1 x3=0 x3=1 x3=0
x4=1x4=0
x4=1x4=0
x4=1x4=0
x4=1x4=0
x4=1
x4=0
x4=1
x4=0x4=1
x4=0
x4=1
x4=0
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 16/46
Búsqueda con retroceso Pág. 16
Estudiemos una solución de búsquedacon retroceso basada en la segundarepresentación (tuplas de tamaño fijo).
² El elemento x[i] del vector solución toma el valor1 ó 0 dependiendo de si el número w[i] seincluye o no en la solución.
² Función acotadora (completable):
La tupla (x[1],«x[k]) sólo puede conducir a una
solución si:
Además la tupla (x[1],«x[k]) nopuede conducir a una solución si:
² Es decir, una función acotadora es:
El problema de la suma desubconjuntos
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 17/46
Búsqueda con retroceso Pág. 17
El problema de la suma desubconjuntos
algoritmo sumasub(ent s,k,r:entero;entsal X: vector[1..n]de nat)
{k: siguiente variable a decidirLos w[j] están en orden creciente
s= w[j]*x[j]; r= w[j]
s+w[k]eM; s+ w[i]uM
}
X[k]:=1;
si s+w[k]=M entonces escribir(X[1..k])
sino
si s+w[k]+w[k+1]eM entoncessumasub(s+w[k],k+1,r-w[k],X)
fsi
fsi
si (s+r-w[k] u M) y (s+w[k+1] e M) entonces
X[k]:=0;
sumasub(s,k+1,r-w[k],X)fsi
fin
j 1
¡
-1
§ j
¡
¢
§ i 1
¢
§
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 18/46
Búsqueda con retroceso Pág. 18
La llamada inicial es:
Nótese que el algoritmo evita calcular
cada vez guardando esos valores en s y r.
A esto se le llama MARCAJE.
² Coste:
con marcaje: O(2
n
)
sin marcaje: O(n 2n)
El problema de la suma desubconjuntos
w[i ]x[i ] y w[i ]i=k+1
n
§i =1
k
§
...sumasub(0,1, w[i])
... i =1
n§
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 19/46
Búsqueda con retroceso Pág. 19
El problema de la suma desubconjuntos
15,5,33
12,6,18 13,6,18
0,4,46
0,5,3313,5,3312,5,33
12,4,46
0,3,58
10,5,33
10,4,46
10,3,58
0,2,68
20,6,18
5,5,33
5,4,4617,4,46
5,3,58
15,4,4627,4,46
15,3,58
5,2,68
0,1,73
A
C
B
x[1]=1
x[2]=1
x[3]=1 x[3]=0
x[4]=0
x[5]=1
x[2]=0
x[3]=1 x[3]=0
x[4]=1 x[4]=0
x[5]=1
² Ejemplo: n=6, M =30, W =(5,10,12,13,15,18)
Los rectángulos son s,k,r en cada llamada.
A=(1,1,0,0,1); B=(1,0,1,1); C=(0,0,1,0,0,1).
Se construyen 26 nodos (del total de 27
-1=127)
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 20/46
Búsqueda con retroceso Pág. 20
Coloreado de grafos
Problema de decisión:² Dados un grafo G y un número entero positivo
m, ¿es Gm-coloreable?
² Es decir, ¿se puede pintar con colores los nodosde G de modo que no haya dos vérticesadyacentes con el mismo color y se usen sólo mcolores?
Problema de optimización:
² Dado un grafoG
, ¿cuál es su nú
mero cromático?
² Es decir, ¿cuál es el menor número m de colorescon el que se puede colorear G?
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 21/46
Búsqueda con retroceso Pág. 21
Un subproblema muy famoso:² Dado un mapa, ¿pueden pintarse sus regiones
(autonomías, países, o lo que sea) de tal formaque no haya dos regiones adyacentes de igual
color y no se empleen más de 4 colores?
² Cada región se modela con un nodo y si dosregiones son adyacentes sus correspondientesnodos se conectan con un arco.
² Así se obtiene siempre un grafo ´planoµ (puededibujarse en un plano sin cruzar sus arcos).
² El mapa de la figura requiere 4 colores.
² Desde hace muchos años se sabía que 5 coloreseran suficientes para pintar cualquier mapa, perono se había encontrado ningún mapa querequiriera más de 4.
² Recientemente, después de varios cientos de
años, se ha demostrado que 4 colores siempreson suficientes.
Coloreado de grafos
1
2
3
4 5
5 4
3
1
2
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 22/46
Búsqueda con retroceso Pág. 22
El problema que consideraremos aquí:² Dado un grafo cualquiera, determinar todas las
formas posibles en las que puede pintarseutilizando no más de m colores.
² Representación elegida: matriz de adyacencias.
² Justificación de la elección: sólo necesitaremossaber si un arco existe o no.
² Representación de los colores: enteros de 1 a m.
² Representación de la solución: vector de colores.
² Espacio de estados para n=3 y m=3.
Coloreado de grafos
x[1]=1x[1]=2 x[1]=3
x[2]=1x[2]=2
x[2]=3
x[3]=1
x[3]=2
x[3]=3
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 23/46
Búsqueda con retroceso Pág. 23
algoritmo m_col(ent k:entero;entsal X:vector[1..n]de nat)
{Se usa una variable global g de tipo grafo.}
para v:=1..m hacerX[k]:=v
si completable(X,k) entonces
si k=n entonces escribir(X)sino m_col(k+1,X)fsi
fsi
fpara
fin
funcion Completable(entsal x:sol;ent k:entero)
variables b:booleano; j:entero
b:=verdad; j:=1;
mientras (j<k) � b hacer
si g[k,j] y (x[k]=x[j]) entonces
b:=falsosino j:=j+1
fsi
fmientras
retorna(b)
Coloreado de grafos
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 24/46
Búsqueda con retroceso Pág. 24
Ciclos hamiltonianos
Problema: encontrar todos los cicloshamiltonianos de un grafo.
² Sea G=(V , A) un grafo no dirigido, conexo con n
vértices.² Un ciclo hamiltoniano es un camino que visitauna vez cada vértice y vuelve al vértice inicial.
Es decir, v1v2«vn+1 tal que:
vi�V , i=1,«,n+1,
(vi,vi+1)� A, i=1,«,n,
v1=vn+1, vi{v j, i, j=1,«,n tales que i { j.
No se conoce un algoritmo eficientepara resolver el problema.
Nótese la relación entre el problema delcálculo de un hamiltoniano y elproblema del viajante de comercio
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 25/46
Búsqueda con retroceso Pág. 25
Ejemplos:
Hamiltoniano: 1-2-8-7-6-5-4-3-1
No contiene ningún hamiltoniano.
Ciclos hamiltonianos
8
1 2 3 4
567
5
1 2 3
4
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 26/46
Búsqueda con retroceso Pág. 26
Solución de búsqueda con retroceso:
² En el vector solución (x1,«,xn), xi representa elvértice visitado en i-ésimo lugar en el ciclo.
² Cálculo de los posibles valores para xk si x1,«,xk-
1 ya tienen valores asignados:
k=1: x1 puede ser cualquiera de los nvértices, pero para evitar escribir el mismociclo n veces obligamos que x1=1;
1<k<n: xk puede ser cualquier vérticedistinto de x1,«,xk-1 y conectado por un arcocon xk-1.
k=n: xn sólo puede ser el vértice que quedasin visitar y debe estar conectado por sendosarcos con x1 y xn-1.
Ciclos hamiltonianos
Ciclos hamiltonianos
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 27/46
Búsqueda con retroceso Pág. 27
² Grafo: matriz de adyacencias (sólo necesitaremossaber si un arco existe o no)
² solución: vector de vértices.
Ciclos hamiltonianos
algoritmo hamiltoniano(ent k:entero;
entsal X:vector[1..n] de nat){Se usa una variable global g de tipo grafo.}
para v:=1..n hacer
X[k]:=v;si completable(k,X) entonces
si k=n entoncesescribir(X)
sino hamiltoniano(k+1,X)fsi
fsi
fpara
funcion completable(ent k:entero;
ent X:vector[1..n] de nat)b:=g[X[k-1],X[k]];
para i:=1..k-1 mientras b hacer
si X[i]=X[k] entonces b:=falso fsi
fpara
si k=n � �g[X[n],X[1]] entonces
b:=falsofsi
retorna b
x[1]:=1;
hamiltoniano(2,x);
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 28/46
Búsqueda con retroceso Pág. 28
Atravesar un laberinto
Problema:² Nos encontramos en una entrada de un laberinto
y debemos intentar atravesarlo.
² Representación: matriz de dimensión nvn decasillas marcadas como libre u ocupada por unapared.
² Es posible pasar de una casilla a otra moviéndose
sólamente en vertical u horizontal.² Se debe ir de la casilla (1,1) a la casilla (n,n).
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 29/46
Búsqueda con retroceso Pág. 29
² Diseñaremos un algoritmode búsqueda con retrocesode forma que se marcaráen la misma matriz dellaberinto un caminosolución (si existe).
² Si por un camino recorridose llega a una casilla desdela que es imposibleencontrar una solución,hay que volver atrás ybuscar otro camino.
² Además hay que marcar las casillas por dondeya se ha pasado para evitar meterse varias vecesen el mismo callejón sin salida, dar vueltasalrededor de columnas«
Atravesar un laberinto
N M N
N
N
N
N
N N
N N
N
N
N
NN
N
N N N
M
M
M
M M
M MM
M M
M
MM
M
M
M M
N M N
NM
< <<
<
< <
<
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 30/46
Búsqueda con retroceso Pág. 30
Estructura de datos:
Solución de búsqueda con retroceso:
Atravesar un laberinto
tipos
casilla = (libre,pared,camino,imposible)
laberinto = vector[1..n,1..n] de casilla
funcion HayCamino(ent x,y:entero;entsal lab:laberinto)
{Pre: Hemos encontrado un camino desde (1,1)hasta (x,y).Post: Devuelve cierto ssi se puede extenderhasta (n,n)}
...HayCamino(1,1,lab)
...
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 31/46
Búsqueda con retroceso Pág. 31
Atravesar un laberinto
funcion HayCamino(ent x,y:entero;
entsal lab:laberinto)
{devuelve cierto ssi existe camino}
si (x<1)�(x>n)�(y<1)�(y>n)�lab[x,y]{libre entonces
devuelve falsosino
lab[x,y]:=camino;
si (x=n)�(y=n) entonces
escribir(lab);devuelve cierto;
sino
b:= HayCamino(x+1,y,lab) �HayCamino(x,y+1,lab) �HayCamino(x-1,y,lab) �HayCamino(x,y-1,lab);
si �b entonces
lab[x,y]:= imposible;
fsi
devuelve b;fsi
fsi
fin
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 32/46
Búsqueda con retroceso Pág. 32
El problema de la mochila 0-1
Recordar«² Se tienen n objetos y una mochila.
² El objeto i tiene peso pi y la inclusión del objeto ien la mochila produce un beneficio bi.
² El objetivo es llenar la mochila, de capacidad C ,de manera que se maximice el beneficio.
Es el primer problema de optimizaciónque vamos a resolver con Backtracking.
maximizar bixi1ei en
§
sujeto a pi x i 1ei en
§ eC
con x i �{0,1}, bi " 0, pi " 0, 1e i e n
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 33/46
Búsqueda con retroceso Pág. 33
² Tuplas de tamaño fijo:
xi=0 si el objeto i-ésimo no se introduce
xi=1 si el objeto se introduce
El problema de la mochila 0-1
1
x1=0
5 6 8 9 12 13 15 16 20 21 23 24 27 28 30 31
4 7 11 14 19 22 26 29
3 10 18 25
2 17
x1=1
x2=0 x2=1 x2=0 x2=1
x3=0 x3=1 x3=0 x3=1 x3=0 x3=1 x3=0 x3=1
x4=0x4=1
x4=0x4=1
x4=0x4=1
x4=0x4=1
x4=0
x4=1
x4=0
x4=1x4=0
x4=1
x4=0
x4=1
Elegimos ésta última representación.
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 34/46
Búsqueda con retroceso Pág. 34
Problema de optimización(maximización): Solo nos interesa lamejor solución
En todo momento guardamos el costede la mejor solución encontrada hastael momento MS (que es una cotainferior de la mejor solución)
Sólo buscaremos donde podamos
mejorar respecto a la mejor solución(poda basada en la mejor solución,PBMS)
El problema de la mochila 0-1
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 35/46
Búsqueda con retroceso Pág. 35
Formalmente:² Sea X[1..k-1] la asignación en curso.
² Sea ben el beneficio de la mejor solución quehemos encontrado en lo que llevamos debúsqueda (si aun no hemos encontrado ningunaben=0)
² c(X ,k) es el beneficio de la ´mejorµ solución que sepuede obtener extendiendo X [1..k-1]
² cota(X ,k) es una cota superior de c(X ,k).
Es decir, cota(X ,k) u c(X ,k), para todo X [1..k-1]
² Si cota(X ,k) e ben, entonces hacemos backtracking(podamos)
² ¿cómo calcular cota(X ,k) en el problema de lamochila?
relajar el requisito de integridad en lasdecisiones que aún no hemos hecho:xi�{0,1}, kei en se sustituye por 0exie1, keien
aplicar el algoritmo voraz
El problema de la mochila 0-1
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 36/46
Búsqueda con retroceso Pág. 36
El problema de la mochila 0-1
función cota(benef,peso:vectReal;
cap,ben:real; k:entero)devuelve real
{cap=capacidad aún libre de la mochila;ben=beneficio actual;
k=índice del primer objeto a considerar}
principio
si k>n or cap=0.0entonces devuelve bensino
si peso[k]>cap entonces
dev ben+cap/peso[k]*benef[k]sino
dev cota(benef,peso,cap-peso[k],ben+benef[k],k+1)fsi
fsi
fin
tipo vectReal=vector[1..n] de real
{Pre: i�1..n:peso[i]>0, benef[i]>0,i�1..n-1:benef[i]/peso[i]ubenef[i+1]/peso[i+1]}
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 37/46
Búsqueda con retroceso Pág. 37
El problema de la mochila 0-1
tipo solución=vector[1..n] de 0..1
{variables globales:benef,peso:vectReal; cap:real}
algoritmo búsqueda(ent solAct:solución;
ent benAct,pesAct:real;ent k:entero;e/s sol:solución;
e/s ben:real) para v:=1 hasta 0 hacer
solAct[k]:=v;benAct:=benAct+v*benef[k];
pesAct:=pesAct+v*peso[k];si pesActecap � ben<cota(benef,peso,
cap-pesAct,benAct,k+1) entonces
si k=n entonces
si benAct>ben entonces
sol:=solAct; ben:=benAct
fsi
sino búsqueda(solAct,benAct,pesAct,k+1,sol,ben)
fsi
fsi
fpara
fin
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 38/46
Búsqueda con retroceso Pág. 38
Mejora adicional:² encontrar una solucion factible (no
necesariamente óptima) con un algoritmo voraz.Sea r su coste.
²O
bviamente r es una cota inferior de la solucióndel problema.
² Por lo tanto, podemos inicializar ben:=r
ejercicio: Pensar un algoritmo vorazque encuentre una solución factible.
algoritmo mochila01(ent benef,peso:vectReal;ent cap:real;
sal sol:solución;sal ben:real)
variables obj:entero; solAct:solución principio
ben:=0.0;búsqueda(solAct,0.0,0.0,1,sol,ben)
fin
El problema de la mochila 0-1
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 39/46
Búsqueda con retroceso Pág. 39
Ejemplo:² benef=(11,21,31,33,43,53,55,65)
² peso=(1,11,21,23,33,43,45,55)
² cap=110² n=8
El problema de la mochila 0-1
89139
99149
101151
109159
66
106
5696
3363
68
108
3565
1232
111
164.88
155.11
157.44
159.76
154.88160.22
157.55
157.11162.44
164.66
163.81
139149 151 159
161.63
160.18
158
159.79 159.33
157.63
1 0
1
1
1
0
0
0
1 0
0
0
0
1 0
1 0
1 001
1 0
00
0
0
0
1620
0 1
0
ben=159sol=(1,1,1,0,1,1,0,0)
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 40/46
Búsqueda con retroceso Pág. 40
² De los 29-1 nodos del espacio de estados, sólo segeneraron 33.
² Se podía haber reducido a 26 simplemente
sustituyendo la condición
ben < cota(...)
en el algoritmo ´búsquedaµ por:
ben < cota(...)½
El problema de la mochila 0-1
Backtracking genérico para
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 41/46
Búsqueda con retroceso Pág. 41
ahora para problemas de minimización² X [1..k]: asignación actual (solución que estamos
tratando de construir)
² Mejor Sol: Mejor solución encontrada hasta el
momento (se inicializa a Null)² M S: Coste de la mejor solución encontrada hasta
el momento (es una cota superior de la soluciónóptima). Se inicializa a infinito.
² c·(X ,k): devuelve una cota inferior del mejor costeque se puede obtener a partir de la asignaciónactual
² Si c·(X ,k) u M S, entonces no sirve de nada seguircon la asignación actual (podamos, es decir,hacemos backtracking)
² Es decir, sólo hacemos llamada recursiva si:completable(X ,k) y c·(X ,k)< M S
Backtracking genérico para problemas de optimización
Backtracking genérico para
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 42/46
Búsqueda con retroceso Pág. 42
Backtracking genérico para problemas de optimización
algoritmo BackTracking(ent k:entero;entsal X:vector[1..n]de valor)
{Pre: X[1..k-1] es completable,
c¶(X,k-1)<MS}
para todo v en Ci hacer
X[k]:=v;
si (completable(X,k) �
c¶(X,k)<MS) entonces
si Sol(X,k) entonces
MejorSol:= X;MS:= Coste(X)
fsi;si k<n entonces
BackTracking(k+1,X)fsi;
fsi
fpara
Mejoras al esquema de
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 43/46
Búsqueda con retroceso Pág. 43
Arboles dinámicos:² Hasta ahora hemos considerado árboles de búsqueda
estáticos:
siguiendo cualquier rama nos encontrábamos lasvariables en el mismo orden.
recorriendo un nivel de izquierda a derecha nosencontrábamos los valores en el mismo orden
² Arboles dinámicos: ordenes variables
Anticipación (look ahead):² Cada variable xi guarda la lista de los valores de su
dominio C i² Cada vez que se asigna un valor a una variable, se
eliminan de todas las variables no asignadas los valoresincompatibles con la asignación
² Si a alguna variable no le quedan valores posibles,BACKTRACKING
Eliminación de simetrías:² En muchos problemas reales existen simetrías que
hacen que varias soluciones sean esencialmente lamisma (via rotaciones, proyecciones,...)
² Encontrar la misma solución varias veces es ineficiente
² Solución: añadir nuevas restricciones que prohiban
soluciones repetidas
Mejoras al esquema deBacktracking
Mejoras al esquema de
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 44/46
Búsqueda con retroceso Pág. 44
Vamos a desarrollar un backtracking para las n-reinas que introduzca estas mejoras:
² X: vector[1..n] de nat
x[i]=0, la columna i, aun no tiene reina asignada
x[i]= j (j<>0), la reina de la columna i esta situadaen la fila j
² tipo dominios es vector[1..n] de lista de nat
Si L es una variable de tipo dominios,
L[i] es la lista de los valores posibles para lavariable x[i]
Inicialmente:
L[i]={1,2,...,n} para i=2..n
L[1]={1,2,...,«n/2»} (para eliminar simetrías)
Mejoras al esquema deBacktracking
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 45/46
Búsqueda con retroceso Pág. 45
algoritmo n-reinas(ent k:entero;
ent L:dominios;
entsal X:vector[1..n]de nat){k: numero de variables asignadas,X: asignación actual
L: valores compatibles con laasignación actual}
L2:=Li:=Seleccionar_Variable(X,L); {selección
arbitraria}
para v � L[i] hacer {orden arbitrario}
X[i]:=v;si anticipación(X,i,v,L2) entonces
si k=n entonces escribir(X)sino n-reinas(k+1,L2,X)fsi
fsi
L2:=L;
fpara
X[i]:=0;
fin
N - reinas
N i
5/7/2018 back-tracking-1193073889558994-4 - slidepdf.com
http://slidepdf.com/reader/full/back-tracking-1193073889558994-4 46/46
Búsqueda con retroceso Pág. 46
Para n-reinas:² seleccionar la variable a la que le queden menos
valores
² asignar los valores en orden aleatorio
funcion anticipacion(ent X:sol;
ent i,v:entero; entsal L2:dominios)variables b:booleano; j:enterob:=cierto; j:=1;
mientras (j<n+1) � b hacer
si X[j]=0 entonces
para u�L[j] hacer
si u=v � |i-j|=|u-v| entoncesborrar(L[j],v)
fpara
b:=falso
sino j:=j+1
fsifmientras
retorna(b)
N - reinas