implementación de algoritmos de búsqueda

Page 1

UNIVERSIDAD MAYOR DE SAN ANDRES Facultad de Ciencias Puras y Naturales Postgrado en Informática Sistemas Expertos

Implementación De Algoritmos De Búsqueda Para La Solución Del Rompecabezas Numérico De 6 Posiciones

Presentado a: Dr. Daniel Gálvez L. Presentado por: Roger Saravia A.

La Paz, Bolivia - Junio de 2007


Resumen

En este trabajo se propone la solución computarizada mediante búsqueda para los rompecabezas numéricos rectangulares de 6 posiciones. Para tal efecto, primero se hace el planteamiento del problema dentro del área de Inteligencia Artificial. Luego, se procede con una revisión teórica de conceptos importantes como espacio de estados, algoritmos de búsqueda y otros. Posteriormente, se tiene un desarrollo teórico de la propuesta de solución. Para probar el diseño de solución, se ha elaborado un software bautizado como “Rompe6” en Visual Basic y sobre Excel. Mediante la ejecución de dicho software se analizan dos casos de estudio de distinto grado de dificultad. Finalmente, se hacen algunas conclusiones para próximos estudios y también algunas recomendaciones para su aplicación práctica en otras áreas.


Índice

1

Escenario ................................................................................................................2

2

Problema Identificado .............................................................................................2

3

Abordaje del Problema ...........................................................................................2

4

Objetivos .................................................................................................................2 4.1

Objetivo General .................................................................................................2

4.2

Objetivos Específicos..........................................................................................3

5

Marco Teórico.........................................................................................................3 5.1

¿Qué es Inteligencia Artificial? ...........................................................................3 Inteligencia Artificial ¿para qué?..........................................................................4

5.2

La Búsqueda .......................................................................................................4

5.2.1

Características de la Búsqueda en Inteligencia Artificial ............................4

5.2.2

Elementos de la Definición de un Problema ...............................................5

5.3

Rompecabezas de 6 piezas................................................................................5

5.4

Búsqueda Primero a lo Ancho (Breadth-First Search) .......................................6

5.5

Búsqueda Primero en Profundidad (Depth-First Search)...................................7

6

Desarrollo Teórico ..................................................................................................7 6.1

Algoritmo del Grafo .............................................................................................7

6.2

Algoritmo de Búsqueda Primero a lo Ancho.......................................................8

6.3.

Algoritmo de Búsqueda Primero en Profundidad ...............................................9

7

Desarrollo Práctico ...............................................................................................10 7.1

Implementación del Algoritmo de Grafo en Visual Basic 6 (VB)...................................10

7.2

Implementación de los Algoritmos de Búsqueda en VB...................................12

8

Caso de Estudio ...................................................................................................13 Generación del Grafo.........................................................................................13 Búsqueda Primero a lo Ancho ...........................................................................13 Búsqueda Primero en Profundidad....................................................................15

9

Conclusiones ........................................................................................................16

10

Recomendaciones ................................................................................................17

11

Referencias...........................................................................................................17

1


1

Escenario El escenario de este proyecto es el enigma del rompecabezas de 6 posiciones dentro del área de Inteligencia Artificial en Ciencias de la Computación.

2

Problema Identificado El principal problema identificado es el cómo reordenar el rompecabezas a partir de una solución estudiada y metodológica.

3

Abordaje del Problema Se abordará el problema mediante la implementación de 3 algoritmos de Inteligencia Artificial:

Un algoritmo para la solución del grafo de estados (espacio de estados) del rompecabezas.

Un algoritmo para la búsqueda primero a lo ancho dentro del grafo de estados.

Un algoritmo para la búsqueda primero en profundidad dentro del grafo de estados.

Nota: Por razones de exposición y comparación se aplicarán los dos algoritmos de búsqueda puesto que en la práctica basta solo uno.

4

Objetivos 4.1

