IMPLEMENTACIÓN DEL  ALGORITMO A*  EN 8‐PUZZLE Y 8‐REINA 

Trabajo realizado por: Alonso García, Rubén Sanz Fernández, Rafael

. La evaluación mide la distancia al objetivo. Un algoritmo de búsqueda por el mejor nodo combina las características de los métodos en anchura y en profundidad. Desafortunadamente. Un primer contacto con éstos algoritmos es el siguiente: “búsqueda primero el mejor”. combinando las dos funciones de evaluación simplemente sumándolas: f(n) = g(n) + h(n). podemos hacer eso exactamente. Evalúa los nodos utilizando solamente la función heurística: f(n) = h(n) En nuestro trabajo nos centraremos en la búsqueda A* y sus variantes. CARACTERIZACIÓN DEL ALGORITMO A*. disminuye considerablemente el coste de la búsqueda. Afortunadamente. que es un caso particular del algoritmo general de “búsqueda de árboles” o “búsqueda de grafos”. Los algoritmos de búsqueda informada son muy útiles en problemas donde lo que importa es el estado de solución en sí mismo. 2. debido a que éstos últimos pueden encontrar soluciones a problemas generando sistemáticamente nuevos estados y probándolos con el objetivo. en el cuál se selecciona un nodo para la expansión basada en una función de evaluación. pero puede ser muy ineficiente. El uso de este tipo de algoritmo. Por otra parte. Introducción a los algoritmos de búsqueda informada y exploración Los algoritmos de búsqueda informada son más eficientes que los algoritmos de búsqueda no informada.1. expande para cada conjunto de sucesores aquel cuyo camino desde el nodo raíz tenga un menor coste. Otro algoritmo importante es el “búsqueda voraz primero el mejor” que expande el nodo más cercano al objetivo. no es ni óptimo ni completo. Sería bueno poder combinar estas dos estrategias para conseguir las ventajas de ambos. Se caracteriza porque para cada nodo se generan todos los posibles sucesores y de estos sólo se expande aquel que sea más prometedor después de la aplicación sobre ellos de una función heurística h(n) que estima el coste del camino desde cada nodo al objetivo. es decir. g(n) . al minimizar el coste estimado hasta el objetivo.1. INTRODUCCIÓN 1. no el camino. f(n). Utilizan métodos inspirados en la física estadística (temple simulado) y la biología evolutiva (algoritmos genéticos). Este es un algoritmo óptimo y completo. la búsqueda de coste uniforme minimiza el coste del camino hasta el nodo.

