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 de subconjuntos Coloreado de grafos Ciclos hamiltonianos Atravesar un laberinto El problema de la mochila 0-1

back-tracking-1193073889558994-4

  • Upload
    andres

  • View
    329

  • Download
    0

Embed Size (px)

Citation preview

Page 1: back-tracking-1193073889558994-4

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

Page 2: back-tracking-1193073889558994-4

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.

Page 3: back-tracking-1193073889558994-4

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

 

Page 4: back-tracking-1193073889558994-4

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

 

Page 5: back-tracking-1193073889558994-4

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

 

Page 6: back-tracking-1193073889558994-4

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

 

Page 7: back-tracking-1193073889558994-4

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

 

Page 8: back-tracking-1193073889558994-4

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);

...

 

Page 9: back-tracking-1193073889558994-4

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

 

Page 10: back-tracking-1193073889558994-4

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

 

Page 11: back-tracking-1193073889558994-4

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

 

Page 12: back-tracking-1193073889558994-4

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

§ ! M 

 x i  x i 1, 1e i  n

 

Page 13: back-tracking-1193073889558994-4

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

 

Page 14: back-tracking-1193073889558994-4

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

  

Page 15: back-tracking-1193073889558994-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

 

Page 16: back-tracking-1193073889558994-4

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

 

Page 17: back-tracking-1193073889558994-4

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

 ¢

§

 

Page 18: back-tracking-1193073889558994-4

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

 

Page 19: back-tracking-1193073889558994-4

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)

 

Page 20: back-tracking-1193073889558994-4

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?

 

Page 21: back-tracking-1193073889558994-4

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

 

Page 22: back-tracking-1193073889558994-4

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

 

Page 23: back-tracking-1193073889558994-4

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

 

Page 24: back-tracking-1193073889558994-4

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

 

Page 25: back-tracking-1193073889558994-4

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

 

Page 26: back-tracking-1193073889558994-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

Page 27: back-tracking-1193073889558994-4

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);

 

Page 28: back-tracking-1193073889558994-4

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).

 

Page 29: back-tracking-1193073889558994-4

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

< <<

<

< <

<

  

Page 30: back-tracking-1193073889558994-4

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)

...

 

Page 31: back-tracking-1193073889558994-4

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

 

Page 32: back-tracking-1193073889558994-4

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

  

Page 33: back-tracking-1193073889558994-4

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.

 

Page 34: back-tracking-1193073889558994-4

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

 

Page 35: back-tracking-1193073889558994-4

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

 

Page 36: back-tracking-1193073889558994-4

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]}

 

Page 37: back-tracking-1193073889558994-4

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

 

Page 38: back-tracking-1193073889558994-4

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

  

Page 39: back-tracking-1193073889558994-4

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)

 

Page 40: back-tracking-1193073889558994-4

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

Page 41: back-tracking-1193073889558994-4

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

Page 42: back-tracking-1193073889558994-4

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

Page 43: back-tracking-1193073889558994-4

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

Page 44: back-tracking-1193073889558994-4

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

 

Page 45: back-tracking-1193073889558994-4

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

Page 46: back-tracking-1193073889558994-4

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