Objetivo General Lograr una reordenación destino (estado objetivo) del rompecabezas de 6 posiciones a partir de una disposición origen (estado inicial) y mediante la ejecución de un programa en Visual Basic creado a partir de algoritmos de Inteligencia Artificial (operaciones).

2


4.2

5

Objetivos Específicos

Diseñar y programar (implementar) un algoritmo para la generación del grafo correspondiente a los posibles desplazamientos de la fichas (espacio de estados) desde cierta posición inicial dada.

Diseñar y programar un algoritmo de búsqueda primero a lo ancho mediante la técnica de la cola.

Diseñar y programar un algoritmo de búsqueda primero a profundidad mediante la técnica de la pila.

Marco Teórico 5.1

¿Qué es Inteligencia Artificial? Alan Turing expresó: “…si durante el intercambio entre una computadora y el usuario este último cree que está intercambiado con otro humano, entonces se dice que el programa es inteligente…” Según Schildlt: "…un programa inteligente es uno que muestra un comportamiento similar al humano cuando se enfrenta a un problema." Según Elaine Rich: ”…la Inteligencia Artificial es el estudio de cómo lograr que las computadoras hagan cosas que por el momento las personas hacen mejor.” No es necesario que el programa resuelva el problema de la misma forma que el hombre. Una computadora encuentra los ceros de una ecuación más rápido y con mayor exactitud que el hombre; sin embargo, el hombre reconoce mucho mejor un conjunto de caracteres. La Inteligencia Artificial ofrece técnicas para enfrentar 2 clases de problemas:

i. Los que por su dimensión es difícil usar un algoritmo conocido. ii. Los que carecen de un algoritmo para ser resueltos.

3


Inteligencia Artificial ¿para qué?

Para el lenguaje:

Traducción, comprensión y reconocimiento de la voz.

Para el conocimiento:

Representación, adquisición y recuperación de conocimiento.

Para la visión:

Datos visuales complejos y OCR (reconocimiento óptico de caracteres).

Para aprender:

5.2

Por deducción, inducción, analogía e instrucción.

La Búsqueda La búsqueda es la base de los métodos de solución de problemas (MSP) en la Inteligencia Artificial. Siempre se tiene un espacio de búsqueda. ¿Qué opciones se tiene en el ajedrez? En la primera jugada se tienen 20 posibilidades. En la segunda jugada se tienen 400 posibilidades. Y así progresivamente.

5.2.1 Características de la Búsqueda en Inteligencia Artificial •

En IA se busca en un espacio problema y no un dato en particular.

En IA se busca un camino que conecte la descripción inicial del problema con una descripción del estado objetivo para el problema.

En IA el proceso de buscar una solución a un problema produce un espacio solución.

4


5.2.2 Elementos de la Definición de un Problema Espacio de estado:

Es el conjunto de todos los estados alcanzables a partir del estado inicial mediante una secuencia de acciones cualquiera.

Estado inicial:

Condiciones iniciales del problema.

Estado objetivo: Solución del problema.

5.3

Estado actual:

Estado donde se encuentra el agente.

Operadores:

Representan las acciones disponibles en cada estado. La aplicación del conjunto de operadores a un estado X nos da el conjunto de estados alcanzables desde X.

Criterio objetivo:

Es el criterio para aplicarlo a la descripción de un estado y para determinar si este es un estado objetivo.

Camino:

En el espacio de estado, es una secuencia de acciones que conduce de un estado a otro.

Solución:

Es un camino desde el estado inicial a un estado que satisface el criterio objetivo.

Rompecabezas de 6 piezas Es en un tablero de 6 posiciones (3x2) con 5 fichas numeradas y una en blanco. Una ficha numerada puede ser movida a la posición en blanco quedando la que estaba numerada en blanco y la que estaba en blanco numerada. La esencia del rompecabezas es lograr un orden específico a partir de una determinada disposición.

1

2

5

3

4

1

2

4

5

3

