You are on page 1of 5

Scientia et Technica Ao MMXVI, No 49, Junio de 2016. Universidad Tecnolgica de Pereira.

ISSN 0122-1701 1

Solucin de 8-Puzzle utilizando algoritmos de


bsqueda en estructuras de datos
Solution of 8 - Puzzle, search algorithms using data structures
Autor 1: Diego Ramrez Gmez, drg_1995_@utp.edu.co Autor 2: Cesar Morales Gmez, cesarmg@utp.edu.co
Ingeniera de Sistemas y Computacin, Universidad Tecnolgica de Pereira

Resumen Un 8-Puzzle es un juego simple raz. Un nodo que no tiene hijos se conoce como hoja. Los
que consiste en una cuadrcula de 3 x 3 dems nodos (tienen padre y uno o varios hijos) se les conoce
(que contiene 9 cuadrados). Una de las como rama.
plazas est vaca.
El objetivo del juego es mover a las casillas
en torno a diferentes posiciones y tener los
nmeros que aparecen en el " estado final "
. Este documento se orienta a dar una
breve introduccin, hacia lo que es la
solucin de este problema utilizando
algoritmos de bsqueda implementados a
estructuras de datos como grafos y arboles.

Palabras clave Estructura, 8-puzle,cuadricula,rbol,grafo

Abstract An 8 puzzle is a simple game consisting of a 3 x 3 grid


(containing 9 squares). One of the squares is empty.
The object is to move to squares around into different positions
and having the numbers displayed in the "goal state".
The image to the left can be thought of as an unsolved initial
state of the "3 x 3" 8 puzzle. Usos comunes de los rboles son:

Key Word Structure, 8-puzzle , grid , tree, graph Representacin de datos jerrquicos.
Como ayuda para realizar bsquedas en conjuntos de
I. INTRODUCCIN datos (ver tambin: algoritmos de bsqueda en
rboles).
Este documento trata de dar una breve introduccin al lector
acerca de una de las posibles soluciones que tiene este buen
juego, apoyndonos en la cantidad de algoritmos diseados
para bsquedas en estructuras de datos como grafos y arboles
Estructura de datos Grafo
Para abordar ms a fondo lo que es esta implementacin de En matemticas y ciencias de la computacin,
grafos y arboles, tenemos que hablar un poco acerca de un grafo (del griego grafos: dibujo, imagen) es un conjunto de
arboles y grafos en computacin objetos llamados vrtices o nodos unidos por enlaces
llamados aristas o arcos, que permiten representar relaciones
binarias entre elementos de un conjunto.
Estructura de datos rbol
Tpicamente, un grafo se representa grficamente como un
En ciencias de la computacin y en informtica, un rbol es conjunto de puntos (vrtices o nodos) unidos por lneas
una estructura de datos ampliamente usada que imita la forma (aristas).
de un rbol (un conjunto de nodos conectados). Un nodo es la Prcticamente cualquier problema puede representarse
unidad sobre la que se construye el rbol y puede tener cero o mediante un grafo, y su estudio trasciende a las diversas reas
ms nodos hijos conectados a l. Se dice que un de las ciencias exactas y las ciencias sociales.
nodo es padre de un nodo si existe un enlace
desde hasta (en ese caso, tambin decimos que es hijo de ).
Slo puede haber un nico nodo sin padres, que llamaremos
Fecha de Recepcin: (Letra Times New Roman de 8 puntos)
Fecha de Aceptacin: Dejar en blanco
2 Scientia et Technica Ao MMXVI, No 49, Junio de 2016. Universidad Tecnolgica de Pereira. ISSN 0122-
1701

