TP Algoritmos 2

22
2014 Trabajo Practico Especial ALGORITMOS 2 EZEQUIEL DESAEGER – JOHNNY BRYAN COTRINA ILLESCAS Grupo 46 Ayudante : Menchón, Martín otmail.com - [email protected]

description

tp algoritmos 2

Transcript of TP Algoritmos 2

Trabajo Practico Especial

PRESENTACIN

El objetivo del trabajo es implementar diversos algoritmos de bsqueda que permitan resolver los laberintos propuestos por el juego Mummy Maze. El juego est compuesto de una serie de escenarios a travs de los cuales se debe guiar al explorador hasta la salida de cada uno de ellos. Cada escenario contiene paredes que constituyen obstculos para el movimiento, as como enemigos (momias y escorpiones) que intentaran evitar que el explorador llegue a la salida del laberinto.Para orientar la bsqueda de la solucin, implementaremos algoritmos de bsqueda heurstica, ya que su objetivo es reducir el tiempo de proceso al orientar la exploracin de los estados.La finalidad del trabajo es buscar interiorizarnos con el funcionamiento de las bsquedas por fuerza bruta y egosta, as como su implementacin. Explicado el objetivo del trabajo, procedemos con el cdigo del programa.

algoritmo DFS

ES un algoritmo empleado para recorrer nodos (en nuestro caso estados de juego) expandiendo por niveles (en nuestro caso los niveles corresponden a las acciones posibles del explorador). El algoritmo avanza recursivamente por una rama hasta que llega a un estado donde pierde el juego y regresa hacia atrs; o si llega a un estado ganador y se termina. La principal desventaja que tiene son los largos caminos que prueba por fuerza bruta hasta que aleatoriamente llega a la salida. Aclaramos que todos los escenarios dados tienen solucin.Si bien prueba aleatoriamente, podramos decir que hace un buen uso de memoria respecto al bfs cuando los escenarios son muy grandes, ya que las soluciones no son de tanta calidad como en este ltimo pero las encuentra probando menos caminos.La forma ms intuitiva de hacer este algoritmo es de forma recursiva, porque tiene que avanzar por una rama y si pierde retrocede y sigue con el siguiente estado hijo. Grficamente trabaja as:Dado un rbol

Hace una bsqueda por nivel de la siguiente manera:

Implementacin:bool dfs (GameSimulator & sim, unsigned int & depth, list & solution){ if (sim.isGameOver()) { if (sim.getGameOverResult() == GameOverRule::WIN) { cout aprox.G_n = 0; nodo_padre->aprox.F_n = nodo_padre->aprox.H_n + nodo_padre->aprox.G_n; lista_primera.push_front(nodo_padre); while ( !lista_primera.empty() ){ nodo_padre = lista_primera.front(); insertar_ordenado(lista_segunda,nodo_padre); lista_primera.pop_front(); sim.setState(nodo_padre->estado); if (sim.isGameOver()) { if (sim.getGameOverResult() == GameOverRule::WIN) { while( nodo_padre->anterior != 0 ){ solution.push_front(nodo_padre->accion); cout aprox.F_n anterior; } cout canPerform(*it)){ explorer->performAction(*it); sim.update(); total_visitados++; estado_actual = sim.getCurrentState(); distancia_primero = nodo_padre->distancia_inicial + 1; agregar = false; int num = 1; pos_lista_primera = posicion(lista_primera,estado_actual,num); cout