La formulación del problema es: Estados:

La descripción de un estado especifica la ubicación de cada número y la del espacio en blanco.

5


Operadores:

La ficha cercana al espacio en blanco puede moverse a la izquierda, derecha, arriba o abajo.

Criterio objetivo:

Los 5 números quedan en un orden especificado.

Este problema parece simple pero tiene 6! (igual a 720) diferentes ordenamientos por lo que el método de generar estados y probar si cumplen el criterio objetivo lleva a una alta expansión del tipo combinatoria.

1

2

5

3

1 5

5

1

2

5

3

4

1 4

5

2

1

3

4

5

3

1

2

1

3

4

5

2

3 4

2

4

3

1

2

4

5

3

2 4

Importante: Durante la generación de estados debe cuidarse de no "mover" las fichas que generarían un estado ya generado.

5.4

Búsqueda Primero a lo Ancho (Breadth-First Search) La búsqueda primero a lo ancho puede usarse para buscar objetivos en grafos. Esta búsqueda usa la estrategia de la cola que se caracteriza por añadir los elementos pendientes al final de los existentes. Los pasos son los siguientes:

1. Iniciar una cola de un elemento que contenga el nodo de partida (raíz).

6


2. Iterar de a) hasta c) mientras la cola no esté vacía: a. Verificar si el primer elemento de la cola es solución. b. Salir con "verdadero" si el elemento verificado es solución. c. Si no es solución, añadir sus sucesores al final de la cola. 3. Salir con "falso" si no se encuentra una solución.

Nota: La búsqueda a lo ancho es la mejor técnica cuando tenga que buscarse en reglas (otro tipo de problemas).

5.5

Búsqueda Primero en Profundidad (Depth-First Search) La búsqueda primero en profundidad puede usarse para buscar objetivos en grafos profundos pero también en no profundos. Esta búsqueda usa la estrategia de la pila que se caracteriza por añadir los elementos pendientes al principio de los existentes. Los pasos son los siguientes:

1. Iniciar una pila de un elemento con en el nodo raíz (de partida). 2. Iterar de a) hasta c) hasta que la pila este vacía: a. Verificar si el elemento del tope de la pila es solución. b. Salir con "verdadero" si el elemento verificado es solución. c. Si no es solución, añadir sus sucesores al tope de la pila. 3. Salir con "falso" si no se halla una solución.

Nota: La búsqueda primero en profundidad es la mejor técnica cuando los objetivos están en los cuadrantes más profundos.

6

Desarrollo Teórico 6.1

Algoritmo del Grafo Al diseñar el algoritmo del grafo de espacio de estados fue necesario considerar un módulo de verificación para no obtener el estado anterior. También fue necesario implementar la estrategia de la pila.

7


6.2

Algoritmo de Búsqueda Primero a lo Ancho Al diseñar el algoritmo de la búsqueda primero a lo ancho fue necesario pensar en módulos que representen a funciones propias de la técnica de la cola. No debe olvidarse que el elemento a considerar siempre se toma de la cabeza de la cola. Y cualquier elemento se añade siempre al final de la cola.

8


6.3. Algoritmo de Búsqueda Primero en Profundidad Al diseñar el algoritmo de búsqueda primero en profundidad fue necesario considerar mecanismos para la técnica de la pila. No debe olvidarse que el elemento a considerar siempre se toma de la cabeza de la pila. Y cualquier elemento se añade siempre al tope de la pila.

9


Tomar Estado Inicial

Generar Estados Sucesores

Colocar en la Pila

No Sí

No Pila Vacía?

Tomar un Estado

Estado Solución?

Fin

7

Desarrollo Práctico La programación de los algoritmos y la consecuente construcción de la aplicación, fue realizada totalmente en Visual Basic 6 sobre la plataforma Microsoft Excel.

7.1

