martes, 2 de julio de 2013

Búsqueda informada

Introducción

Búsqueda ciega o no informada (anchura, profundidad): no cuenta con ningún conocimiento sobre cómo llegar al objetivo.

Búsqueda informada: aplicar conocimiento al proceso de búsqueda para hacerlo más eficiente.

El conocimiento vendrá dado por una función que estima la “bondad” de los estados:

Dar preferencia a los estados mejores.

Ordenando la cola de ABIERTOS, comparando su bondad estimada.

Objetivo: reducir el árbol de búsqueda, ganando eficiencia en la práctica.


Heurística



Del griego heuriskein, descubrir: ¡Eureka!

Según la RAE: “técnica de la indagación y del descubrimiento”.

Otro significado: método para resolver problemas que no garantiza la solución, pero que en general funciona bien.

En nuestro caso, una heurística será una función numérica sobre los estados.

Características:
- Esta función de evaluación se utiliza para guiar el proceso haciendo que en cada momento se seleccione el estado o las operaciones más prometedoras.
- No siempre se garantiza encontrar una solución (si existe).
-No siempre se garantiza encontrar la solución más próxima (la que tenga el número menor de operaciones).

Como por ejemplo:



Búsqueda A*: minimizar el costo estima total de la solución



La forma más ampliamente conocida de la búsqueda  primero el mejor se le llama búsqueda A* conocida como “Búsqueda A-estrella”; la cual evalúa los nodos combinando g(n) y h(n) de la siguiente manera:

f(n)=g(n)+h(n)

g(n) significa el coste para alcanzar el nodo; lo que quiere decir que nos da el coste de camino desde el nodo inicial al nodo n y h(n)=significa el coste de ir al nodo objetivo, es decir, el coste estimado del camino más barato desde n hasta el objetivo.

f(n)=coste más barato estimado de la solución a través de n.

De esta manera se trata de encontrar la solución más barata y es razonble intentar primero el nodo con el valor más bajo de g(n).
Cabe mencionar que esta estrategia resulta ser más que razonable con tal que la funcion heurística h(n) satisfaga cierta condiciones; la búsqueda A* compleja como optima, la optimalidad de A* es sencilla de analizar si se usa con la búsqueda de árboles.
A* es óptima si h(n) es una heurística admisible, es decir, con tal de que la h(n) nunca sobrestime el coste de alcanzar el objetivo. Como g(n) es el coste exacto para alcanzar n, tenemos como consecuencia inmediata que la f(n) nunca sobrestime el coste verdadero de una solución a través de n.
Como por ejemplo:





En el ejemplo de la figura, se ha superpuesto una rejilla para estimar distancias. Supóngase que se quiere determinar el camino óptimo entre A y F. Inicialmente, se toma el origen y se coloca en la lista Abierta.
El nodo A pasa a lista cerrada y se pasan a la lista Abierta los conectados con el (B y C), asignándoles valores R, E y punteros al antecesor (A).
Se selecciona el de menor valor T de la lista Abierta (C) y se pasa a lista cerrada. Los conectados con el (D y E) se pasan a Abierta, asignándoles valores R, E y punteros al antecesor (C).

Se selecciona el de menor valor T de la lista Abierta (B) y se pasa a lista cerrada. Los conectados con el (D y E) no se pasan a Abierta, pues el valor T es mayor que los ya existentes.

Se selecciona el de menor valor T de la lista Abierta (D) y se pasa a lista cerrada. Sólo se pasa el nodo F a Abierta, pues B está ya en cerrada.
Se selecciona el de menor valor T de la lista Abierta (F) y se pasa a lista cerrada. Como es el nodo destino, se acaba el proceso.
Ahora, se puede recuperar el camino óptimo retrocediendo desde el nodo F mediante los punteros.



Búsqueda IDA*


Es de tipo de algoritmos de búsqueda heurística con limitación de memoria. Los más utilizados son el IDA* (Iterative Deepening A*), y SMA* (Simplified memory A*).
El IDA* (Iterative-Deepening A*) es al igual que el DFID un algoritmo basado en la profundización iterativa. La única diferencia entre ambos algoritmos estriba en que mientras el DFID se basa en la profundidad para cada una de sus iteraciones, el IDA se basa en la información heurística que posee para determinar el siguiente límite de la iteración. El tratamiento de esa información se realiza de igual forma que en el algoritmo del A*, o sea mediante la función de evaluación f introducida anteriormente. El funcionamiento del algoritmo es el siguiente:

En cada iteración el algoritmo realiza una búsqueda en profundidad hasta donde se lo permita su límite de coste. Cada vez que se visita todo el grafo de búsqueda contenido dentro de ese límite sin hallar la solución entonces, el algoritmo incrementa el límite de coste. Ese nuevo límite viene dado por el menor de los límites de corte, o sea, por el menor valor del coste de los nodos que tenían un valor superior en la anterior iteración.

Este algoritmo se considera limitado en profundidad, aunque esta afirmación no sea estrictamente cierta. La razón de ello viene dado por su eficacia en cuanto al uso de memoria pero en su funcionamiento no realiza un control estricto de la memoria.

Características de IDA*


IDA* es un método de búsqueda completo y óptimo, lo que quiere decir que siempre encuentra una solución si es que ésta existe y además garantiza encontrar la mejor solución de entre todas las posibles.

 Este método tiene las mismas ventajas y desventajas que A*, excepto en lo referente al coste espacial. En este aspecto IDA* presenta notables ventajas ya que únicamente necesita un espacio proporcional a la longitud de la ruta más larga que se explore. 

Esta limitación en el uso de la memoria resulta beneficiosa pero también tiene sus desventajas, ya que al convertir la búsqueda de la solución en un proceso iterativo expandiremos varias veces los mismos nodos. Esto es algo muy a tener en cuenta, ya que dependiendo de las características de los problemas a resolver obtendremos mejores o peores prestaciones.

En el mejor caso el coste temporal de IDA* puede ser muy similar al de A*, e incluso menor, ya que al ser un algoritmo simple y no necesitar de inserciones, borrados y reordenamientos en listas de prioridades tiene una menor sobrecarga por nodo. Este mejor caso ocurrirá cuando tengamos un problema en el que las heurísticas adopten valores aproximados al coste real desde el comienzo de la ejecución, ya que entonces se realizarán pocas iteraciones, expandiendo además pocos nodos en las iteraciones iniciales. Podemos asociar este caso con el problema del 8-puzzle cuando se usa la heurística de distancias.

En el peor caso el coste temporal de IDA* se acerca al de un algoritmo de profundización iterativa habitual como el IDS (Iterative Deepening Search), es decir, en cada iteración se profundiza únicamente un nivel más en el árbol. Esto ocurre en problemas en los que los valores heurísticos son poco acertados, lo que provoca que en cada iteración aumentemos el contorno en sólo uno o dos niveles.


Como por ejemplo:

Conclusión      



Por lo visto en este capítulo  podemos concluir que la utilización de métodos de búsqueda respaldados con información, presenta nuevos problemas para la elección del método de búsqueda mas adecuado para un problema, ya que, no solo debemos tener en cuenta  el método de búsqueda sino que también se debe confeccionar correctamente una heurística eficiente.

El valor devuelto debe resultar útil y correcto ya que, aunque eligiéramos el mejor método si la heurística falla podríamos no arribar a la solución.
También podemos concluir que en algunos casos se pueden combinar métodos de búsqueda para así llegar a una función óptima.



No hay comentarios:

Publicar un comentario