Métodos de búsqueda

Primero el Mejor (Best-First) Este algoritmo, combina las ventajas de los algoritmos primero en profundidad y primero en amplitud. Sigue un sendero a la vez, pero puede cambiarse a otro sendero que parece más prometedor que el que está siguiendo. En este sentido, puede considerarse que es un algoritmo que realiza su proceso de búsqueda en un grafo de tipo O, ya que todos sus ramales representan una alternativa de solución. Para su operación, el algoritmo necesita dos listas de nodos y una función heurística que estime los méritos de cada nodo que se genere: 1. ABIERTOS - Es una variable que contiene los nodos que han sido generados. La función heurística ha sido aplicada a ellos, pero todavía no han sido examinados, es decir no se han generado sus sucesores. ABIERTOS puede considerarse como una COLA DE PRIORIDADES en la que los elementos con mayor prioridad son los que tienen los valores más prometedores, dados por la función heurística. 2. CERRADOS - Es una variable que contiene los nodos que han sido examinados. Es necesario tener esta información, para que la búsqueda sea en un grafo y no en un árbol. 3. FUNCIÓN HEURÍSTICA - Permite que el algoritmo busque primero por senderos que son o parecen más prometedores. Para muchas aplicaciones, es conveniente definir esta función f', como la suma de dos, que se las llamará g y h'. La función g es una medida del costo de llegar desde el nodo inicial al nodo actual. La función h' es una estimación del costo adicional para llegar desde el nodo actual al estado objetivo. Aquí es donde se explota el conocimiento que se dispone sobre el dominio del problema. Es decir, la función combinada f' representa una estimación del costo de llegar desde el estado inicial hasta el estado objetivo, siguiendo el sendero que ha generado el nodo actual. Si el nodo actual ha generado más de un sendero, el algoritmo deberá dejar registrado sólo el mejor. El algoritmo, en la forma que fue formulado, se aplica a grafos. Puede ser simplificado para aplicarse a árboles, si no se preocupa de comprobar si un nuevo nodo esta en ABIERTOS o en CERRADOS. Esto aceleraría la generación de nodos y la búsqueda, para casos en que es poco probable que se repitan nodos. Usualmente, el costo de ir de un nodo a su sucesor, g, se fija en una constante igual 1, cuando se desea encontrar un sendero a la solución, que involucre el menor número de pasos. Si por el contrario nos interesa encontrar el camino menos costoso y algunos operadores cuestan más que otros, se asume un valor de g, que refleje esos costos. Un valor de g igual a cero significaría que simplemente nos interesa llegar a alguna solución, de cualquier manera. Si h' es un estimador perfecto de h, hará que A* converja inmediatamente al objetivo, sin búsqueda. Mientras mejor sea h', más cerca se estará de alcanzar esta aproximación directa. Si h' vale cero, la búsqueda será controlada por g. Si el valor de g es también cero, hará que la búsqueda sea aleatoria. Si el valor de g es siempre 1, hará que la búsqueda sea primero en anchura. Para los casos en que h' no sea perfecto ni cero, y nunca llega a sobrestimar el valor de h, el algoritmo A* está garantizado que encontrará un sendero óptimo a un objetivo, en caso de que exista

