Problema del 8 Puzzle
Arámburo Cabada Joseph David
Chávez Sierra Juan Paúl
Herná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.

Problema 8 puzzle

  • 1.
    Problema del 8Puzzle Arámburo Cabada Joseph David Chávez Sierra Juan Paúl Hernández Castaños Gabriela Leyva Bujons Iván Alberto
  • 2.
    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
  • 3.
    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.
  • 4.
    Heurísticas evaluadas • Númerode fichas desacomodadas. • Distancia Manhattan total.
  • 5.
    Número de fichasdesacomodadas h=4 h=3 h=2 h=4 Tres fichas desacomodadas Cuatro fichas desacomodadas Dos fichas desacomodadas cuatro fichas desacomodadas
  • 6.
    Distancia Manhattan total h=3 h=2h=4h=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
  • 7.
    Resultado de laevaluació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.
  • 8.
    Entorno de desarrolloseleccionado • 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
  • 9.
    Implementación • Se desarrollouna 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.
  • 10.
    Las clases • Acontinuación se muestran las clases desarroladas:
  • 11.
    Class GeneradorDeNodoInicial • Consisteen 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.
  • 12.
    Class BuscarCoordenadas Consiste envisitar 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.
  • 13.
    Class CompararNodos • Consisteen 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.
  • 14.
    Class CalcularManhattan • Consisteen 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.
  • 15.
    Class MoverFicha • Consisteen 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.
  • 16.
    Class NodaCerrado • Claseque nos sirve para generar objetos tipo NodoCerrado para agregarlos a la cola de cerrados.
  • 17.
    Class NodoFrontera • Claseque nos sirve para crear objetos de tipo NodoFrontera que serian los nodo abierto o frontera que están pendientes por visitar.
  • 18.
    Class BuscarCerrados • Estaclase 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.
  • 19.
    Class BusquedaFronteras • Estaclase 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.
  • 20.
    Class BusquedaPadre • Estaclase 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.
  • 21.
    Class ImprimirNodo • Estemétodo imprime los nodos que representan el camino desde el nodo inicial al nodo meta.
  • 22.
    Demostración del Código •A continuación se hace una demostración del código desarrollado en la consola de NetBeans.
  • 23.
    Gracias! • Fin dela presentación.