El espacio de estados de un juego es un grafo cuyos nodos representan las
configuraciones alcanzables (los estados vlidos! y cuyos arcos e"plicitan las #ovidas posibles (las transiciones de estado!$ En principio% se puede construir cual&uier espacio de estados partiendo del estado inicial% aplicando cada una de las reglas para generar los sucesores in#ediatos% y as' sucesiva#ente con cada uno de los nuevos estados generados (en la prctica% los espacios de estados suelen ser de#asiado grandes para e"plicitarlos por co#pleto!$ Cuando un proble#a se puede representar #ediante un espacio de estados% la soluci(n co#putacional corresponde a encontrar un ca#ino desde el estado inicial a un estado objetivo$ Bsqueda en espacio de estados E"isten varios algorit#os para encontrar un ca#ino soluci(n en un espacio de estados$ El es&ue#a general de estos algorit#os es el siguiente) proceder *+s&ueda { O,en -estado . inicial/ closed -/ while (O,en no est vaco) { remover un estado 0 del conjunto O,en if (0 es un estado objetivo) return xito else { generar el conjunto de sucesores del estado 0 agregar el estado 0 al conjunto closed eliminar sucesores que ya estn en O,en o en closed agregar el resto de los sucesores al conjunto O,en } } return fracaso } El conjunto Owen contiene a los estados generados &ue todav'a no 1an sido visitados (no se 1a verificado si son estados objetivo y no se 1an generado sus sucesores!$ El conjunto closed contiene a los estados visitados$ Al considerar s(lo a los sucesores &ue no 1an sido previa#ente generados se evita entrar en ciclos$ Dependiendo del orden en &ue se visiten los estados del conjunto Owen se obtienen distintos tipos de recorrido$ Bsqueda en profundidad En ingl2s% depth-first search$ Si el conjunto Owen se #aneja co#o una lista 3I4O% es decir% co#o un stac5% sie#pre se estar visitando pri#ero los +lti#os estados en ser generados$ Esto significa &ue si A genera y !% y genera "% antes de visitar ! se visita "% &ue est #s alejado de la ra'z A% o sea #s profundo en el rbol de b+s&ueda$ El algorit#o tiene en este caso la tendencia de profundizar la b+s&ueda en una ra#a antes de e"plorar ra#as alternativas$ Proceder *+s&ueda.en.profundidad { O,en 6estado . inicial7 closed -/ while (open no est vaca) { #emover el primer estado 0 de la lista O,en if (0 es un estado objetivo) return xito Else { generar el conjunto de sucesores del estado 0 agregar el estado 0 al conjunto closed eliminar sucesores que ya estn en O,en o en closed agregar el resto de los sucesores al principio de O,en } } return fracaso } Considerando &ue la cantidad pro#edio de sucesores de los nodos visitados es (lla#ado en ingl2s el branching factor y en castellano el factor de ramificaci$n!% y suponiendo &ue la profundidad #"i#a alcanzada es n% este algorit#o tiene una co#plejidad en tie#po de O ( n ! y% si no se considera el conjunto closed% una co#plejidad en espacio de O( 8 n!$ En vez de usar el conjunto closed% el control de ciclos se puede 1acer descartando a&uellos estados &ue aparecen en el ca#ino generado 1asta el #o#ento (basta &ue cada estado generado tenga un puntero a su padre!$ El #ayor proble#a de este algorit#o es &ue puede 9perderse9 en una ra#a sin encontrar la soluci(n$ Ade#s% si se encuentra una soluci(n no se puede garantizar &ue sea el ca#ino #s corto$ Bsqueda en amplitud En ingl2s% breadth-first search$ Si el conjunto Owen se #aneja co#o una lista 4I4O% es decir% co#o una cola% sie#pre se estar visitando pri#ero los pri#eros estados en ser generados$ El recorrido del espacio de estados se 1ace por niveles de profundidad$ Proceder *+s&ueda.en.a#plitud { O,en 6estado . inicial7 closed -/ while (open no est vaca) { remover el primer estado 0 de la lista O,en If (0 es un estado objetivo) return xito Else { generar el conjunto de sucesores del estado 0 agregar el estado 0 al conjunto closed eliminar sucesores que ya estn en O,en o en closed agregar el resto de los sucesores al final de O,en } } Return fracaso } Si el factor de ra#ificaci(n es y la profundidad a la cual se encuentra el estado objetivo #s cercano es n% este algorit#o tiene una co#plejidad en tie#po y espacio de O ( n !$ Contraria#ente a la b+s&ueda en profundidad% la b+s&ueda en a#plitud garantiza encontrar el ca#ino #s corto$ Bsqueda iterativa en profundidad En ingl2s% iterative deepening$ 3a idea es co#binar las buenas caracter'sticas de la b+s&ueda en profundidad% en cuanto a la co#plejidad en espacio% con las ventajas de la b+s&ueda en a#plitud$ Esto se logra 1aciendo una b+s&ueda en profundidad acotada por una profundidad #"i#a i &ue se 1ace variar iterativa #ente de : en adelante con incre#entos de :$ Si el estado objetivo #s cercano se encuentra a una profundidad n% se 1acen n b+s&uedas en profundidad% a nivel :% a nivel ;% 1asta el nivel n$ Esta b+s&ueda iterativa garantiza encontrar el ca#ino #s corto$ Su co#plejidad en espacio es de O( 8 n!$ Su co#plejidad en tie#po es la su#a de la co#plejidad en tie#po de cada una de las b+s&uedas en profundidad acotadas &ue fueron necesarias% esto es i <:%$$$%n O ( i !% o sea O( = !$ 3a co#plejidad en tie#po es por lo tanto e&uivalente a 1acer una sola b+s&ueda acotada a la profundidad n$ Bsqueda heurstica En ingl2s% best-first search$ 3os algorit#os anteriores 1acen una b+s&ueda ciega y e"1austiva% lo &ue presenta serios proble#as en espacios de estado grandes$ Esto se puede #ejorar e"pandiendo pri#ero los estados &ue tienen #s e"pectativas de encontrarse en el ca#ino a la soluci(n% lo &ue i#plica utilizar una funci(n 1eur'stica &ue per#ita darle una #ayor prioridad a esos estados$ El conjunto Owen se #aneja en este caso co#o una cola de prioridad ordenada seg+n una funci(n 1eur'stica &ue aporta un conoci#iento adicional sobre el proble#a abordado$ Esta funci(n puede ser% por eje#plo% una esti#aci(n del largo del ca#ino &ue &ueda por recorrer para llegar al estado objetivo$ procedure *+s&ueda.1eur'stica { O,en 6estado.inicial7 closed -/ while (open no est vaca) { remover el primer estado 0 de la lista O,en if (0 es un estado objetivo) return camino hasta 0 else { generar el conjunto de sucesores del estado 0 foreach (> en sucesores) { if (> no est en O,en ni en closed) { asignar a > un valor heurstico agregar > en la lista O,en } elsif (> est en O,en) { if (el nuevo camino a > es ms corto) actuali%ar el camino almacenado en O,en } elsif (> est en closed) { if (el nuevo camino a > es ms corto) { remover el estado > del conjunto closed agregar el estado > en la lista O,en } } } agregar el estado 0 al conjunto closed reordenar la lista O,en seg&n valores heursticos } } return fracaso } Ade#s de utilizar una cola de prioridad% este algorit#o se diferencia por actualizar los ca#inos al#acenados en la lista Owen cada vez &ue se encuentra un ca#ino #s corto% lo &ue #ejora la probabilidad de encontrar el ca#ino (pti#o$ El ca#ino se al#acena en cada estado co#o un puntero al padre$ Cuando se llega a un estado en cl$sed por un ca#ino #s corto% 1abr'a &ue trans#itir esta infor#aci(n a todos sus sucesores$ Sin e#bargo% algunos de estos sucesores pueden 1aber sido generados o posterior#ente actualizados por otro ca#ino &ue 1asta el #o#ento parec'a #s corto% por lo cual estar'an desvinculados del ancestro &ue se est considerando$ Ad#inistrar este proble#a ser'a #uy engorroso% entonces se opta por repetir la b+s&ueda$ Se puede obtener una versi(n si#plificada de esta b+s&ueda 1eur'stica eli#inando toda la infor#aci(n 1ist(rica contenida en Owen y closed$ En cada paso se generan los sucesores del estado actual y s(lo se conserva al #ejor de ellos para el paso siguiente$ El algorit#o se detiene cuando ninguno de los sucesores tiene una #ejor evaluaci(n &ue el estado actual (sino entrar'a en un ciclo infinito!$ Esta estrategia se lla#a algoritmo del gradiente (hill climbing en ingl2s!$ 4unciona adecuada#ente cuando no 1ay (pti#os locales$ CO?C3@SIA? En este trabajo docu#ental aprendi#os &ue un espacio de estados de un juego cuyos nodos representan las confir#aciones alcanzables y cuyos arcos e"plicitan las #ovidas posibles$ Ade#s pudi#os aprender &ue e"isten diferentes tipos de b+s&ueda para la representaci(n de espacio de estados$