tiempo 0
PARA CADA vrtice u V[G] HACER
SI estado[u] = NO_VISITADO ENTONCES
DFS_Visitar(u,tiempo)
DFS_Visitar(nodo u, int tiempo)
estado[u] VISITADO
tiempo tiempo + 1
d[u] tiempo
PARA CADA v Vecinos[u] HACER
SI estado[v] = NO_VISITADO ENTONCES
padre[v] u
DFS_Visitar(v,tiempo)
II. CONTENIDO estado[u] TERMINADO
tiempo tiempo + 1
Algoritmos de Bsqueda f[u] tiempo
Un algoritmo de bsqueda es aquel que est diseado
para localizar un elemento con ciertas propiedades
dentro de una estructura de datos; por ejemplo, ubicar Pseudocodigo
el registro correspondiente a cierta persona en una base
de datos, o el mejor movimiento en una partida Busqueda en Anchura En Ciencias de la Computacin,
de ajedrez. Bsqueda en anchura (en ingls BFS - Breadth First Search)
es un algoritmo para recorrer o buscar elementos en un grafo
Busqueda en Profundidad: Una Bsqueda en profundidad (usado frecuentemente sobre rboles). Intuitivamente, se
(en ingls DFS o Depth First Search) es un algoritmo que comienza en la raz (eligiendo algn nodo como elemento raz
permite recorrer todos los nodos de un grafo o rbol (teora de en el caso de un grafo) y se exploran todos los vecinos de este
grafos) de manera ordenada, pero no uniforme. Su nodo. A continuacin para cada uno de los vecinos se exploran
funcionamiento consiste en ir expandiendo todos y cada uno sus respectivos vecinos adyacentes, y as hasta que se recorra
de los nodos que va localizando, de forma recurrente, en un todo el rbol.
camino concreto. Cuando ya no quedan ms nodos que visitar
en dicho camino, regresa (Backtracking), de modo que repite Formalmente, BFS es un algoritmo de bsqueda sin
el mismo proceso con cada uno de los hermanos del nodo ya informacin, que expande y examina todos los nodos de un
procesado. rbol sistemticamente para buscar una solucin. El algoritmo
no usa ninguna estrategia heurstica
Anlogamente existe el algoritmo de bsqueda en anchura
(BFS o Breadth First Search). Pseudocodigo para Busqueda en Anchura

Pseudocdigo para Busqueda en Profundidad


implementado en grafos
BFS(grafo G, nodo_fuente s)
{
DFS(grafo G) // recorremos todos los vrtices del grafo inicializndolos
PARA CADA vrtice u V[G] HACER a NO_VISITADO,
estado[u] NO_VISITADO // distancia INFINITA y padre de cada nodo NULL
padre[u] NULO for u V[G] do
{
Scientia et Technica Ao MMXVI, No 49, Junio de 2016. Universidad Tecnolgica de Pereira. ISSN 0122-1701 3

individuales alrededor de la rejilla como se describe


anteriormente .
estado[u] = NO_VISITADO;
distancia[u] = INFINITO; /* distancia infinita si el nodo
no es alcanzable */
padre[u] = NULL;
}
estado[s] = VISITADO;
distancia[s] = 0;
padre[s] = NULL;
CrearCola(Q); /* nos aseguramos que la cola est vaca */
Encolar(Q, s);
while !vacia(Q) do
{
// extraemos el nodo u de la cola Q y exploramos todos
sus nodos adyacentes
u = extraer(Q);
for v adyacencia[u] do
{
if estado[v] == NO_VISITADO then
{
estado[v] = VISITADO;
distancia[v] = distancia[u] + 1;
padre[v] = u;
Encolar(Q, v);
}
}
}
Solucin del 8-puzle utilizando Arboles
}
Una de las soluciones que implementamos para la solucin de
este problema fue apoyndonos en la implementacin de
8-Puzle: rboles, donde cada nodo del rbol es una matriz donde se
El 8 - puzzle es una versin ms pequea de la ligeramente representa cada ficha en el tablero de 3x3, al mover una ficha
mejor conocido 15 - rompecabezas. El rompecabezas consiste a un espacio vacio.
en un rea dividida en una cuadrcula , de 3 por 3 para el 8 -
puzzle, 4 por 4 para el 15 - rompecabezas. En cada cuadrado El algoritmo empieza con una matriz inicial que es a la que se
de la cuadrcula es una baldosa , excepto en un cuadrado que le est buscando solucin, luego se le ensea al programa el
permanece vaca. Por lo tanto , hay ocho baldosas en el 8 - estado final al que se desea llegar, el algoritmo iniciara una
puzzle y 15 baldosas en el 15 - rompecabezas. Una baldosa bsqueda visitando cada nodo y comparando la matriz que
que est al lado del cuadrado de la cuadrcula vaca se puede hay en este nodo con la matriz a la que deseamos llegar
mover en el espacio vaco , dejando a su posicin previa a su
vez vaco . Azulejos estn numerados , 1 a 8 para el 8 - puzzle,
de manera que cada pieza puede ser identificada . El objetivo
del puzzle es lograr una configuracin dada de los azulejos de
una configuracin dada ( diferente ) deslizando las baldosas