Implementación del Algoritmo de Grafo en Visual Basic 6 (VB) Para la programación del algoritmo del grafo en VB, se tuvo que codificar en funciones y subrutinas encargadas de tareas menores y comandadas desde una subrutina principal de módulo. A continuación una descripción de las subrutinas más importantes en orden de aparición:

Subrutina o función:

Descripción:

verif(r)

Retorna verdadero solo cuando un estado "r" recién generado es nuevo en el grafo.

10


s02

Carga de una hoja del libro (Excel) la matriz de desplazamientos.

s03

Genera nuevos estados a partir de aquellos que se encuentran en una pila.

spm1

Subrutina principal de mรณdulo para llamar a las otras subrutinas.

Nota: La matriz de desplazamientos es la estrategia usada para calcular los posibles movimientos de cada ficha a partir de un estado dado. El algoritmo del grafo reside en el mรณdulo 1 y hace uso de la hoja llamada "Grafo" de la plataforma Excel. A continuaciรณn se tiene el listado de la subrutina s03 que construye el espacio de estados.

' genera el grafo de estados Sub s03() s = Pila.Cells(1, 1) If s > "" Then Pila.Rows(1).Delete For i = 1 To d For j = 1 To p If op(i, j) <> 0 Then t=s w = i + op(i, j) If Mid(t, w, 1) = z Then Mid(t, w, 1) = Mid(t, i, 1) Mid(t, i, 1) = z If verif(t) Then f3 = f3 + 1 Grafo.Cells(f3, 1) = s Grafo.Cells(f3, 2) = t Pila.Rows(1).Insert Pila.Cells(1, 1) = t End If End If End If Next j Next i End If End Sub

11


7.2

Implementación de los Algoritmos de Búsqueda en VB La búsqueda primero a lo ancho y la búsqueda primero en profundidad se programaron juntas en un mismo módulo. Dado que el VB no dispone de sentencias nativas relacionadas con la cola o la pila, las mismas tuvieron que ser programadas desde cero en base a arreglos. A continuación una descripción de las estructuras más importantes contenidas en el módulo 2 y que hacen uso de la hoja llamada "Memoria" de la plataforma Excel.

Subrutina o función:

Descripción:

obsu(e)

Retorna en un arreglo todos los sucesores de "e" encontrados en el espacio de estados.

Ico

Inicia la cola.

aco(e)

Añade "e" al final de la cola.

tco()

Función que extrae y retorna la cabeza de la cola.

Ipi

Inicia la pila.

api(e)

Añade "e" al tope de la pila.

tpi()

Función que extrae y retorna el tope de la pila.

bp(a,o)

Es el código generalizado de búsqueda del espacio objetivo. Cuando "a" es 1 ejecuta una búsqueda primero a lo ancho. Si "a" es 2, una búsqueda primero en profundidad.

spm2(t,o)

Es la subrutina principal de módulo que comanda el proceso de búsqueda. El parámetro "t" lo recibe del botón de búsqueda apretado por el usuario y "o" es el objetivo también entrado por el usuario.

12


8

Caso de Estudio En esta parte se va a exponer paso a paso los resultados del programa dado el siguiente problema:

Estado Inicial (135_24)

1

Estado Objetivo (1_3245)

3

5

1

2

4

2

3 4

5

Generación del Grafo En la hoja "Grafo" se genera un espacio de estados de 421 filas a partir del estado inicial mostrado arriba. Este espacio de estados se muestra por completo en la siguiente página. Es importante notar que un grafo no contiene absolutamente todos los estados posibles sino un subconjunto de ellos que descienden desde el estado inicial. Si un grafo tuviese todos los estados posibles, entonces bastaría generar un solo grafo para solucionar de una sola vez todos los problemas del rompecabezas.

