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

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

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. 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. la búsqueda de coste uniforme minimiza el coste del camino hasta el nodo. es decir. Afortunadamente. Los algoritmos de búsqueda informada son muy útiles en problemas donde lo que importa es el estado de solución en sí mismo. Desafortunadamente. El uso de este tipo de algoritmo. INTRODUCCIÓN 1. combinando las dos funciones de evaluación simplemente sumándolas: f(n) = g(n) + h(n). al minimizar el coste estimado hasta el objetivo. Un primer contacto con éstos algoritmos es el siguiente: “búsqueda primero el mejor”. 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. Otro algoritmo importante es el “búsqueda voraz primero el mejor” que expande el nodo más cercano al objetivo. no el camino. expande para cada conjunto de sucesores aquel cuyo camino desde el nodo raíz tenga un menor coste. . La evaluación mide la distancia al objetivo. no es ni óptimo ni completo. que es un caso particular del algoritmo general de “búsqueda de árboles” o “búsqueda de grafos”. f(n). g(n) . debido a que éstos últimos pueden encontrar soluciones a problemas generando sistemáticamente nuevos estados y probándolos con el objetivo.1. Un algoritmo de búsqueda por el mejor nodo combina las características de los métodos en anchura y en profundidad. Por otra parte. Utilizan métodos inspirados en la física estadística (temple simulado) y la biología evolutiva (algoritmos genéticos). 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. disminuye considerablemente el coste de la búsqueda. CARACTERIZACIÓN DEL ALGORITMO A*. podemos hacer eso exactamente.1. Este es un algoritmo óptimo y completo. 2. Sería bueno poder combinar estas dos estrategias para conseguir las ventajas de ambos.

f(n) es el coste estimado de la solución de menor coste que atraviesa el nodo n. Optimalidad de A* Definir f* . Puesto que n no ha sido elegido para su expansión en su ruta hacia s’. de acuerdo con la suposición previa (en el otro caso. el coste espacial lo convierta en un problema intratable. se sigue que: f(n) = g(n) + h(n) ³ f(s') = g(s') + h(s') = g(s') . antes de seleccionar el estado meta. La primera solución encontrada debe ser la óptima.1. Si se intenta encontrar la solución de menor coste. Prueba: Sea s el nodo meta de mínimo costo. Se puede comprobar que es completa y óptima. Si h(n) < h*(n) para todo nodo n. dando una simple restricción de la función h. s ya habría sido elegido como el nodo meta). Teorema: Sea h*(n) el costo real desde n hasta la meta. donde g(s)<g(s’) Sea n un nodo sin expandir en la ruta desde el nodo inicio y el nodo meta óptimo s. para los cuales f(n) = f*. Lo bueno de esta estrategia. a pesar de que el problema tenga un coste temporal relativamente asequible. Esto puede propiciar que. La restricción es escoger una función h que nunca sobreestime el coste para alcanzar el objetivo. entonces A* siempre va a encontrar un nodo meta óptimo. 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). es razonable intentar primero el nodo con el menor valor de f. A este algoritmo se le conoce con el nombre de A*. Una función h de este tipo es una heurística admisible. es que es más que razonable. 2.Ya que g(n) proporciona el coste del camino desde el nodo de inicio hasta el nodo n. Notar que ese nodo sin expandir necesariamente existe.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”. y h(n) es el coste estimado del camino de menos coste desde n hasta el objetivo. 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. Sea que A* seleccione un nodo meta subóptimo s’.

Si h es admisible.con f(n) y con h admisible es completa y óptima 2. el error es a lo menos proporcional al costo de la ruta ¾ El crecimiento exponencial satura a cualquier computadora .3. 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. 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.2. 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* . que no expanda todos los nodos en los contornos existentes entre el contorno del inicio y el de la meta. 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.Dado que h es admisible.que el real. Completitud de A* A* expande nodos en el orden de un creciente f. ¾ No hay otro algoritmo que expanda menos nodos que A* ¾ Cualquier algoritmo. g(n) + h*(n) ³ g(n) + h(n) = f(n).

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

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

Para llegar a estas conclusiones nos hemos basado en la resolución de 3 tableros diferentes de 8-puzzle con una complejidad de 6. ¾ H3 ó Suma de secuencias: heurística no minorante.5. JUEGO DEL 8-PUZZLE 5. En problemas cortos es la que mejores resultados ha obtenido. 12 y 18 movimientos. ¾ H2 ó Suma de distancias de Manhatan: heurística minorante bastante efectiva. 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. que en nuestras pruebas no ha demostrado ser excesivamente eficaz. 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. 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 . 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.2.1. en tableros con una complejidad elevada (18 movimientos) ha sido capaz de resolver los problemas un numero mucho mas pequeño de nodos.

Abajo. pero la diferencia principal radica en le cantidad de recursos que necesitan para resolver el problema. Arriba Todas las heurísticas utilizadas llegan a una solución optima. Derecha. Izquierda.8 7 5 Para resolver esta matriz de forma óptima se deben realizar 6 movimientos. Vamos a mostrar las principales diferencias obtenidas en la resolución del problema con las diferentes heurísticas: . 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 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.4. Derecha. 8-Puzzle de 18 movimientos Para la prueba de 18 movimientos hemos utilizado la siguiente matriz: . Derecha. Abajo.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. 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. Arriba. Izquierda. Derecha. 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. Arriba. Abajo. no vamos a escribir las configuraciones de las matrices en la resolución de este problema pues resultaría muy tedioso. Arriba. Abajo.3. Izquierda.

Derecha. Izquierda.5. 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. ya que es capaz de resolver el problema con menor consumo de memoria (utiliza menos nodos). Arriba. Izquierda. Derecha. Abajo. 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. Derecha. 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. y no se obtiene ninguna solución. Abajo. tanto que es capaz de desbordar la memoria del ordenador impidiéndose así llegar a solución alguna. Abajo. mientras que con la utilización de una heurística H2+2H3 el numero de nodos se reduce a 4709. Abajo. Arriba. 5.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. Con las otras 2 heurísticas utilizadas el número de nodos utilizados es infinitamente mayor a estas 2 últimas. 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. Arriba. Arriba. Abajo. Izquierda. Derecha. . Izquierda.

6. Hay que asegurarse que la secuencia de transformaciones sea sistemática.De esta forma queda demostrado que la utilización de la heurística H2+2H3 es la más efectiva. una vez que violamos una restricción no podemos seguir añadiendo más reinas para rectificarla. Posibles candidatos de heurísticas: 1. 2. es decir. . 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. Una posibilidad es intentar lograr una solución de manera incremental. 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. Colocar reinas que dejen el mayor número de casillas sin atacar. el programa introducirá las siguientes reinas dependiendo de la heurística elegida. El usuario sólo deberá introducir la primera reina en la columna que desee de la primera fila. para no generar configuraciones repetidas ni excluir configuraciones deseables. 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. Sistematizamos la búsqueda para no recuperarnos de restricciones en operaciones futras. Se adjunta la implementación en java del Algoritmo A* del juego 8-puzzle. acercándose a la meta poco a poco siguiendo una serie de decisiones locales basadas en la información obtenida durante el proceso. Una forma de sistematizar la búsqueda es construyendo más que transformando configuraciones. JUEGO DE LAS 8-REINAS El juego consiste en colocar 8 reinas en un tablero de ajedrez sin que se ataquen. no solo por la menor utilización de nodos.

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

Sign up to vote on this title
UsefulNot useful