se compara dicho valor con el del estado expandido y si es mejor. da lugar a dos variantes de los esquemas en escalada irrevocables: _ La escalada simple. el método no dice nada sobre qué estado elegir). en el momento es que se encuentra un estado E que es más favorable que el que se está expandiendo. _ Los métodos tentativos en los que sí podemos volver hacia atrás si prevemos que el camino elegido no es el más adecuado. se dice que es admisible. en ese caso. es decir el algoritmo es admisible. pero no eficiente. se calculan sus valores heurísticos y se determina uno de los estados de mejor valor heurístico. Nótese que la escalada simple es mucho más dependiente que la escalada por la máxima pendiente del orden de disparo de las reglas (pese a que ésta última también lo es: el valor heurístico mejor puede ser alcanzado en varios hijos y. no se devuelve nada. se devuelve ese estado como expansión. dicho estado E es devuelto sin generar el resto de estados hijos. lo que conllevará que la búsqueda termine sin haber encontrado un objetivo.solución. . Métodos de escalada _ Se llaman de escalada (o de ascensión a la colina) porque tratan de elegir en cada paso un estado cuyo valor heurístico sea mayor que el del estado activo en ese momento. se generan todos los hijos de un estado. Si no es así. En ambos casos. _ La escalada por la máxima pendiente. que no prevén la vuelta a un lugar del espacio de estados si el camino resulta inadecuado. En este caso. En este método. es decir. Beam Search El beamsearchmantiene registro de k nodos: ± Empieza con k estados generados aleatoriamente. Cuando un algoritmo garantiza el encontrar una solución óptima. se seleccionan los k mejores sucesores de la lista completa y se repite el proceso. _ Se dividen en dos grupos: _ Los métodos irrevocables. sólo se mantiene en expectativa un único camino. ± Se verifica si algún estado es el objetivo. pero con ello estamos en la búsqueda primero en anchura. Teorema de Admisibilidad Si h' nunca sobrestima a h entonces A* es admisible. ± En cada paso se generan todos los sucesores de loskestados. _ El modo en que se determina qué estado es el que sigue a uno dado. La única manera de garantizar que h' nunca sobrestime a h es haciéndolo cero. si ningún estado hijo es mejor que el estado que está siendo expandido. Métodos de escalada irrevocables _ La lista ABIERTA no puede poseer más de un elemento. si esta existe.

. es una estimación de lo que me queda por recorrer hasta la meta. Si el mejor estado Em es mejor que el estado actual.. devolverlo y terminar. _ Frente a la escalada simple. _ La función combinada f una estimación del coste necesario para alcanzar un estado objetivo por el camino que se ha seguido para generar el nodo actual (si se puede generar por varios caminos el algoritmo se queda con el mejor).. Asignar m a una varibla llamada elegido. Denominar m al estado inicial y evaluarlo. .2 Si f(elegido) # f(m) asignar m=elegido. entonces devolverlo y terminar. 1) Aplicar cualquier operador aplicable al estado actual m y obtener un nuevo estado Ei. Repetir hasta que se encuentre solución o hasta que una iteración completa no produzca un cambio en el estado actual: _ 2. _ 2..1 Expandir m. Repetir hasta que se encuentre solución o hasta que una iteración completa no produzca un cambio en el estado actual: _ 2. _ Función h: es una estimación del coste adicional necesario para alcanzar un nodo objetivo a partir del nodo actual.. En. _ En cada paso se selecciona el nodo más prometedor que se haya generado hasta ese momento (función heurística).. evaluar si Ei es mejor que el estado actual: (H(Ei) ->H(elegido)). seleccionar el mejor H(Em) C. Para ello. y volver a 2.1 Si Ei es estado objetivo. Denominar m al estado inicial y evaluarlo. como hace la escalada simple) Algoritmo A* _ Definiremos una función heurística f como la suma de dos funciones g y h: _ Función g: es una medida del coste para ir desde el estado inicial hasta el nodo actual (suma de los costes o valores heurísticos de todos los nodos). 2. Si no continúo con el algoritmo. Si es estado objetivo. si no. _ Si alguna de ellos es meta el proceso acaba. Algoritmo de escalada por la máxima pendiente El algoritmo: _ 1.1 Expandir m creando el conjunto de todos sus sucesores. 2) Evaluar Ei: 2. B. _ 2. es decir. si no. entonces devolverlo y terminar. convertirlo en estado actual. Si alguno es objetivo. convertirlo en estado actual. Evaluar E1.Algoritmo de escalada simple _ El algoritmo: _ 1. Aplicar cada operador aplicable al estado actual m y conseguir nuevos estados E1. hacer que Em sea el estado actual. en cuyo caso hacer m=Ei. Asignar m a una varibla llamada elegido. Si es estado objetivo. considera todos los posibles estados nuevos (no el primero que es mejor. _ A continuación se expande el nodo elegido generando todos sus sucesores. Volver al paso 2.1 Si Ei no es estado objetivo no es así. En. devolverlo y terminar Si no es así. _ 2. A. _ NOTA: los nodos buenos deben poseer valores bajos.

en cuyo caso se debe actualizar el puntero para que conduzca hacia el nodo n¶ (mejor camino desde la raíz encontrado hasta ese momento) y se continúa el proceso de propagación. 3. pero si en una rama por la que estoy explorando no aparece la solución la rama puede parecer menos prometedora que otras por encima de ella y que se habían ignorado. 3. 2) Calcular g(n¶)=g(m)+c(m. 2. Su último nodo se almacena en el conjunto de nodos generados pero aún sin expandir. 3) Si n¶ está en ABIERTA llamar n al nodo encontrado en dicha lista. Hasta que se encuentre una meta o de devuelva fallo realizar lassiguientes acciones: 3.n¶). 4. entonces redirigir el puntero de n a m y cambiar el camino de menor coste encontrado a n desde la raíz. añadirlo a los sucesores de m y realizar el siguiente paso: 3. comprobar si g(ni µ )< g(ni ). en caso contrario continuar. abandonar el proceso iterativo iniciado en 2 devolviendo el camino recorrido (punteros a sus antepasados) 3. es decir. llamar n al nodo encontrado en dicha lista y realizar las siguientes acciones: Si 3.2. Empezar con ABIERTA conteniendo sólo el nodo inicial. 5) Si n´no está en ABIERTA o en CERRADA. 3.4 En caso contrario expandir m generando todos sus sucesores. 3. llamar a este nodo m e introducirlo en la lista cerrada.b) es el coste de pasar de a ab.1) Para los nodos descendientes ni cuyo puntero (que debe apuntar siempre al mejor predecesor hasta ese momento) conduzca hacia el nodo ni. introducirlo en ABIERTA y añadirlo a la lista de sucesores de m. _ Sin embargo al vieja rama no se olvida. Inicializar CERRADA como una lista vacía. 4) Si n¶ no cumple 3). su valor h al que corresponda. tal que c(a. abandonar 4).2 Eliminar el nodo de ABIERTA que tenga un valor mínimo de f._ Es parecido a la búsqueda en profundidad.3 Si m es meta. a h. empezando en n¶ y teniendo en cuenta las siguientes consideraciones: 4. . siendo sus costes anteriores g(ni )). El algoritmo: 1. Poner el valor g de ese nodo a 0.1 Si ABIERTA está vacía terminar con fallo.1) Si g(n¶)<g(n).«. actualizar g(ni )=g(ni¶) y f(ni)=g(niµ)+h(ni) y seguir el recorrido hasta que se encuentre un ni que no tenga más sucesores calculados o se llegue a un nodo en que ya ocurra que g(ni )=g(ni µ). en cuyo caso se habría producido un ciclo y también habría que terminar la propagación. en caso contrario propagar el nuevo menor coste g(n¶) (por lo que también actualizarán los valores de f correspondientes(que llamaremos ni tal que i=1. comprobar si está en cerrada.5 Para cada sucesor n¶ de m: 1) Crear un puntero de n¶ a m. realizando un recorrido enprofundidad de éstos. y su valor f a h+0. calcular h(n¶) y f(n¶)=g(n¶)+h(n¶). Podemos pues abandonar la rama anterior y explorar la nueva.2) Para los nodos descendientes ni cuyo puntero no conduzca hacia el nodo n¶.1) no se cumple. g(n)=g(n¶) y f(n)=g(n¶)+h(n).

1. Ejemplo: Figura 3. Ejemplo: Figura 3. Búsqueda en profundidad Primero a lo ancho.Primero en profundidad.2. Explora cada nodo sobre el mismo nivel antes de intentar analizar un nivel más profundo. Explora cada camino posible hasta su conclusión antes de intentar otro camino. Búsqueda a lo ancho .

Sign up to vote on this title
UsefulNot useful