f(n) es el coste estimado de la solución de menor coste que atraviesa el nodo n. Se puede comprobar que es completa y óptima. Los algoritmos de búsqueda heurística tradicionales como A* pueden llegar a necesitar un espacio de almacenamiento que crece de manera exponencial con la longitud de la solución del problema.el costo de la solución óptima para la ruta ¾ A* expande todos los nodos con f(n)<f* ¾ A* podría expandir algunos de los nodos a la derecha del “contorno de la meta”. La primera solución encontrada debe ser la óptima. Teorema: Sea h*(n) el costo real desde n hasta la meta. el coste espacial lo convierta en un problema intratable.Ya que g(n) proporciona el coste del camino desde el nodo de inicio hasta el nodo n. Una función h de este tipo es una heurística admisible. Si se intenta encontrar la solución de menor coste. s ya habría sido elegido como el nodo meta). de acuerdo con la suposición previa (en el otro caso. para los cuales f(n) = f*. Puesto que n no ha sido elegido para su expansión en su ruta hacia s’. entonces A* siempre va a encontrar un nodo meta óptimo. y h(n) es el coste estimado del camino de menos coste desde n hasta el objetivo. donde g(s)<g(s’) Sea n un nodo sin expandir en la ruta desde el nodo inicio y el nodo meta óptimo s. Notar que ese nodo sin expandir necesariamente existe. Sea que A* seleccione un nodo meta subóptimo s’. dando una simple restricción de la función h. es razonable intentar primero el nodo con el menor valor de f. Optimalidad de A* Definir f* . Lo bueno de esta estrategia. dado que los nodos de todos los contornos subsiguientes tendrán un costo f más alto y con ello un costo g más alto (todos los estados meta tienen h(n) = 0). Si h(n) < h*(n) para todo nodo n. es que es más que razonable. a pesar de que el problema tenga un coste temporal relativamente asequible. La restricción es escoger una función h que nunca sobreestime el coste para alcanzar el objetivo. A este algoritmo se le conoce con el nombre de A*. 2. antes de seleccionar el estado meta.1. se sigue que: f(n) = g(n) + h(n) ³ f(s') = g(s') + h(s') = g(s') . Prueba: Sea s el nodo meta de mínimo costo. Esto puede propiciar que.

g(n) + h*(n) ³ g(n) + h(n) = f(n). Complejidad A* La búsqueda A* es OPTIMAMENTE EFICIENTE para cualquier función heurística al contrastarse con otros algoritmos óptimos que compiten con ella. el error es a lo menos proporcional al costo de la ruta ¾ El crecimiento exponencial satura a cualquier computadora . que no expanda todos los nodos en los contornos existentes entre el contorno del inicio y el de la meta. corre el riesgo de no encontrar la solución óptima Complejidad temporal: O(b^d) Complejidad espacial: O(b^d) El espacio de búsqueda de A* crece exponencialmente a no ser que sea h(n)-h*(n) =< O(log h*(n)) ¾ Prácticamente. f(n) nunca sobreestima el costo real de la mejor solución pasando por n La búsqueda A* . Si h es admisible.Dado que h es admisible. con lo cual eventualmente expandirá hasta llegar al estado meta salvo que haya una cantidad infinita de nodos con f(n)< f* ¾ Un nodo con un factor de ramificación infinito ¾ Una ruta con costo de ruta finito pero con un número infinito de nodos a lo largo de ella 2.3.2. ¾ No hay otro algoritmo que expanda menos nodos que A* ¾ Cualquier algoritmo. y entonces g(n) + h*(n) ³ f(s') = g(s') lo cual implica que g(s) ³ g(s') Una heurística admisible nunca sobreestima el costo de llegar a la meta Un estimado de costo optimista en la solución de un problema es menor -más barato.que el real. Completitud de A* A* expande nodos en el orden de un creciente f.con f(n) y con h admisible es completa y óptima 2.

o sea mediante la función de evaluación f introducida anteriormente. CARACTERIZACIÓN DEL ALGORITMO IDA*. 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.1. El tratamiento de esa información se realiza de igual forma que en el algoritmo del A*. Cada vez que se visita todo el grafo de búsqueda contenido dentro de ese límite sin hallar la solución entonces. La única diferencia entre ambos algoritmos estriba en que mientras el DFID se basa en la profundidad para cada una de sus iteraciones. excepto en lo referente al coste espacial. y SMA* (Simplified memory A*). por el menor valor del coste de los nodos que tenían un valor superior en la anterior iteración. Ese nuevo límite viene dado por el menor de los límites de corte. Características de IDA* ¾ IDA* es un método de búsqueda completo y óptimo. ¾ Este método tiene las mismas ventajas y desventajas que A*. Este algoritmo se considera limitado en profundidad. Es de tipo de algoritmos de búsqueda heurística con limitación de memoria. El IDA* (Iterative-Deepening A*) es al igual que el DFID un algoritmo basado en la profundización iterativa. aunque esta afirmación no sea estrictamente cierta. el IDA se basa en la información heurística que posee para determinar el siguiente límite de la iteración. o sea.3. Los más utilizados son el IDA* (Iterative Deepening A*). ya que al convertir la búsqueda de la solución en un proceso iterativo expandiremos varias veces los mismos nodos. ¾ Esta limitación en el uso de la memoria resulta beneficiosa pero también tiene sus desventajas. 3. . el algoritmo incrementa el límite de coste. 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. ya que dependiendo de las características de los problemas a resolver obtendremos mejores o peores prestaciones. Esto es algo muy a tener en cuenta. 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. 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.

4. Al contrario de éste. el algoritmo expandirá exactamente los mismos nodos que A*. las prestaciones se reducen. . El coste temporal de este algoritmo está muy relacionado con el tamaño de la memoria: Si en ella cabe todo el árbol de búsqueda. ¾ 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). de forma óptima. borrados y reordenamientos en listas de prioridades tiene una menor sobrecarga por nodo. lo que provoca que en cada iteración aumentemos el contorno en sólo uno o dos niveles.¾ En el mejor caso el coste temporal de IDA* puede ser muy similar al de A*. la ruta entre el nodo inicial y el final deberá caber en la memoria disponible. 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 al ser un algoritmo simple y no necesitar de inserciones. CARACTERIZACIÓN DEL ALGORITMO SMA El SMA* (Simplified Memory-bounded A*) aparece en cierta medida debido a los problemas del IDA* en espacios reducidos de memoria. es decir. la implementación de éste resulta muy dificultosa. El uso de más memoria permite mejorar la eficiencia de la búsqueda. delimitando desde un principio el máximo de memoria de la que dispone. expandiendo además pocos nodos en las iteraciones iniciales. aunque deberemos tener en cuenta que para poder obtener la solución óptima. Podemos asociar este caso con el problema del 8-puzzle cuando se usa la heurística de distancias. Esto ocurre en problemas en los que los valores heurísticos son poco acertados. En este caso podemos considerar que el coste espacial es constante. en cada iteración se profundiza únicamente un nivel más en el árbol. El algoritmo SMA* hace un uso más inteligente del espacio de almacenamiento y tiene la ventaja de usar toda la memoria de que disponga. Si no es así. ya que entonces se realizarán pocas iteraciones. e incluso menor. el SMA* realiza un control estricto de la memoria. En cambio.

Para llegar a estas conclusiones nos hemos basado en la resolución de 3 tableros diferentes de 8-puzzle con una complejidad de 6.5. que en nuestras pruebas no ha demostrado ser excesivamente eficaz. Estudio de la resolución de diferentes configuraciones del 8-puzzle con diferentes heurísticas En la implementación del 8-Puzzle hemos creado 4 archivos diferentes en cada uno de los cuales se ha utilizado una heurística diferente: ¾ H1 ó Suma total de fichas descolocadas: heurística minorante fácil de calcular pero con resultados que distan mucho de ser óptimos.1. 8-Puzzle de 6 movimientos La primera matriz utilizada ha sido la siguiente (el 0 representa la casilla vacía): 1 6 3 2 0 4 . En todas ella se pretende llegar a la misma matriz solución: 1 8 7 2 0 6 3 4 5 5. ¾ H=H2+2*H3: heurística no minorante que ha demostrado ser la mas eficaz de la cuatro utilizadas. En problemas cortos es la que mejores resultados ha obtenido. ¾ H3 ó Suma de secuencias: heurística no minorante. en tableros con una complejidad elevada (18 movimientos) ha sido capaz de resolver los problemas un numero mucho mas pequeño de nodos. puesto que aunque en tableros de 8-puzzle con una configuración mas simple (con menor número de movimientos) se ha visto superada por la H2. JUEGO DEL 8-PUZZLE 5.2. 12 y 18 movimientos. ¾ H2 ó Suma de distancias de Manhatan: heurística minorante bastante efectiva.

Abajo. los cuales son descritos a continuación: 1 6 8 3 2 7 0 4 5 1 6 8 0 2 7 3 4 5 1 6 8 2 0 7 3 4 5 1 0 8 2 6 7 3 4 5 1 8 0 2 6 7 3 4 5 1 8 7 2 6 0 3 4 5 1 8 7 2 0 6 3 4 5 Para llegar ha este resultado se han tenido que efectuar los 6 movimientos que acabamos de describir y que enumeramos a continuación: Izquierda. pero la diferencia principal radica en le cantidad de recursos que necesitan para resolver el problema. Izquierda. Vamos a mostrar las principales diferencias obtenidas en la resolución del problema con las diferentes heurísticas: . Arriba Todas las heurísticas utilizadas llegan a una solución optima. Derecha. Abajo.8 7 5 Para resolver esta matriz de forma óptima se deben realizar 6 movimientos.

no vamos a escribir las configuraciones de las matrices en la resolución de este problema pues resultaría muy tedioso. 8-Puzzle de 18 movimientos Para la prueba de 18 movimientos hemos utilizado la siguiente matriz: . 8-Puzzle de 12 movimientos Para la prueba de 12 movimientos hemos utilizado la siguiente matriz: 6 8 0 1 3 7 4 2 5 Para este ejercicio y para el de 18 movimientos. pero si que daremos una descripción optima de los pasos a seguir Una solución óptima encontrada para la resolución de esta matriz de forma óptima es: Arriba. Arriba. Abajo. Derecha. Abajo. Derecha. Si hacemos una comparación entre las diferentes heurísticas podremos comprobar que: H1 = 6 H2 = 10 H3 = 15 H= H2+2H3 = 40 Nº de movimientos = 12 Nº de movimientos = 12 Nº de movimientos = 12 Nº de movimientos = 12 Nodos generados = 917 Nodos generados = 38 Nodos generados = 101 Nodos generados = 40 5. Derecha. Abajo.3.H1 = 5 H2 = 6 H3 = 11 H= H2+2H3 = 28 Nº de movimientos = 6 Nº de movimientos = 6 Nº de movimientos = 6 Nº de movimientos = 6 Nodos generados = 21 Nodos generados = 18 Nodos generados = 20 Nodos generados = 18 5.4. Izquierda. Arriba. Arriba. Izquierda.

Arriba.5. Abajo. . Abajo. Derecha. Abajo. Derecha. Abajo. Con las otras 2 heurísticas utilizadas el número de nodos utilizados es infinitamente mayor a estas 2 últimas. Izquierda. y no se obtiene ninguna solución. tanto que es capaz de desbordar la memoria del ordenador impidiéndose así llegar a solución alguna. Si hacemos una comparación entre las diferentes heurísticas podremos comprobar que: H1 = 5 H2 = 10 H3 = 14 H= H2+2H3 = 38 Nº de movimientos = ¿? Nº de movimientos = 18 Nº de movimientos = ¿? Nº de movimientos = 18 Nodos generados = ¿? Nodos generados = 5421 Nodos generados = ¿? Nodos generados = 4709 En la resolución de este problema tanto H1 como H3 provocan un desbordamiento de memoria debido al alto grado de recursos utilizados. Así podemos ver que la utilización de nodos resolviendo un problema de 18 movimientos por medio de la heurística de Mahattan asciende a 5421. mientras que con la utilización de una heurística H2+2H3 el numero de nodos se reduce a 4709. Izquierda. Conclusiones de las pruebas de 8-puzzle En problemas de complejidad pequeña (numero reducido de movimientos para resolver el problema) la heurística más eficaz es la de Manhattan.6 8 7 3 0 5 1 4 2 Una solución óptima encontrada para la resolución de esta matriz de forma óptima es: Arriba. Izquierda. ya que es capaz de resolver el problema con menor consumo de memoria (utiliza menos nodos). A medida que la que la complejidad del problema va aumentando se va comprobando como la utilización de nodos por parte de las diferentes heurísticas va aumentando en grandes cantidades. Abajo. Derecha. Arriba. Derecha. Arriba. Arriba. Izquierda. 5.

no solo por la menor utilización de nodos. Hay que asegurarse que la secuencia de transformaciones sea sistemática. Una posibilidad es intentar lograr una solución de manera incremental. Posibles candidatos de heurísticas: 1. El usuario sólo deberá introducir la primera reina en la columna que desee de la primera fila. una vez que violamos una restricción no podemos seguir añadiendo más reinas para rectificarla. Colocar reinas que dejen el mayor número de casillas sin atacar. Por ejemplo el hecho de que deba de haber sólo una reina por columna nos reduce el número de alternativas a menos de 8 en cada renglón. para no generar configuraciones repetidas ni excluir configuraciones deseables. JUEGO DE LAS 8-REINAS El juego consiste en colocar 8 reinas en un tablero de ajedrez sin que se ataquen. es decir. el programa introducirá las siguientes reinas dependiendo de la heurística elegida. 2. sino porque a la larga es la única capaz de resolver problemas de este tipo con una complejidad muy elevada utilizando al hacerlo la menor cantidad de recursos posibles. Una forma de sistematizar la búsqueda es construyendo más que transformando configuraciones. Sistematizamos la búsqueda para no recuperarnos de restricciones en operaciones futras.De esta forma queda demostrado que la utilización de la heurística H2+2H3 es la más efectiva. 6. Se adjunta la implementación en java del Algoritmo A* del juego 8-puzzle. . Colocar reinas cuyas diagonales amenacen menos casillas En la implementación del algoritmo los números significan lo siguiente: 0= casilla libre 1= reina 2= casilla atacada Se adjunta la implementación en java del Algoritmo A* del juego 8-reinas. acercándose a la meta poco a poco siguiendo una serie de decisiones locales basadas en la información obtenida durante el proceso.

udc.p df 7.fi."Inteligencia Artificial. Elaine Rich. Bibliografía i [Rich.pdf http://www.es/~fdiez/docencia/material/bh.uib. Editorial McGraw-Hill. i [Russell. Segunda edición.. Stuart Russell.aios/~barreiro/iadocen/puzzle898/introalgoritmos.ii.1.angelfire.com/oh4/ohcop/ClaseCap4nu. Peter Norvig.ppt http://dmi.es/~luigi/docencia/2bBusquedainformadayexploracion(es).dc.7. BIBLIOGRAFÍA 7. Internet: i i i i http://www. Editorial Prentice Hall.2.es/~abasolo/intart/2-juegos. 96].html http://www. 94]. (1994). (1996).es/."Inteligencia Artificial".uam. un enfoque moderno".upc.html i http://www.lsi. .. Kevin Knight.

Sign up to vote on this title
UsefulNot useful