____________________________
1.
4 Scientia et Technica Ao MMXVI, No 49, Junio de 2016. Universidad Tecnolgica de Pereira. ISSN 0122-
1701

Como todo algoritmo de bsqueda en amplitud, A* es un


algoritmo completo: en caso de existir una solucin, siempre
dar con ella.
Para garantizar la optimizacin del algoritmo, la funcin debe
ser heurstica admisible, esto es, que no sobrestime el coste
real de alcanzar el nodo objetivo.
De no cumplirse dicha condicin, el algoritmo pasa a
denominarse simplemente A, y a pesar de seguir siendo
completo, no se asegura que el resultado obtenido sea el
camino de coste mnimo. Asimismo, si garantizamos

Pseudocodigo de este Algoritmo de Bsqueda


// coste del camino hasta .
Al encontrar una matriz de un nodo que coincida con la matriz
deseada, devolver todos los padres de este nodo, indicando
cada nodo padre como un paso a seguir a la solucin del caso . = . perteneciente a ()
problema si g(.) < g(.) entonces // (-----)

Solucin del 8-puzle utilizando Grafos // nos quedamos con el camino de menor coste
.:= MEJORNODO
Nos dimos cuenta que la complejidad del algoritmo
anterior era bastante alta, y el tiempo estimado era actualizar g(.) y f'(.)
demasiado alto tambin, lo que nos llev a investigar e propagar g a . de .
indagar, donde nos dimos cuenta que la complejidad de
la solucin de este problema se reduca eliminar .
considerablemente utilizando grafos, y algoritmos de aadir . a ._MEJORNODO
bsqueda entre grafos.
caso . = . perteneciente a )-----(
Algoritmo de Busqueda A* en grafos si g(.) < g(.) entonces

El algoritmo de bsqueda A* (pronunciado "A asterisco" o "A // nos quedamos con el camino de menor coste
estrella") se clasifica dentro de los algoritmos de bsqueda en .:= MEJORNODO
grafos. Presentado por primera vez en 1968 por Peter E. Hart,
Nils J. Nilsson y Bertram Raphael, el algoritmo A* encuentra, actualizar g(.) y f'(.)
siempre y cuando se cumplan unas determinadas condiciones, eliminar .
el camino de menor coste entre un nodo origen y uno objetivo.
El problema de algunos algoritmos de bsqueda en grafos aadir . a ._MEJORNODO
informados, como puede ser el algoritmo voraz, es que se caso . no estaba en ).( ni (.)
guan en exclusiva por la funcin heurstica, la cual puede no
indicar el camino de coste ms bajo, o por el coste real de aadir . a ).(
desplazarse de un nodo a otro (como los algoritmos de aadir . a ._MEJORNODO
escalada), pudindose dar el caso de que sea necesario realizar
un movimiento de coste mayor para alcanzar la solucin. Es f'(.) := g(.) + h'(.)
por ello bastante intuitivo el hecho de que un buen algoritmo
de bsqueda informada debera tener en cuenta ambos
factores, el valor heurstico de los nodos y el coste real del III. CONCLUSIONES
recorrido.
Scientia et Technica Ao MMXVI, No 49, Junio de 2016. Universidad Tecnolgica de Pereira. ISSN 0122-1701 5

Aunque estos no sean los algoritmos ms eficientes en la


resolucin de este problema, si es una versin bastante
funcional y nos da un solucin aceptable,

RECOMENDACIONES

Se recomienda que para la utilizacin de este cdigo se debe


usar la librera( simpleai), de Python, donde se implementan
todos los algoritmos propuestos en el libro AIMA de Stuart J.
Russell y Peter Norvig

REFERENCIAS

Referencias de libros:
[1] Artificial Intelligence: A Modern Approach (AIMA) de
Stuart J. Russell y Peter Norvig
[2] Inteligencia artificial con aplicaciones a la ingeniera.
Pedro Ponce Cruz
[3] Inteligencia Artificial Resolucin de Problemas
Algoritmos de Bsqueda de Javier Bejar

____________________________
1.