Professional Documents
Culture Documents
Reporte Examen1
Solucin de Puzzle 8 utilizando algoritmo A*
Materia: Inteligencia Artificial Profesor: Dr. Alvarado Magaa Juan Paulo Nombre: Renteria Cuevas Roberto Alonso Fecha de entrega: 23 de marzo del 2012
Para definir la estructura de nuestro juego, creamos una serie de nodos los cuales estarn conectados con otros nodos para formar la siguiente estructura:
Algoritmo:
Para resolver el problema se utiliza el algoritmo A* este es uno de los algoritmo ms utilizados en inteligencia artificial para la bsqueda de caminos. Este Algoritmo se conoce como A* y se lee A estrella. El Algoritmo A* desciende del algoritmo de Dijkstra. Es un algoritmo eficiente y nos garantiza la ruta ms corta o la menos costosa entre 2 nodos, siempre y cuando exista.
Pseudocodigo de A*
ABIERTOS := [INICIAL] //inicializacin CERRADOS := [] f'(INICIAL) := h'(INICIAL) repetir si ABIERTOS = [] entonces FALLO si no // quedan nodos extraer MEJORNODO de ABIERTOS con f' mnima // cola de prioridad mover MEJORNODO de ABIERTOS a CERRADOS si MEJORNODO contiene estado_objetivo entonces SOLUCION_ENCONTRADA := TRUE si no generar SUCESORES de MEJORNODO para cada SUCESOR hacer TRATAR_SUCESOR hasta SOLUCION_ENCONTRADA o FALLO
/** * Este metodo calcula la heuristica que tiene el estado recibido. * F(n)= g(n)+h(n) * la heuristica que se utilizo es la siguiente: * valHeuristico = H1 + H2*10 + H3*100 * * DONDE: * H1= nodos que faltan de acomodar. * H2= Distancia Manhatan del nodo que queremos acomodar hasta el nodo en la posicion destino. * H3= Distancia Manhatan del nodo vacio "HUECO" hasta el nodo en la posicion destino. * * * entre menor sea el valHeuristico se esta mas serca de la solucion. */ public double getHeuristica(Estado e, int proximoOrd) { double h = 0, h1 = 0, h2 = 0, h3 = 0; Nodo nodoProximoOrdenar = null, nodoDestino = null; //calculamos la cantidad de nodos mal posicionados. h1 = e.getNoPocisionados(); nodoProximoOrdenar = e.getCasillas().get(e.getValIndex(proximoOrd)); nodoDestino = e.getCasillas().get(e.getPosDestino(proximoOrd)); //obtenemos la distancia manhatan del nodo que vamos a acomodar al nodo Destino. h2 = nodoProximoOrdenar.getDistancia(nodoDestino); //obtenemos la distancia manhatan del nodo HUECO al nodo Destino. h3 = e.getHueco().getDistancia(nodoDestino); //calculamos el valor de la heuristica h = h1 + h2 * 10 + h3 * 100; return h; } }
Heuristica:
La heurstica que se utilizo es la siguiente: valHeuristico = H1 + H2*10 + H3*100 DONDE: H1= nodos que faltan de acomodar. H2= Distancia Manhattan del nodo que queremos acomodar hasta el nodo en la posicin destino. H3= Distancia Manhattan del nodo vacio "HUECO" hasta el nodo en la posicin destino. Entre menor sea el valHeuristico se esta mas cerca de la solucin.
RESULTADO