Búsqueda Primero a lo Ancho Dentro la plataforma Excel y en la hoja "Memoria" se pueden encontrar los resultados intermedios y finales de la búsqueda de primero a lo ancho. Para el presente caso puede apreciarse el historial de la cola hasta llegar al estado objetivo. Véase este historial luego del espacio de estados de la siguiente página. Es importante notar que la cola tiene un comportamiento dinámico durante el proceso. Algunas veces queda vacía un instante intermedio y otras veces está llena de estados. Atención: La cola queda vacía en partes intermedias del pleno proceso pero no en partes determinantes que terminarían la búsqueda. El historial de la cola para este proceso tiene exactamente 20 filas. Y la solución (el camino) consta de 4 movimientos a partir de la posición o estado inicial del rompecabezas. Este camino está resaltado en el mencionado espacio de estados de la hoja siguiente.

13


135_24 135_24 1352_4 1352_4 13524_ 13_245 1_3245 1_3245 1432_5 1432_5 14325_ 14_253 1_4253 1_4253 1542_3 1542_3 15423_ 15_234 1_5234 _15234 215_34 2153_4 2153_4 21534_ 21_345 2_1345 2_1345 2413_5 2413_5 24135_ 24_351 2_4351 2_4351 2543_1 2543_1 25431_ 25_314 2_5314 _25314 325_14 3251_4 3251_4 32514_ 32_145 3_2145 3_2145 3421_5 3421_5 34215_ 34_152 3_4152 3_4152 3541_2 3541_2 35412_ 35_124 3_5124 354_12 _54312 5_4312 5_4312 5143_2 5143_2 51432_ 51_324 5_1324 5_1324 5213_4 5213_4 52134_

_35124 1352_4 1_5234 13524_ 13_245 1_3245 _13245 1432_5 143_25 14325_ 14_253 1_4253 _14253 1542_3 154_23 15423_ 15_234 1_5234 _15234 215_34 2153_4 2_5314 21534_ 21_345 2_1345 _21345 2413_5 241_35 24135_ 24_351 2_4351 _24351 2543_1 254_31 25431_ 25_314 2_5314 _25314 325_14 3251_4 3_5124 32514_ 32_145 3_2145 _32145 3421_5 342_15 34215_ 34_152 3_4152 _34152 3541_2 354_12 35412_ 35_124 3_5124 _35124 _54312 5_4312 54_312 5143_2 514_32 51432_ 51_324 5_1324 _51324 5213_4 521_34 52134_ 52_341

52_341 5_2341 5_2341 5423_1 5423_1 54231_ 542_31 _42531 4_2531 4_2531 4325_1 4325_1 43251_ 43_512 4_3512 4_3512 4135_2 4135_2 41352_ 41_523 4_1523 4_1523 4215_3 4215_3 42153_ 421_53 _21453 2_1453 2_1453 2514_3 2514_3 25143_ 25_431 2_5431 2_5431 2354_1 2354_1 23541_ 23_415 2_3415 2_3415 2134_5 2134_5 21345_ 213_45 _23415 423_15 4231_5 4231_5 42315_ 42_153 4_2153 4_2153 4521_3 4521_3 45213_ 45_132 4_5132 4_5132 4351_2 4351_2 43512_ 43_125 4_3125 _43125 435_12 _35412 3_5412 3_5412 3154_2

5_2341 _52341 5423_1 542_31 54231_ 54_312 _42531 4_2531 42_531 4325_1 432_51 43251_ 43_512 4_3512 _43512 4135_2 413_52 41352_ 41_523 4_1523 _41523 4215_3 421_53 42153_ 42_531 _21453 2_1453 21_453 2514_3 251_43 25143_ 25_431 2_5431 _25431 2354_1 235_41 23541_ 23_415 2_3415 _23415 2134_5 213_45 21345_ 21_453 _13245 423_15 4231_5 4_3125 42315_ 42_153 4_2153 _42153 4521_3 452_13 45213_ 45_132 4_5132 _45132 4351_2 435_12 43512_ 43_125 4_3125 _43125 143_25 _35412 3_5412 35_412 3154_2 315_42

