backtracking 2

47
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

Upload: aldo-lumbarde-banegas

Post on 21-Jul-2015

33 views

Category:

Documents


0 download

TRANSCRIPT

Bsqueda con retroceso Pg. 1 Bsqueda con retroceso Introduccin 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 Bsqueda con retroceso Pg. 2 Bsqueda con retroceso:Introduccin Problemas que consideraremos: Problemas de Decisin: Bsqueda de las soluciones que satisfacen ciertasrestricciones. Problemas de Optimizacin: Bsqueda de la mejorsolucin en base a una funcin objetivo. Cada solucin es el resultado de una secuencia de decisiones. En algunos problemas de este tipo se conoce un criterio ptimo de seleccin en cada decisin: tcnica voraz. En otros problemas se cumple el principio de optimalidad de Bellman y se puede aplicar la tcnica de la programacin dinmica. Existen otros problemas en los que no hay ms remedio que buscar. Bsqueda con retroceso Pg. 3 Planteamiento del problema: Se trata de hallar todas las soluciones que satisfagan un predicado Sol. La solucin debe poder expresarse como una tupla (x1,,xn) donde cada xi pertenece a un dominio Ci. Si |Ci|=ti, entonces hay n-tuplas candidatas para satisfacer Sol. Mtodo de fuerza bruta: examinar las t n-tuplas y seleccionar las que satisfacen Sol. Bsqueda con retroceso (backtracking, eningls): formar cada tupla de manera progresiva,elemento a elemento, comprobando para cadaelemento xi aadido a la tupla que (x1,,xi) puede conducir a una tupla completa satisfactoria. Bsqueda con retroceso:Introduccin t = tii =1n[Bsqueda con retroceso Pg. 4 Deben existir unas funciones objetivo parciales o predicados acotadores Completable(x1,,xi). Dicen si (x1,,xi) puede conducir a una solucin. Diferencia entre fuerza bruta y bsqueda con retroceso: si se comprueba que (x1,,xi)no puedeconducir a ninguna solucin, se evita formar las ti+1tn tuplas que comienzan por(x1,,xi) Para saber si una n-tupla es solucin, suele haber dos tipos de restricciones: explcitas: describen el conjunto Ci devalores que puede tomar xi (todas las tuplas que satisfacen estas restricciones definen un espacio de soluciones posibles); implcitas: describen las relaciones que deben cumplirse entre los xi (qu soluciones posibles satisfacen el predicado objetivo Sol). Bsqueda con retroceso:Introduccin Bsqueda con retroceso Pg. 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 (dos reinas se dan jaque si comparten fila, columna o diagonal). Bsqueda con retroceso:Introduccin 12345678 1 2 3 4 5 6 7 8 Bsqueda con retroceso Pg. 6 Formulacin 1: Formulacin 2: Puesto que no puede haber ms de una reina por fila, podemos replantear el problema como:colocar una reina en cada fila del tablero de forma que no se den jaque. En este caso, para ver si dos reinas se dan jaque basta con ver si comparten columna o diagonal. Por lo tanto, toda solucin del problema puede representarse con una 8-tupla (x1,,x8) en la que xi es la columna en la que se coloca la reina que est en la fila i del tablero. El espacio de soluciones consta de88 8-tuplas (16.777.2168-tuplas) Formulacin 3: Puesto que no puede haber ms de una reina por columna, slo hace falta que consideremos las 8-tuplas (x1,,x8) que sean permutaciones de (1,2,...,8) El espacio de soluciones consta de8!8-tuplas (40.320 8-tuplas) Bsqueda con retroceso:Introduccin 64 8 |\

|.|= 4 . 426 . 165 . 368 Bsqueda con retroceso Pg. 7 Volviendo al planteamiento general: Para facilitar la bsqueda, se adopta unaorganizacin en rbol del espacio de soluciones. En el ejemplo, con la 2 formulacin y para el problema de las cuatro reinas (en un tablero 44): Bsqueda con retroceso:Introduccin Bsqueda con retroceso Pg. 8 Bsqueda con retroceso:Introduccin algoritmo BackTracking(ent k:entero; entsalX:vector[1..n]de valor) {Pre: X[1..k-1] es completable}variable v:valor para todo v en Ci hacer X[k]:=v; sicompletable(X,k) entonces si Sol(X,k) entoncesguardar(X,k) fsi; si kcap entonces dev ben+cap/peso[k]*benef[k] sinodev cota(benef,peso,cap-peso[k], ben+benef[k],k+1) fsi fsi fin tipo vectReal=vector[1..n] de real {Pre: ie1..n:peso[i]>0, benef[i]>0, ie1..n-1:benef[i]/peso[i]>benef[i+1]/peso[i+1]} Bsqueda con retroceso Pg. 37 El problema de la mochila 0-1 tipo solucin=vector[1..n] de 0..1 {variables globales: benef,peso:vectReal; cap:real} algoritmo bsqueda(ent solAct:solucin; ent benAct,pesAct:real; ent k:entero; e/s sol:solucin; e/s ben:real) para v:=1 hasta 0 hacer solAct[k]:=v; benAct:=benAct+v*benef[k]; pesAct:=pesAct+v*peso[k]; si pesActscap . benben entonces sol:=solAct; ben:=benAct fsi sino bsqueda(solAct,benAct,pesAct, k+1,sol,ben) fsi fsi fpara fin Bsqueda con retroceso Pg. 38 Mejora adicional: encontrar una solucion factible (no necesariamente ptima) con un algoritmo voraz. Sea r su coste. Obviamente r es una cota inferior de la solucin del problema. Por lo tanto, podemos inicializar ben:=r ejercicio: Pensar un algoritmo voraz que encuentre una solucin factible. algoritmo mochila01(ent benef,peso:vectReal; ent cap:real; sal sol:solucin; sal ben:real) variables obj:entero; solAct:solucin principio ben:=0.0; bsqueda(solAct,0.0,0.0,1,sol,ben) fin El problema de la mochila 0-1 Bsqueda con retroceso Pg. 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 89 139 99 149 101 151 109 159 66 106 56 96 33 63 68 108 35 65 12 32 1 11 164.88 155.11 157.44 159.76 154.88 160.22 157.55 157.11 162.44 164.66 163.81 139 149 151 159 161.63 160.18 158 159.79 159.33 157.63 10 1 1 1 0 0 0 1 0 0 0 0 10 10 10 0 1 1 0 00 0 0 0 162 0 0 1 0 ben=159 sol=(1,1,1,0,1,1,0,0) Bsqueda con retroceso Pg. 40 De los 29-1 nodos del espacio de estados, slo se generaron 33. Se poda haber reducido a 26 simplemente sustituyendo la condicin ben < cota(...) en el algoritmo bsqueda por: ben < cota(...) El problema de la mochila 0-1 Bsqueda con retroceso Pg. 41 ahora para problemas de minimizacin X[1..k]: asignacin actual (solucin que estamos tratando de construir) MejorSol: Mejor solucin encontrada hasta el momento (se inicializa a Null) MS: Coste de la mejor solucin encontrada hasta el momento (es una cota superior de la solucin ptima). Se inicializa a infinito. c(X,k): devuelve una cota inferior del mejor coste que se puede obtener a partir de la asignacin actual Si c(X,k) > MS, entonces no sirve de nada seguir con la asignacin actual (podamos, es decir, hacemos backtracking) Es decir, slo hacemos llamada recursiva si: completable(X,k) y c(X,k)