8 reinas

1.365 visualizaciones

Publicado el

Implementacion de la solucion de las 8 reinas

Publicado en: Software
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
1.365
En SlideShare
0
De insertados
0
Número de insertados
10
Acciones
Compartido
0
Descargas
32
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

8 reinas

  1. 1. UNIVERSIDAD NACIONAL DE Trujillo FACULTAD : Ciencias Físicas y Matemáticas CURSO : Programación lógica PROFESOR : Arturo Díaz Pulido SECCIÓN : Mañana ALUMNOS : Barreto Valderrama Lizbeth Cam Urquizo Daniel Gutiérrez Romero Fabio CICLO : VII
  2. 2. Índice Dedicatoria…………………………………………………………………………………..1 Introducción………………………………………………………………………………….3 Marco Teórico……………………………………………………………………………….4 Capitulo I Planteamiento del problema…………………………………………...5 Capítulo II Solución con búsqueda con retroceso Backtracking……………….5 Capítulo III Pseudocódigo del algoritmo y explicación del código(PROLOG)...6 Capítulo IV Código…………………………………………………………………. 9 Conclusiones………………………………………………………………………………. 10 Referencias Linkográficas……………………………………………………………….. 10
  3. 3. Dedicatoria El presente trabajo titulado “El Problema de las 8 Reinas” esta dedicado a todas aquellas personas interesadas en aprender acerca de este algoritmo. El cual es un tema muy interesante que utiliza la lógica y nos ayuda a desarrollar nuestra capacidad de razonamiento. Esta dedicado a todos los estudiantes y en especial a aquellos que estudien la materia Programación Lógica, pues podrán obtener información valiosa que les ayudará a tener una mayor comprensión y a saber un poco más acerca de este interesante tema. También esta dedicado a nuestro profesor de curso, quien nos dio las debidas orientaciones y nociones básicas del curso, para poder hallar la solución apropiada a dicho problema.
  4. 4. Introducción Los problemas que no tienen solución determinista que se ejecutan en tiempo polinomial se denominan problemas de tipo NP. Debido a su elevada complejidad (O(2^n) o O(n!)), deben ser resueltas en una cantidad de tiempo razonable empleando métodos heurísticos. El problema fue originalmente propuesto en 1848 por el ajedrecista Max Bezzel, y durante los años, muchos matemáticos, incluyendo a Gauss y a Georg Cantor, han trabajado en este problema y lo han generalizado a n-reinas. Las primeras soluciones fueron ofrecidas por Franz Nauck en 1850. Nauck también se abocó a las n-reinas (en un tablero de nxn de tamaño arbitrario). En 1874, S. Günther propuso un método para hallar las soluciones usando determinantes, y J.W.L. Glaisher redefinió su aproximación. Edsger Dijkstra usó este problema en 1972 para ilustrar el poder de la llamada programación estructurada. Él publicó una descripción altamente detallada del desarrollo del algoritmo de backtracking, "depth-first". Este acertijo apareció en el popular juego de computadora de los '90 llamado "The 7th Guest". Consiste en la manera de situar 8 reinas en un tablero de ajedrez, sin que puedan "amenazarse", es decir, que ninguna esté en la misma fila, columna o diagonal que la otra. Es interesante estudiar esta problemática que ha sido resuelta de varias maneras, pero siempre con una premisa por delante, usar una estrategia heurística para resolverla. La fórmula más común consiste en el Backtracking. Este procedimiento consiste en ir ubicando las piezas recordando la posición de las anteriores. Si por algún motivo una no puede ser ubicada, volver hacia movimientos anteriores para seguir tratando por otro camino.
  5. 5. El Problema de las 8 Reinas Marco Teórico Capitulo I Planteamiento del problema El problema original de ocho reinas es intentar encontrar un forma de colocar a ocho reinas en un tablero de ajedrez de modo que no se vean amenazadas una a la otra. Es decir que un tablero de 8x8, ninguna de las reinas comparta un fila, columna o diagonal debido a que cada reina puede amenazar a todas las reinas que estén en la misma fila, columna o diagonal. Existen 92 soluciones a este problema, de las cuales 12 tienen un patrón distinto. Cada una de las 92 soluciones puede ser transformada en una de estos 12 patrones, utilizando rotaciones y reflexiones. En el ajedrez, la reina puede moverse en la medida de lo que le plazca, en horizontal, vertical o diagonal. Un tablero de ajedrez tiene 8 filas y 8 columnas. El estándar del problema Reina 8x8 le pregunta cómo colocar 8 reinas en un tablero de ajedrez ordinario de manera que ninguno de ellos puede tocar cualquier otra en un movimiento. Podemos representar las 8 reinas mediante un vector[1-8], teniendo en cuenta que cada índice del vector representa una fila y el valor una columna. Así cada reina estaría en la posición (i, v[i]) para i = 1-8. Capítulo II Solución con búsqueda con retroceso Backtracking El paradigma Backtracking es un método más eficiente que el paradigma de generación y prueba. Consiste en que las variables se instancian secuencialmente y tan pronto como las variables relevantes a una restricción están instanciadas, se comprueba la validez de esa restricción. Si una instanciación parcial viola una restricción, se hace marcha atrás (backtracking) reconsiderando la última decisión tomada en el proceso de búsqueda, es decir, la variable que se ha instanciado más recientemente y que aún dispone de valores alternativos disponibles, se instancia a otro valor posible.
  6. 6. El paradigma backtracking es capaz de eliminar un subespacio de todos los valores del producto cartesiano de los dominios de las variables. Aun así tiene un coste exponencial. La principal causa de ineficiencia del paradigma de backtracking es que la búsqueda en diferentes partes del espacio falla debido al nodo-inconsistencia. El nodo-inconsistencia se da cuando un valor de un dominio de una variable no satisface la restricción unaria de la variable, con lo cual la instanciación de esa variable a ese valor siempre resulta en un fallo inmediato. El nodo-consistencia puede conseguirse eliminando los valores del dominio de la variable que no satisfagan la restricción unaria. Un estado puede dividirse en otros estados fijando otro elemento de la tupla, generando un proceso de ramificación que parte de un estado inicial y que induce el árbol de estados. El estado inicial es la raíz del árbol de estados y contiene implícitamente todo el espacio de soluciones. Si el árbol de estados tiene un n´umero elevado de nodos, ser´a imposible construirlo explícitamente antes de aplicar una de las técnicas de recorrido. Se puede utilizar un “árbol implícito”, en el sentido de que se van construyendo sus parte relevantes a medida que avanza el proceso de recorrido.
  7. 7. Capítulo III Pseudocódigo del algoritmo y explicación del código(PROLOG) Sabemos que el problema consiste en ubicar las reinas en el tablero de ajedrez de manera que ningún par de ellas se amenace.Necesitamos una representación para la solución, usaremos una lista de la siguiente forma: donde el par [i,Yi] representan las coordenadas de la reina i en el tablero, claramente no puede haber más de una reina por columna. El siguiente predicado genera/1 genera las distintas configuraciones del tablero. Ahora necesitamos un predicado para determinar si una configuración es tal que las reinas no se ataquen, lo hacemos verificando la lista por partes de izquierda a derecha Esta regla establece que en la configuración las reinas no se atacan si la primera reina no ataca a las restantes (no ataca(X,L)) y las restantes no se atacan. El caso base es una configuración vacía. Ahora generamos y comprobamos Esto da solución al problema, pero no es muy eficiente, de hecho comprobamos en PROLOG el tiempo de ejecución.
  8. 8. Entonces como hay muchas configuraciones que estamos generando sabemos q las reinas siempre están en distintas filas entonces podemos descartar a priori modificando el predicado genera/1. Ahora medimos el tiempo en la misma máquina. 206 veces más rápido, 99.515% del tiempo anterior. Calculamos la cantidad de soluciones que deberían ser 92 por lo antes mencionado con el siguiente predicado cantidadSol/1.
  9. 9. Capítulo IV Código Conclusiones ❏ El problema de las 8 Reinas es un problema NP-completo que se puede también ser para una cantidad mayor de reinas N reinas a partir de N = 4 en un tablero de NxN. ❏ El problema puede ser resuelto con algoritmos de backtracking o vuelta atrás, de forma que recorra el árbol en búsqueda en anchura. ❏ Se soluciona el algoritmo con el lenguaje de programación Prolog, usando la programación lógica Referencias Linkográficas ● http://psmheuristica.webnode.com.ve/ejemplos-didacticos/ocho-reinas/ ● http://www.it.uc3m.es/jvillena/irc/practicas/06-07/06.pdf ● http://users.dsic.upv.es/~rparedes/teaching/t7eda.pdf ● http://dis.um.es/~domingo/apuntes/AlgProPar/0809/reinas.pdf ● http://iiuji.googlecode.com/hg/Prolog/Tema8.pdf

×