3154_2 31542_ 31_425 3_1425 3_1425 3214_5 3214_5 32145_ 32_451 3_2451 3_2451 3524_1 3524_1 35241_ 352_41 _32451 321_45 _31425 431_25 4312_5 4312_5 43125_ 43_251 4_3251 4_3251 4532_1 4532_1 45321_ 45_213 4_5213 4_5213 4152_3 4152_3 41523_ 41_235 4_1235 _41235 415_23 _15423 1_5423 1_5423 1254_3 1254_3 12543_ 12_435 1_2435 1_2435 1324_5 1324_5 13245_ 13_452 1_3452 1_3452 1534_2 1534_2 15342_ 153_42 _53142 5_3142 5_3142 5431_2 5431_2 54312_ 54_123 5_4123 5_4123 5241_3 5241_3 52413_ 52_134

31542_ 31_425 3_1425 _31425 3214_5 321_45 32145_ 32_451 3_2451 _32451 3524_1 352_41 35241_ 35_412 _52341 432_51 _21345 431_25 4312_5 4_1235 43125_ 43_251 4_3251 _43251 4532_1 453_21 45321_ 45_213 4_5213 _45213 4152_3 415_23 41523_ 41_235 4_1235 _41235 241_35 _15423 1_5423 15_423 1254_3 125_43 12543_ 12_435 1_2435 _12435 1324_5 132_45 13245_ 13_452 1_3452 _13452 1534_2 153_42 15342_ 15_423 _53142 5_3142 53_142 5431_2 543_12 54312_ 54_123 5_4123 _54123 5241_3 524_13 52413_ 52_134 5_2134

5_2134 5_2134 5321_4 5321_4 53214_ 532_14 _32514 3_2514 3_2514 3125_4 3125_4 31254_ 31_542 3_1542 3_1542 3415_2 3415_2 34152_ 34_521 3_4521 3_4521 3245_1 3245_1 32451_ 324_51 _34521 534_21 5342_1 5342_1 53421_ 53_214 5_3214 5_3214 5132_4 5132_4 51324_ 51_243 5_1243 5_1243 5412_3 5412_3 54123_ 54_231 5_4231 _54231 541_23 _51243 513_24 _13524 1_3524 1_3524 1235_4 1235_4 12354_ 12_543 1_2543 1_2543 1425_3 1425_3 14253_ 14_532 1_4532 1_4532 1345_2 1345_2 13452_ 134_52 _14532 142_53 _12543

_52134 5321_4 532_14 53214_ 53_142 _32514 3_2514 32_514 3125_4 312_54 31254_ 31_542 3_1542 _31542 3415_2 341_52 34152_ 34_521 3_4521 _34521 3245_1 324_51 32451_ 32_514 _24351 534_21 5342_1 5_4231 53421_ 53_214 5_3214 _53214 5132_4 513_24 51324_ 51_243 5_1243 _51243 5412_3 541_23 54123_ 54_231 5_4231 _54231 254_31 _41523 251_43 _13524 1_3524 13_524 1235_4 123_54 12354_ 12_543 1_2543 _12543 1425_3 142_53 14253_ 14_532 1_4532 _14532 1345_2 134_52 13452_ 13_524 _34152 514_32 _42153 512_43

512_43 5124_3 5124_3 51243_ 51_432 5_1432 5_1432 5314_2 5314_2 53142_ 53_421 5_3421 5_3421 5234_1 5234_1 52341_ 52_413 5_2413 _52413 523_41 _23541 2_3541 2_3541 2435_1 2435_1 24351_ 24_513 2_4513 2_4513 2145_3 2145_3 21453_ 21_534 2_1534 2_1534 2315_4 2315_4 23154_ 231_54 _31254 3_1254 3_1254 3512_4 3512_4 35124_ 35_241 3_5241 3_5241 3452_1 3452_1 34521_ 34_215 3_4215 3_4215 3142_5 3142_5 31425_ 314_25 _14325 1_4325 1_4325 1243_5 1243_5 12435_ 12_354 1_2354 1_2354 1523_4 1523_4 15234_

