P. 1
Algoritmo_A.pdf

Algoritmo_A.pdf

|Views: 4|Likes:
Publicado pormatematricas

More info:

Published by: matematricas on Aug 26, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

08/05/2015

pdf

text

original

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

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

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

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

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

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

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

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

Abajo. Abajo. pero la diferencia principal radica en le cantidad de recursos que necesitan para resolver el problema. Izquierda. Derecha.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: . 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. Arriba Todas las heurísticas utilizadas llegan a una solución optima.

8-Puzzle de 18 movimientos Para la prueba de 18 movimientos hemos utilizado la siguiente matriz: . Abajo. Izquierda.4. no vamos a escribir las configuraciones de las matrices en la resolución de este problema pues resultaría muy tedioso. 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. Derecha. 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. Derecha.3. Arriba. Abajo. 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.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. Arriba. Izquierda. Abajo. Derecha.

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

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

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

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->