T r abaj oCát edr a1-Res ol uc i ónPuz z l e8 Trabajo Cátedra 1 - Resolución Puzzle 8 ACI710-181 – 201
Berrios Carlos, Marticorena Guido, Ortega Yury, Yury, Sanchez Jonathan
Introducción Este trabajo abordará el análisis del problea !uzzle " y el desarrollo de su resoluci#n$ El obj objeti eti%o %o del jue juego go es des desde de un est estado ado inicial inicial de&nido de&nido coo una pos posibl ible e con&guraci#n, lograr llegar a un estado objeti%o de&nido$ 'uego se desordena y la idea básica es o%er las las casillas para alcanzar alcanzar de nue%o el objeti%o$ objeti%o$ Este es un problea clásico (ue perite abordar por edio de b)s(uedas del tipo *En !ro !ro+undid +undidad ad o tipo *En -nchur -nchura, a, tabi.n es utili utilizado zado para odelar algoritos heur/sticos coo puede ser del tipo *0istancia Manhattan$ Siendo el alcance de este trabajo abordar los 1 prieros coo soluciones al problea planteado, sin ebargo creeos rele%ante ostrar c#o ser/a el caso si la soluci#n +uese abordada por un algorito heur/stico dado (ue ellos considerar no so solo lo la so solu luci ci#n #n si sino no la (u (ue e ti tien ene e e eno nos s co cost ste e o es co consi nside dera rada da á ás s e+ecti%a$ !ara el cas caso o del c#digo c#digo Ja% Ja%a a a uti utiliz lizar, ar, será e2 e2pli plicad cado o usa usando ndo una de las soluciones e2plicadas en este trabajo$
Defnición del Problema Parte I: Representación de problemas en el espacio de estados Desarrollo de conceptos c#o descripci#n de la estrategia para abordar el problea y llegar a una soluci#n$
•
• • •
Estado, una posible con&guraci#n de un problea$ Se debe de&nir estado y tabi.n considerar los Espacios de Estados 3posibles con&guraciones4$ 5nicial 6inal 3objeti%o4 Operadores de Cabios de Estados arriba7 8 abajo7 % derecha7 9 iz(uierda7 : En el siguiente diagraa se e2plican los Estados 3inicial y objeti%o4 coo tabi.n los Espacios de Estados coo posibles con&guraciones$ Con ello se e2plica el problea presentado, para ir desde un estado inicial 3;, 1, <4, 3=, >, ?4, 3@, A, "4 el cual usareos para e2plicar la soluci#n (ue perita llegar al objeti%o, en nuestro caso de&nido con la con&guraci#n 3;, 1, <4, 3@, >, ?4, 3A, ", =4$
Parte II: Implementación de los Algoritmos de búsqueda en el espacio de estados Solución del Problema, secuencia operadores de inicial a objeti%o$
•
Soluci#n por B)s(ueda en -nchura 3b)s(ueda no in+orada4
Coo uestra este diagraa +ue necesario analizar ;> nodos en el árbol$ 'a b)s(ueda es de todas las posibilidades$ 'os nodos han sido nuerados por orden de procesaiento, pudiendo apreciar (ue este tipo de rai&caci#n por nodo es &nito y ha sido capaz de encontrar la soluci#n$ Este tipo de b)s(ueda solo es e&ciente si la isa es reducida, si la b)s(ueda +uese ás e2tensa ya no lo ser/a dado (ue consue eoria de anera e2ponencial$ •
Soluci#n por B)s(ueda en !ro+undidad 3b)s(ueda no in+orada4
Coo se puede apreciar en la iagen, es posible entender c#o +unciona la b)s(ueda en pro+undidad, e2plotando en pro+undidad un caino, en el caso de no encontrar la soluci#n %ol%er/a atrás a seguir e2plotando los otros nodos no e2plotados$ En este caso la soluci#n se ha podido encontrar en la e2plotaci#n del prier nodo y coo se puede apreciar para este estado inicial ha sido ejor (ue la b)s(ueda en aplitud$
Esta b)s(ueda es ás copleja por(ue re(uiere realizar el retroceso, teniendo (ue hacerlo en los siguientes casos7 !or(ue se ha llegado al &nal y no hay soluci#n a buscar !or(ue heos llegado a un l/ite de e2plotaci#n en pro+undidad o corte !odeos recoendar este .todo cuando el estado objeti%o a buscar está uy alejado y los recursos de eoria en coputador son escasos$
•
•
B)s(ueda eur/stica 3b)s(ueda in+orada4
Este tipo de b)s(ueda estia el costo de colocar cada casilla o nuer# (ue se encuentre +uera de lugar en su lugar o estado objeti%o respecto de su estado inicial$ En el caso de este trabajo se conoce coo Estado 5nicial a 3;, 1, <4, 3=, >, ?4, 3@, A, "4 y Estado 6inal a 3;, 1, <4, 3@, >, ?4, 3A, ", =4 del !uzzle "$
Estado 6inal
!or lo cual los eleentos +uera de lugar son @, A y "$ Estas tres casillas o n)eros necesitan de un solo o%iiento de lugar para estar en la posici#n objeti%o, por lo (ue la heur/stica calcula un costo de <$ En general, los .todos heur/sticos 3b)s(uedas in+oradas4 son pre+eribles a los .todos no in+orados, en la soluci#n de probleas di+/ciles para los (ue una b)s(ueda e2hausti%a necesitar/a un tiepo deasiado grande$ En probleas de coplejidad pe(uea, esto de&nido, coo un n)ero reducido de o%iientos para resol%er el problea, la heur/stica ás e&caz es la de Manhattan, ya (ue es capaz de resol%erlo con el enor consuo de eoria al utilizar enos nodos$
Parte III: Experimentación con los algoritmos implementados !ara desarrollar una soluci#n al puzle ", se e%aluaron los tres tipos de b)s(ueda, y se deterin# (ue la ejor +ora de construir este prograa es
utilizando la heuristica de Manhattan$ Esto signi&c#, pro+undizar en este concepto para escribir el c#digo ja%a capaz de ejecutarlo correctaente$ El prograa contepla %arios pasos preliinares, partiendo con la de&nici#n del estado &nal 3;,1,<,@,>,?,A,",=4$ 'uego el prograa genera aleatoriaente un estado inicial$ - partir de estas dos de&niciones, el prograa las alacena en una estructura de datos siple, una atriz de <2< para cada estado$ -l utilizar las t.cnicas de e2pansi#n, se utiliza una estructura de atriz de tres diensiones, para alacenar cada una de las posibles e2pansiones$ El cuerpo principal del prograa itera consultando si el estado actual es igual al &nal, de ser as/, el prograa terina, de lo contrario, ejecuta la e2pansi#n y aplica la heuristica encionada para cada e2panci#n$ Con estos datos el prograa deterina cuál es la e2panci#n de enor coste y asigna esta coo nue%o estado actual y %uel%e a iterar$ 6inalente los datos son desplegados en una %entana (ue uestra los i%iientos desde el estado inicial al &nal 3%er c#digo +uente4$
Conclusión Coo resultado a la propuesta establecida al estado &nal, coo ejor soluci#n se aplica heur/stica Manhattan, donde la capacidad de llegar al estado &nal, ediante un estado inicial aleatorio deuestra (ue se aplica correctaente este .todo$ -l t.rino del desarrollo nos periti# in%estigar, entender y aplicar nue%os .todos en la prograaci#n de soluciones, en particular resoluci#n de probleas de coplejidad catalogada coo alta$ !eritiendo as/, descubrir (ue uchos algoritos y heur/stica tienen una sustentaci#n ateática (ue perite obtener una soluci#n #ptia$ Otra conclusi#n iportante es establecer la di+erencia de *inteligencia entre los algoritos encionados, dado (ueD tanto el de anchura coo el de pro+undidad recorren todas las posibles e2pansiones hasta dar con el estado &nal # resultado$ Sin ebargo, el algorito (ue aplica heur/stica de Manhattan introduce un eleento di+erenciador por(ue aporta conociiento del problea ayudando a la resoluci#n del iso$ odo este estudio nos periti# abrir nuestras posibilidades para encontrar distintas +oras de resol%er situaciones coplejas en nuestro undo laboral$
Código uente package puzzle; import java.util.Date; import java.util.Random; /* * Clase principal para la solución * */ public class Puzzle {
// Declaración de variables matriz vacia como contenedora int g! nodos"#pandidos; int$%$% pizarra; Date &ec'a; Random random; // De&inición de cantidad de movimientos m(#imos public static &inal int )+,),"-0)12,) 3 455; /* * Constructor para la solución */ public Puzzle67 { boolean encontrado; int digito! i! j! k; int$% ubicacion 3 ne8 int$9%; &ec'a 3 ne8 Date67; random 3 ne8 Random6&ec'a.getime677; &or 6i 3 5; i : 9; i7 ubicacion$i% 3 5; pizarra 3 ne8 int$<%$<%; g 3 nodos"#pandidos 3 5; // =ucle para de&inir las casillas &or 6i 3 5; i : <; i7 &or 6j 3 5; j : <; j7 pizarra$i%$j% 3 5; // =ucle para asignación de valor 5 ó casilla vacia &or 6i 3 5; i : 9; i7 { encontrado 3 &alse; do { digito 3 random.ne#t,nt697; encontrado 3 ubicacion$digito% 33 5; i& 6encontrado7 ubicacion$digito% 3 4; > 8'ile 6?encontrado7; do { j 3 random.ne#t,nt6<7; k 3 random.ne#t,nt6<7; encontrado 3 pizarra$j%$k% 33 5; i& 6encontrado7 pizarra$j%$k% 3 digito; > 8'ile 6?encontrado7; > > int get-odos"#pandidos67 { return nodos"#pandidos; > /* * Dibuja la matriz de <#< */ int e#pandir6int$%$% cuadrado! int
% cuadradoemporal7 { int b 3 @ 4! columna 3 @ 4! i! j! k! &ila 3 @ 4; &or 6i 3 5; i : A; i7 &or 6j 3 5; j : <; j7 &or 6k 3 5; k : <; k7 cuadradoemporal$i%$j%$k% 3 cuadrado$j%$k%; &or 6i 3 5; i : <; i7 { &or 6j 3 5; j : <; j7 { i& 6cuadrado$i%$j% 33 57 { &ila 3 i; columna 3 j;
break; > > > i& 6&ila 33 5 BB columna 33 57 { cuadradoemporal$5%$5%$5% cuadradoemporal$5%$5%$4% cuadradoemporal$4%$5%$5% cuadradoemporal$4%$4%$5% b 3 ; > else i& 6&ila 33 5 BB columna 33 cuadradoemporal$5%$5%$4% cuadradoemporal$5%$5%$5% cuadradoemporal$4%$5%$4% cuadradoemporal$4%$4%$4% cuadradoemporal$%$5%$4% cuadradoemporal$%$5%$% b 3 <; > else i& 6&ila 33 5 BB columna 33 cuadradoemporal$5%$5%$% cuadradoemporal$5%$5%$4% cuadradoemporal$4%$5%$% cuadradoemporal$4%$4%$% b 3 ; > else i& 6&ila 33 4 BB columna 33 cuadradoemporal$5%$4%$5% cuadradoemporal$5%$5%$5% cuadradoemporal$4%$4%$5% cuadradoemporal$4%$4%$4% cuadradoemporal$%$4%$5% cuadradoemporal$%$%$5% b 3 <; > else i& 6&ila 33 4 BB columna 33 cuadradoemporal$5%$4%$4% cuadradoemporal$5%$4%$5% cuadradoemporal$4%$4%$4% cuadradoemporal$4%$5%$4% cuadradoemporal$%$4%$4% cuadradoemporal$%$4%$% cuadradoemporal$<%$4%$4% cuadradoemporal$<%$%$4% b 3 A; > else i& 6&ila 33 4 BB columna 33 cuadradoemporal$5%$4%$% cuadradoemporal$5%$5%$% cuadradoemporal$4%$4%$% cuadradoemporal$4%$4%$4% cuadradoemporal$%$4%$% cuadradoemporal$%$%$% b 3 <; > else i& 6&ila 33 BB columna 33 cuadradoemporal$5%$%$5% cuadradoemporal$5%$4%$5% cuadradoemporal$4%$%$5% cuadradoemporal$4%$%$4% b 3 ; > else i& 6&ila 33 BB columna 33 cuadradoemporal$5%$%$4% cuadradoemporal$5%$%$5% cuadradoemporal$4%$%$4% cuadradoemporal$4%$4%$4% cuadradoemporal$%$%$4% cuadradoemporal$%$%$% b 3 <;
3 3 3 3
cuadradoemporal$5%$5%$4%; 5; cuadradoemporal$4%$4%$5%; 5;
47 { 3 cuadradoemporal$5%$5%$5%; 3 5; 3 cuadradoemporal$4%$4%$4%; 3 5; 3 cuadradoemporal$%$5%$%; 3 5;
7 { 3 cuadradoemporal$5%$5%$4%; 3 5; 3 cuadradoemporal$4%$4%$%; 3 5;
57 { 3 cuadradoemporal$5%$5%$5%; 3 5; 3 cuadradoemporal$4%$4%$4%; 3 5; 3 cuadradoemporal$%$%$5%; 3 5;
47 { 3 cuadradoemporal$5%$4%$5%; 3 5; 3 cuadradoemporal$4%$5%$4%; 3 5; 3 cuadradoemporal$%$4%$%; 3 5; 3 cuadradoemporal$<%$%$4%; 3 5;
7 { 3 cuadradoemporal$5%$5%$%; 3 5; 3 cuadradoemporal$4%$4%$4%; 3 5; 3 cuadradoemporal$%$%$%; 3 5;
57 { 3 cuadradoemporal$5%$4%$5%; 3 5; 3 cuadradoemporal$4%$%$4%; 3 5;
47 { 3 cuadradoemporal$5%$%$5%; 3 5; 3 cuadradoemporal$4%$4%$4%; 3 5; 3 cuadradoemporal$%$%$%; 3 5;
> else i& 6&ila 33 BB columna 33 cuadradoemporal$5%$%$% cuadradoemporal$5%$%$4% cuadradoemporal$4%$%$% cuadradoemporal$4%$4%$% b 3 ; > return b;
7 { 3 cuadradoemporal$5%$%$4%; 3 5; 3 cuadradoemporal$4%$4%$%; 3 5;
> /* * Retorna el valor de la posición del mtodo distancia)an'attan */ int 'euristica6int$%$% cuadrado7 { return distancia)an'attan6cuadrado7; > /* * )todo Eue mueve las piezas asignando las posiciones */ boolean mover67 { int b! contador! i! j! k! minimo; int$% & 3 ne8 int$A%! indice 3 ne8 int$A%; int
% cuadradoemporal 3 ne8 int$A%$<%$<%; /*i& 6pizarra$5%$5% 33 4 BB pizarra$5%$4% 33 BB pizarra$5%$% 33 < BB pizarra$4%$5% 33 F BB pizarra$4%$4% 33 5 BB pizarra$4%$% 33 A BB pizarra$%$5% 33 G BB pizarra$%$4% 33 H BB pizarra$%$% 33 I7 return true;*/ i& 6pizarra$5%$5% 33 4 BB pizarra$5%$4% 33 BB pizarra$5%$% 33 < BB pizarra$4%$5% 33 A BB pizarra$4%$4% 33 I BB pizarra$4%$% 33 H BB pizarra$%$5% 33 G BB pizarra$%$4% 33 F BB pizarra$%$% 33 57 return true; b 3 e#pandir6pizarra! cuadradoemporal7; &or 6i 3 5; i : b; i7 { &$i% 3 g 'euristica6cuadradoemporal$i%7; &or 6j 3 5; j : <; j7 &or 6k 3 5; k : <; k7 pizarra$j%$k% 3 cuadradoemporal$i%$j%$k%; > minimo 3 &$5%; &or 6i 3 4; i : b; i7 i& 6&$i% : minimo7 minimo 3 &$i%; &or 6contador 3 i 3 5; i : b; i7 i& 6&$i% 33 minimo7 indice$contador% 3 i; i 3 indice$random.ne#t,nt6contador7%; g; nodos"#pandidos 3 b; &or 6j 3 5; j : <; j7 &or 6k 3 5; k : <; k7 pizarra$j%$k% 3 cuadradoemporal$i%$j%$k%; return &alse;
> int &ueraDeJugar6int$%$% cuadrado7 { int i! j! oop 3 5; int$%$% resultadoKinal 3 ne8 int$<%$<%; resultadoKinal$5%$5% resultadoKinal$5%$4% resultadoKinal$5%$% resultadoKinal$4%$5% resultadoKinal$4%$4% resultadoKinal$4%$% resultadoKinal$%$5% resultadoKinal$%$4%
3 3 3 3 3 3 3 3
4; ; <; F; 5; A; G; H;
resultadoKinal$%$% 3 I; &or 6i 3 5; i : <; i7 &or 6j 3 5; j : <; j7 i& 6cuadrado$i%$j% ?3 resultadoKinal$i%$j%7 oop; return oop;
>
/* * )todo Eue veri&ica la posición valor */ int distancia)an'attan6int$%$% cuadrado7 { int distancia)an'attan 3 5; i& 6cuadrado$5%$5% 33 47 distancia)an'attan 3 5; else i& 6cuadrado$5%$5% 33 7 distancia)an'attan 3 4; else i& 6cuadrado$5%$5% 33 <7 distancia)an'attan 3 ; else i& 6cuadrado$5%$5% 33 A7 distancia)an'attan 3 <; else i& 6cuadrado$5%$5% 33 I7 distancia)an'attan 3 A; else i& 6cuadrado$5%$5% 33 H7 distancia)an'attan 3 <; else i& 6cuadrado$5%$5% 33 G7 distancia)an'attan 3 ; else i& 6cuadrado$5%$5% 33 F7 distancia)an'attan 3 4; i& 6cuadrado$5%$4% 33 47 distancia)an'attan 3 4; else i& 6cuadrado$5%$4% 33 7 distancia)an'attan 3 5; else i& 6cuadrado$5%$4% 33 <7 distancia)an'attan 3 4; else i& 6cuadrado$5%$4% 33 A7 distancia)an'attan 3 ; else i& 6cuadrado$5%$4% 33 I7 distancia)an'attan 3 <; else i& 6cuadrado$5%$4% 33 H7 distancia)an'attan 3 ; else i& 6cuadrado$5%$4% 33 G7 distancia)an'attan 3 <; else i& 6cuadrado$5%$4% 33 F7 distancia)an'attan 3 ; i& 6cuadrado$5%$% 33 47 distancia)an'attan 3 ; else i& 6cuadrado$5%$% 33 7 distancia)an'attan 3 4; else i& 6cuadrado$5%$% 33 <7 distancia)an'attan 3 5; else i& 6cuadrado$5%$% 33 A7 distancia)an'attan 3 4; else i& 6cuadrado$5%$% 33 I7 distancia)an'attan 3 ; else i& 6cuadrado$5%$% 33 H7 distancia)an'attan 3 <; else i& 6cuadrado$5%$% 33 G7 distancia)an'attan 3 A; else i& 6cuadrado$5%$% 33 F7 distancia)an'attan 3 <; i& 6cuadrado$4%$5% 33 47 distancia)an'attan 3 4; else i& 6cuadrado$4%$5% 33 7 distancia)an'attan 3 ; else i& 6cuadrado$4%$5% 33 <7 distancia)an'attan 3 <; else i& 6cuadrado$4%$5% 33 A7 distancia)an'attan 3 ;
else i& 6cuadrado$4%$5% 33 I7 distancia)an'attan 3 <; else i& 6cuadrado$4%$5% 33 H7 distancia)an'attan 3 ; else i& 6cuadrado$4%$5% 33 G7 distancia)an'attan 3 4; else i& 6cuadrado$4%$5% 33 F7 distancia)an'attan 3 5; i& 6cuadrado$4%$4% 33 47 distancia)an'attan 3 ; else i& 6cuadrado$4%$4% 33 7 distancia)an'attan 3 4; else i& 6cuadrado$4%$4% 33 <7 distancia)an'attan 3 ; else i& 6cuadrado$4%$4% 33 A7 distancia)an'attan 3 4; else i& 6cuadrado$4%$4% 33 I7 distancia)an'attan 3 ; else i& 6cuadrado$4%$4% 33 H7 distancia)an'attan 3 4; else i& 6cuadrado$4%$4% 33 G7 distancia)an'attan 3 ; else i& 6cuadrado$4%$4% 33 F7 distancia)an'attan 3 4; i& 6cuadrado$4%$% 33 47 distancia)an'attan 3 <; else i& 6cuadrado$4%$% 33 7 distancia)an'attan 3 ; else i& 6cuadrado$4%$% 33 <7 distancia)an'attan 3 4; else i& 6cuadrado$4%$% 33 A7 distancia)an'attan 3 5; else i& 6cuadrado$4%$% 33 I7 distancia)an'attan 3 4; else i& 6cuadrado$4%$% 33 H7 distancia)an'attan 3 ; else i& 6cuadrado$4%$% 33 G7 distancia)an'attan 3 <; else i& 6cuadrado$4%$% 33 F7 distancia)an'attan 3 ; i& 6cuadrado$%$5% 33 47 distancia)an'attan 3 ; else i& 6cuadrado$%$5% 33 7 distancia)an'attan 3 <; else i& 6cuadrado$%$5% 33 <7 distancia)an'attan 3 A; else i& 6cuadrado$%$5% 33 A7 distancia)an'attan 3 <; else i& 6cuadrado$%$5% 33 I7 distancia)an'attan 3 ; else i& 6cuadrado$%$5% 33 H7 distancia)an'attan 3 4; else i& 6cuadrado$%$5% 33 G7 distancia)an'attan 3 5; else i& 6cuadrado$%$5% 33 F7 distancia)an'attan 3 4; i& 6cuadrado$%$4% 33 47 distancia)an'attan 3 <; else i& 6cuadrado$%$4% 33 7 distancia)an'attan 3 ; else i& 6cuadrado$%$4% 33 <7 distancia)an'attan 3 <; else i& 6cuadrado$%$4% 33 A7 distancia)an'attan 3 ; else i& 6cuadrado$%$4% 33 I7 distancia)an'attan 3 4; else i& 6cuadrado$%$4% 33 H7 distancia)an'attan 3 5; else i& 6cuadrado$%$4% 33 G7 distancia)an'attan 3 4; else i& 6cuadrado$%$4% 33 F7
distancia)an'attan 3 ; i& 6cuadrado$%$% 33 47 distancia)an'attan 3 A; else i& 6cuadrado$%$% 33 7 distancia)an'attan 3 <; else i& 6cuadrado$%$% 33 <7 distancia)an'attan 3 ; else i& 6cuadrado$%$% 33 A7 distancia)an'attan 3 4; else i& 6cuadrado$%$% 33 I7 distancia)an'attan 3 5; else i& 6cuadrado$%$% 33 H7 distancia)an'attan 3 4; else i& 6cuadrado$%$% 33 G7 distancia)an'attan 3 ; else i& 6cuadrado$%$% 33 F7 distancia)an'attan 3 <; return distancia)an'attan; > /* * )todo para aplicar la solución */ public int solucionar6c'ar$%$% solucion7 { boolean encontrado; int i! j! k! m 3 5; do { &or 6i 3 k 3 5; i : <; i7 &or 6j 3 5; j : <; j7 solucion$m%$k% 3 6c'ar7 6pizarra$i%$j% L5L7; encontrado 3 mover67; m; > 8'ile 6?encontrado BB m : )+,),"-0)12,)7; &or 6i 3 k 3 5; i : <; i7 &or 6j 3 5; j : <; j7 solucion$m%$k% 3 6c'ar7 6pizarra$i%$j% L5L7; return m;
> >