5124_3 5_2413 51243_ 51_432 5_1432 _51432 5314_2 531_42 53142_ 53_421 5_3421 _53421 5234_1 523_41 52341_ 52_413 5_2413 _52413 452_13 _23541 2_3541 23_541 2435_1 243_51 24351_ 24_513 2_4513 _24513 2145_3 214_53 21453_ 21_534 2_1534 _21534 2315_4 231_54 23154_ 23_541 _31254 3_1254 31_254 3512_4 351_24 35124_ 35_241 3_5241 _35241 3452_1 345_21 34521_ 34_215 3_4215 _34215 3142_5 314_25 31425_ 31_254 _14325 1_4325 14_325 1243_5 124_35 12435_ 12_354 1_2354 _12354 1523_4 152_34 15234_ 15_342

15_342 1_5342 1_5342 1453_2 1453_2 14532_ 145_32 _15342 152_34 _12354 124_35 _24135 2_4135 2_4135 2341_5 2341_5 23415_ 23_154 2_3154 2_3154 2531_4 2531_4 25314_ 25_143 2_5143 2_5143 2451_3 2451_3 24513_ 245_13 _25143 253_14 _23154 234_15 345_21 _45321 4_5321 4_5321 4253_1 4253_1 42531_ 42_315 4_2315 4_2315 4123_5 4123_5 41235_ 41_352 4_1352 4_1352 4513_2 4513_2 45132_ 451_32 _41352 412_35 _42315 425_31 _35241 351_24 _21534 214_53 _24513 243_51 _53421 531_42 _54123 543_12 _13452 132_45 3_5124

1_5342 _15342 1453_2 145_32 14532_ 14_325 _45132 315_42 _52134 312_54 _24135 2_4135 24_135 2341_5 234_15 23415_ 23_154 2_3154 _23154 2531_4 253_14 25314_ 25_143 2_5143 _25143 2451_3 245_13 24513_ 24_135 _45213 125_43 _53214 123_54 _34215 _45321 4_5321 45_321 4253_1 425_31 42531_ 42_315 4_2315 _42315 4123_5 412_35 41235_ 41_352 4_1352 _41352 4513_2 451_32 45132_ 45_321 _51432 341_52 _12435 342_15 _25431 235_41 _51324 521_34 _14253 524_13 _43251 453_21 _31542 154_23 _43512 413_52 _32145 _35124

14


Primero a lo ancho (usando la cola): [] [[135_24]] [] [[_35124,135_24]] [[_35124,135_24],[1352_4,135_24]] [[1352_4,135_24]] [] [[1_5234,1352_4,135_24]] [[1_5234,1352_4,135_24],[13524_,1352_4,135_24]] [[13524_,1352_4,135_24]] [[13524_,1352_4,135_24],[_15234,1_5234,1352_4,135_24]] [[_15234,1_5234,1352_4,135_24]] [[_15234,1_5234,1352_4,135_24],[13_245,13524_,1352_4,135_24]] [[13_245,13524_,1352_4,135_24]] [[13_245,13524_,1352_4,135_24],[215_34,_15234,1_5234,1352_4,135_24]] [[215_34,_15234,1_5234,1352_4,135_24]] [[215_34,_15234,1_5234,1352_4,135_24],[1_3245,13_245,13524_,1352_4,135_24]] [[1_3245,13_245,13524_,1352_4,135_24]] [[1_3245,13_245,13524_,1352_4,135_24],[2153_4,215_34,_15234,1_5234,1352_4,135_24]] [[2153_4,215_34,_15234,1_5234,1352_4,135_24]] Solución: [1_3245,13_245,13524_,1352_4,135_24]

Búsqueda Primero en Profundidad En la hoja "Memoria" también se pueden encontrar los resultados intermedios y finales para la búsqueda primero en profundidad. Para el problema actual puede apreciarse un historial pero en este caso de la pila:

