2b Busqueda Informada y Exploracion (Es)
2b Busqueda Informada y Exploracion (Es)
2b Busqueda Informada y Exploracion (Es)
Introduccin
La bsqueda informada utiliza el conocimiento especfico del problema. Puede encontrar soluciones de una manera ms eficiente. Una funcin heurstica, h(n), mide el coste estimado ms barato desde el nodo n a un nodo objetivo. h(n) se utiliza para guiar el proceso haciendo que en cada momento se seleccione el estado o las operaciones ms prometedores.
2
H1 = ? H2 = ?
H1 = ? H2 = ?
G F E D H A C B
H1 = ? H2 = ?
H1 = 6 H2 = -21
H1 = 4 H2 = -15
G F E D H A C B
H1 = 4 H2 = -16
Evala los nodos utilizando solamente la funcin heurstica, que, en general, se minimiza, porque se refiere a un coste:
f(n) = h(n)
La estructura de abiertos es una cola con prioridad. La prioridad la marca la funcin heurstica (coste estimado del camino que falta hasta la solucin). En cada iteracin se escoge el nodo ms cercano a la solucin (el primero de la cola). Esto provoca que no se garantice la solucin ptima.
Funciones heursticas
estado inicial 2 1 7 8 6 3 4 5 Posibles heursticos (estimadores del coste a la solucin) h(n) = w(n) = #desclasificados h(n) = p(n) = suma de distancias a la posicin final h(n) = p(n) + 3 s(n) donde s(n) se obtiene recorriendo las posiciones no centrales y si una ficha no va seguida por su sucesora, sumar 2 si hay ficha en el centro, sumar 1
1 8 7
3 4
estado final
Costes
ni ni C1 ni C2 ... Cl nj nj nj Coste de un arco Coste de un camino Coste del camino mnimo
C(ni,nj)
Si nj es un nodo terminal Si ni es un nodo inicial Si existen varios nodos terminales T={t1, ,tl} Si existen varios nodos iniciales S={s1, ,sl}
Algoritmos A y A*
La funcin de evaluacin tiene dos componentes: 1) 2) Coste mnimo para ir desde el (un) inicio al nodo actual Coste mnimo (estimado) para ir desde el nodo actual a una solucin
A*
Si h(n) nunca sobrestima el coste real, es decir n h(n) h*(n) se puede demostrar que el algoritmo encontrar (de haberlo) un camino ptimo.
Algoritmo A*
1. 2. 3. 4. 5.
Put the start node S on the nodes list, called OPEN If OPEN is empty, exit with failure Remove from OPEN and place on CLOSED a node n for which f(n) is minimum If n is a goal node, exit (trace back pointers from n to S) Expand n, generating all its successors and attach to them pointers back to n. For each successor n' of n
1. 2.
If n' is not already on OPEN or CLOSED estimate h(n'), g(n')=g(n)+ c(n,n'), f(n')=g(n')+h(n'), and place it on OPEN. If n' is already on OPEN or CLOSED, then check if g(n') is lower for the new version of n'. If so, then:
(i) Redirect pointers backward from n' along path yielding lower g(n'). (ii) Put n' on OPEN.
3.
Goto 2
Algoritmo A*
La estructura de abiertos es una cola con prioridad. La prioridad la marca la funcin de estimacin f(n)=g(n)+h(n). En cada iteracin se escoge el mejor camino estimado (el primero de la cola). A* es una instancia de la clase de algoritmos de bsqueda primero el mejor. A* es completo cuando el factor de ramificacin es finito y cada operador tiene un coste positivo fijo.
Tratamiento de repetidos
Si es un repetido que est en la estructura de abiertos:
Si su nuevo coste (g) es menor substituimos el coste por el nuevo; esto podr variar su posicin en la estructura de abiertos Si su nuevo coste (g) es igual o mayor nos olvidamos del nodo
Ejemplo de bsqueda A*
Ejemplo de bsqueda A*
Ejemplo de bsqueda A*
Ejemplo de bsqueda A*
Ejemplo de bsqueda A*
Ejemplo de bsqueda A*
A*: admisibilidad
El algoritmo A, dependiendo de la heurstica, encontrar o no una solucin ptima. Si la heurstica es admisible (y se utiliza el algoritmo de bsqueda en rboles), la optimizacin est asegurada. Una heurstica es admisible si se cumple la siguiente propiedad: n 0 h(n) h*(n) Por lo tanto, h(n) ha de ser un estimador optimista, nunca ha de sobreestimar h*(n). Usar una heurstica admisible garantiza que un nodo en el camino ptimo no pueda parecer tan malo como para no considerarlo nunca.
Ejemplo: no admisibilidad
h=3 /\ / \ h=2 h=4 | | | | h=1 h=1 | | | | h=1 goal | | h=1 | | goal
Esta condicin asegura la optimizacin tambin cundo se utiliza el algoritmo de bsqueda en grafos. El nodo n es sucesor de n h(n) = coste estimado desde n a t h(n) cumple la desigualdad triangular: h(ni) k(ni , nj) + h(nj)
Condicin de Consistencia
ni k(ni , nj) = 4 nj h(ni) = 10 h(nj) = 8 t Consistente h(ni) h(nj) k(ni , nj) Si h(nj) = 4, la estimacin de h(n) no es uniforme y la heurstica no es consistente.
Condicin de Consistencia
Se puede demostrar que toda heurstica consistente es tambin admisible.
A* utilizando la bsqueda en grafos es ptimo si la h(n) es consistente. La consistencia es una exigencia ms estricta que la admisibilidad. Sin embargo, es difcil crear heursticas que sean admisibles, pero no consistentes. Si h(n) es consistente, entonces los valores de f(n), a lo largo de cualquier camino, no disminuyen.
Optimality of A*
A* expands nodes in order of increasing f value: si h(n) es consistente, entonces los valores de f(n), a lo largo de cualquier camino, no disminuyen. Gradually adds "f-contours" of nodes. Contour i has all nodes with f=fi, where fi < fi+1.
Dado un problema, existen tantos A* para resolverlo como heursticas podamos definir.
A1*, A2* admisibles nfinal: 0 h2(n) < h1(n) h*(n) A1* ms informado que A2*
Algoritmos ms informados
A1* ms informado que A2*
Algoritmos ms informados
Compromiso entre:
Tiempo de clculo
h1(n) requiere ms tiempo de clculo que h2(n) !
Nmero de reexpansiones
A1* puede que re-expanda ms nodos que A2* !
Si A1* es consistente seguro que no Si se trabaja con rboles (y no grafos) seguro que no
Perdida de admisibilidad
Puede interesar trabajar con heursticas no admisibles para ganar rapidez.
Rompecabezas de 8 piezas
(coste operaciones = 1)
1 8 7 6 3 2 4 5 1 8 7 6 2 3 4 5
h0(n)=0 anchura prioritaria, A0* admisible, muchas generaciones y expansiones h1(n)=# piezas mal colocadas A1* admisible, A1* mas informado que A0*
h2(n)=i[1,8]di
di distancia entre posicin de la pieza i y su posicin final (suponiendo camino libre) distancia nmero mnimo de movimientos para llevar la pieza de una posicin a otra A2* admisible. Estadsticamente se comprueba que A2* es mejor que A1*, pero no se puede decir que sea ms informado.
h3(n)=i[1,8]di + 3 S(n) si =
S(n)=i[1,8]si
0 si pieza i no en el centro y sucesora correcta 1 si pieza i en el centro 2 si pieza i no en el centro y sucesora incorrecta
1 8 7 2 6
3 4 5
h3(n)=1+3(2+1)=10 h*(n)=1
A3* no admisible
A3* no se puede comparar con A1* o A2* pero va ms rpido (aunque la h a calcular requiera ms tiempo).
A*PI
A* en profundidad iterativa es similar a PI (es decir iteracin de bsqueda en profundidad con un lmite en la bsqueda). En PI el lmite lo daba una cota mxima en la profundidad. En A*PI el lmite lo da una cota mxima sobre el valor de la funcin f. Ojo! La bsqueda es una BPP normal y corriente, el heurstico f slo se utiliza para podar. Empezamos con corte = f (inicial) 0+2 g + h (orden de expansin)
A*PI
A* en profundidad iterativa es similar a PI (es decir iteracin de bsqueda en profundidad con un lmite en la bsqueda). En PI el lmite lo daba una cota mxima en la profundidad. En A*PI el lmite lo da una cota mxima sobre el valor de la funcin f. Ojo! La bsqueda es una BPP normal y corriente, el heurstico f slo se utiliza para podar. Empezamos con corte = f (inicial) 0+2 (2,4,9) 1+1 (5,10) (11) 2+1 3+1 4+1 5+0 Objetivo 1+2 2+1 3+1 4+0 (1,3,8) (6,12) (7,13) (14) (15) g + h (orden de expansin)
Objetivo
Algoritmo A*PI
Algoritmo IDA* prof=f(Estado_inicial) Mientras no es_final?(Actual) hacer Est_abiertos.insertar(Estado_inicial) Actual= Est_abiertos.primero() Mientras no es_final?(Actual) y no Est_abiertos.vaca?() hacer Est_abiertos.borrar_primero() Est_cerrados.insertar(Actual) Hijos= generar_sucesores(Actual, prof) Hijos= tratar_repetidos(Hijos, Est_cerrados, Est_abiertos) Est_abiertos.insertar(Hijos) Actual= Est_abiertos.primero() fMientras prof=prof+1 Est_abiertos.incializa() fMientras fAlgoritmo
La funcin generar_sucesores slo genera aquellos con una f menor o igual a la del limite de la iteracin. La estructura de abiertos es ahora una pila (bsqueda en profundidad). Tener en cuenta que si se tratan los nodos repetidos el ahorro en espacio es nulo. Slo se guarda en memoria el camino (la rama del rbol) actual.
Por lo general re-expande menos nodos que A*PI. Al no poder controlar los repetidos su coste en tiempo puede elevarse si hay ciclos. 40