problema 8 puzzle

Post on 04-Aug-2015

29 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Problema del 8 PuzzleArámburo Cabada Joseph David

Chávez Sierra Juan PaúlHernández Castaños Gabriela

Leyva Bujons Iván Alberto

Planteamiento del problema.

• Se tiene un puzzle de 8 números los cuales están colocados aleatoriamente en un espacio de 3 x 3 y se desean ordenar de la siguiente manera:

1 4 7

2 5 8

3 6

Condiciones del problema

• Se debe generar un nodo inicial de forma aleatoria.• Se debe utilizar el método de busca informado A*.• Debe evaluarse todas las posibles heurísticas para seleccionar la

mejor.• Al encontrar el nodo final se debe mostrar la ruta recorrida hacia la

solución.

Heurísticas evaluadas

• Número de fichas desacomodadas.• Distancia Manhattan total.

Número de fichas desacomodadas

h=4

h=3

h=2 h=4

Tres fichas desacomodadas

Cuatro fichas desacomodadas

Dos fichas desacomodadas

cuatro fichas desacomodadas

Distancia Manhattan total

h=3

h=2h=4 h=4

0+0+0+1+1+0+0+1=3

0+0+0+1+1+0+1+1=4 0+0+0+0+1+0+0+1=2 1+0+0+1+1+0+0+1=4

Resultado de la evaluación de la heurística.• Se usara el método de búsqueda informado A*.• La heurística que se usara es Distancia Manhattan Total.• Estructuras de datos que se usaran:• Nodos cerrados: pila.• Nodos abiertos: cola con prioridad.

Entorno de desarrollo seleccionado

• Lenguaje : Java• Se escogió resolver el problema con este lenguaje con el que estamos mas

familiarizados a través de su interfaz de consola.

• IDE: Netbeans v8.0

Implementación

• Se desarrollo una estructura orientada a objetos con la finalidad de una legible comprensión por parte de usuarios terceros. Cada clase realiza una tarea especifica que es usada en la clase principal.

Las clases

• A continuación se muestran las clases desarroladas:

Class GeneradorDeNodoInicial

• Consiste en almacenar los números del 1 al 9 en un arreglo para luego extraerlos de forma aleatoria a través de su numero de posición. La posición seleccionada será eliminada.

Class BuscarCoordenadas

Consiste en visitar todas las casillas de la matriz del nodo actual con el objetivo de saber la localización del espacio representado por el numero 9 y asi poder realizar los siguientes movimientos.

Class CompararNodos

• Consiste en hacer una comparación entre el nodo actual y el nodo meta. Se toma cada elemento de la matriz y se compara con su contraparte en la matriz objetivo. Si surge una diferencia el método se detiene y devuelve false, de lo contrario devolvería true y finaliza la búsqueda.

Class CalcularManhattan

• Consiste en la suma acumulada de las distancias en X y Y de cada ficha desde su estado actual hasta la meta. El método devuelve el valor acumulado el cual se guardara en el campo h del nodo.

Class MoverFicha

• Consiste en realizar el intercambio del elemento con el numero 9 que representa el espacio vacío con alguna de su ficha contiguas a la derecha, abajo, izquierda o arriba según sea permitido. El método realiza el movimiento o en su defecto un nulo si no se puede mover porque esta contigua al limite.

Class NodaCerrado

• Clase que nos sirve para generar objetos tipo NodoCerrado para agregarlos a la cola de cerrados.

Class NodoFrontera

• Clase que nos sirve para crear objetos de tipo NodoFrontera que serian los nodo abierto o frontera que están pendientes por visitar.

Class BuscarCerrados

• Esta clase realiza una búsqueda en la cola de nodos cerrados comparándolos con el nodo actual. La clase devuelve un false de no encontrarse, de lo contrario devuelve un true.

Class BusquedaFronteras

• Esta clase realiza una búsqueda en la cola de nodos frontera comparándolos con el actual que resulta del ordenamiento por prioridad. El método devuelve un true de encontrarse el nodo o en su defecto devuelve un false.

Class BusquedaPadre

• Esta clase realiza una búsqueda a través de los identificadores de los nodos para encontrar el padre del nodo actual. El método devuelve el identificados del padre o de lo contrario devuelve un nulo.

Class ImprimirNodo

• Este método imprime los nodos que representan el camino desde el nodo inicial al nodo meta.

Demostración del Código

• A continuación se hace una demostración del código desarrollado en la consola de NetBeans.

Gracias!

• Fin de la presentación.

top related