Primero en profundidad (usando la pila): [] [[135_24]] [] [[_35124,135_24]] [[1352_4,135_24],[_35124,135_24]] [[_35124,135_24]] [[1_5234,1352_4,135_24],[_35124,135_24]] [[13524_,1352_4,135_24],[1_5234,1352_4,135_24],[_35124,135_24]] [[1_5234,1352_4,135_24],[_35124,135_24]] [[13_245,13524_,1352_4,135_24],[1_5234,1352_4,135_24],[_35124,135_24]] [[1_5234,1352_4,135_24],[_35124,135_24]] [[1_3245,13_245,13524_,1352_4,135_24],[1_5234,1352_4,135_24],[_35124,135_24]] [[1_5234,1352_4,135_24],[_35124,135_24]] Solución: [1_3245,13_245,13524_,1352_4,135_24]

15


Se puede ver que la pila también tiene un comportamiento dinámico durante el proceso. A veces queda vacía un instante intermedio y a veces está repleta de estados. Importante: La pila queda vacía en partes intermedias del pleno proceso y no así en partes determinantes puesto que sino terminaría la búsqueda. El historial de la pila para este proceso tiene exactamente 13 filas. Y la solución (el camino) es la misma que la anterior; es decir, consta de 4 movimientos a partir del estado inicial del rompecabezas.

Si se desea la animación para este problema, podría usarse la hoja "Resultados" que contiene una serie de subrutinas dedicadas a la representación gráfica del problema del rompecabezas de 6 piezas.

9

Conclusiones Pese a las sofisticadas computadoras disponibles actualmente, el problema de combinaciones que implica un problema como el del rompecabezas sigue siendo una tarea pesada en cuanto a ciclos de ejecución y en cuanto a necesidades de memoria. La generación de un grafo de espacio de estados sigue siendo un tema detallado y cuidadoso que requiere de la implementación de un algoritmo dedicado para garantizar la no repetición de estados iguales adyacentes. La búsqueda primero a lo ancho es una técnica que funciona bien pero requiere tiempo y memoria porque hace uso de la estrategia de la cola. La búsqueda a lo ancho es la mejor opción cuando el estado objetivo reside en un cuadrante próximo al nodo raíz o estado inicial. La búsqueda primero en profundidad es una técnica que siempre funciona además requiere menos tiempo y memoria que la estrategia anterior; esto, porque hace uso de la técnica de la pila que es más eficiente. Este tipo de búsqueda ha demostrado ser ideal para encontrar objetivos que residen en las profundidades del grafo. En consecuencia, es la mejor opción para el problema del rompecabezas estudiado. Un rompecabezas de 6 posiciones como el estudiado aún consume notable tiempo y memoria para reordenarse entre 2 estados diagonalmente distantes. Y tiene 720 posibles ordenaciones.

16


10

Recomendaciones Se recomienda usar técnicas de memoria virtual para codificar programas que puedan resolver rompecabezas de un mayor número de posiciones como los de 9 (3x3) u otros. Se recomienda que los algoritmos de grafo y de búsqueda de IA usados en la solución del rompecabezas puedan aplicarse a problemas prácticos de otras áreas. Por ejemplo, en Ingeniería Civil se tiene el conflicto del reordenamiento de cargas que hasta hoy se hace mediante simplificaciones de los ingenieros pero que no representan la mejor solución económica. Al calcular un edificio se busca la combinación (posición) de estados de carga (ocupacionales) que ocasionan los máximos esfuerzos en los elementos de la estructura; esto, para lograr un diseño confiable y económico.

11

Referencias DANIEL GÁLVEZ L.

"Sistemas Expertos"; Presentación PowerPoint; Post Grado en Informática, UMSA; LP-BOL; 2007.

PETER NORTON

"New Inside The PC"; Second Edition; SAMS; IndianaUSA; 2002.

17


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.