SlideShare una empresa de Scribd logo
1 de 9
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
Í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
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.
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.
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.
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.
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.
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.
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

Más contenido relacionado

La actualidad más candente

Método de sustitución
Método de sustituciónMétodo de sustitución
Método de sustitución
pepemunoz
 
Grafos eulerianos
Grafos eulerianosGrafos eulerianos
Grafos eulerianos
borisunefa
 

La actualidad más candente (20)

Ordenamiento QuickSort
Ordenamiento QuickSortOrdenamiento QuickSort
Ordenamiento QuickSort
 
Métodos de conteo
Métodos de conteoMétodos de conteo
Métodos de conteo
 
Método de gauss siedel
Método de gauss siedelMétodo de gauss siedel
Método de gauss siedel
 
1.5 metodos demostracion
1.5 metodos demostracion1.5 metodos demostracion
1.5 metodos demostracion
 
CONCEPTOS Y FUNDAMENTOS DE LÓGICA DIFUSA
CONCEPTOS Y FUNDAMENTOS    DE LÓGICA DIFUSACONCEPTOS Y FUNDAMENTOS    DE LÓGICA DIFUSA
CONCEPTOS Y FUNDAMENTOS DE LÓGICA DIFUSA
 
Algoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap SortAlgoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap Sort
 
Mapa conceptual de Grafos Euleriano y Hamiltoniano
Mapa conceptual de Grafos Euleriano y HamiltonianoMapa conceptual de Grafos Euleriano y Hamiltoniano
Mapa conceptual de Grafos Euleriano y Hamiltoniano
 
Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 
Método de sustitución
Método de sustituciónMétodo de sustitución
Método de sustitución
 
Mapa Conceptual de Grafos
Mapa Conceptual de GrafosMapa Conceptual de Grafos
Mapa Conceptual de Grafos
 
Programación 3: algoritmo de Prim y de Kruskal
Programación 3: algoritmo de Prim y de KruskalProgramación 3: algoritmo de Prim y de Kruskal
Programación 3: algoritmo de Prim y de Kruskal
 
Busquedas Heuristicas vs Busquedas Ciegas
Busquedas Heuristicas vs Busquedas CiegasBusquedas Heuristicas vs Busquedas Ciegas
Busquedas Heuristicas vs Busquedas Ciegas
 
ANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOS
 
Introducción a los métodos númericos
Introducción a los métodos númericosIntroducción a los métodos númericos
Introducción a los métodos númericos
 
Punto Fijo
Punto FijoPunto Fijo
Punto Fijo
 
Monografia ocho reinas
Monografia ocho reinasMonografia ocho reinas
Monografia ocho reinas
 
Logica computacional
Logica computacionalLogica computacional
Logica computacional
 
Método gauss seidel
Método gauss seidelMétodo gauss seidel
Método gauss seidel
 
Tema 8 Álgebra Lineal: Teoría de Grafos
Tema 8 Álgebra Lineal: Teoría de GrafosTema 8 Álgebra Lineal: Teoría de Grafos
Tema 8 Álgebra Lineal: Teoría de Grafos
 
Grafos eulerianos
Grafos eulerianosGrafos eulerianos
Grafos eulerianos
 

Destacado (11)

Problema de la ocho reinas. Implementación en Prolog.
Problema de la ocho reinas. Implementación en Prolog.Problema de la ocho reinas. Implementación en Prolog.
Problema de la ocho reinas. Implementación en Prolog.
 
Clase de logica posbc
Clase de logica posbcClase de logica posbc
Clase de logica posbc
 
Estructuras De Control Prolog
Estructuras De Control PrologEstructuras De Control Prolog
Estructuras De Control Prolog
 
Ejercicios en prolog
Ejercicios en prologEjercicios en prolog
Ejercicios en prolog
 
Ejercicios para unidad 1 heurística
Ejercicios para unidad 1 heurísticaEjercicios para unidad 1 heurística
Ejercicios para unidad 1 heurística
 
Resolución de problemas y heurísticas
Resolución de problemas y heurísticasResolución de problemas y heurísticas
Resolución de problemas y heurísticas
 
Heurísticos en la resolución de problemas
Heurísticos en la resolución de problemasHeurísticos en la resolución de problemas
Heurísticos en la resolución de problemas
 
Solución de problemas con algoritmos
Solución de problemas con algoritmosSolución de problemas con algoritmos
Solución de problemas con algoritmos
 
21 problemas de algoritmo resueltos
21 problemas de algoritmo resueltos21 problemas de algoritmo resueltos
21 problemas de algoritmo resueltos
 
Metodología para la elaboración de un informe
Metodología para la elaboración de un informeMetodología para la elaboración de un informe
Metodología para la elaboración de un informe
 
Algoritmo de backtracking
Algoritmo de backtrackingAlgoritmo de backtracking
Algoritmo de backtracking
 

Similar a 8 reinas

12 Solucion De Problemas Con Recursion
12 Solucion De Problemas Con Recursion12 Solucion De Problemas Con Recursion
12 Solucion De Problemas Con Recursion
UVM
 
Busqueda por backtracking
Busqueda por backtrackingBusqueda por backtracking
Busqueda por backtracking
Cesar Mujica
 
recursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptxrecursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptx
juan gonzalez
 
Metodo de la burbuja en algoritmo
Metodo de la burbuja en algoritmo Metodo de la burbuja en algoritmo
Metodo de la burbuja en algoritmo
ikky2345
 

Similar a 8 reinas (20)

Enfoques
EnfoquesEnfoques
Enfoques
 
Slideshare nelson rodriguez
Slideshare nelson rodriguezSlideshare nelson rodriguez
Slideshare nelson rodriguez
 
Enfoques
EnfoquesEnfoques
Enfoques
 
12 Solucion De Problemas Con Recursion
12 Solucion De Problemas Con Recursion12 Solucion De Problemas Con Recursion
12 Solucion De Problemas Con Recursion
 
Backtracking (Método de Vuelta Atrás)
Backtracking (Método de Vuelta Atrás)Backtracking (Método de Vuelta Atrás)
Backtracking (Método de Vuelta Atrás)
 
Int. a la Computación Evolutiva - Informe para cursada
Int. a la Computación Evolutiva - Informe para cursadaInt. a la Computación Evolutiva - Informe para cursada
Int. a la Computación Evolutiva - Informe para cursada
 
Método de Vuelta Atrás (Backtracking)
Método de Vuelta Atrás (Backtracking)Método de Vuelta Atrás (Backtracking)
Método de Vuelta Atrás (Backtracking)
 
2. Recursividad
2. Recursividad2. Recursividad
2. Recursividad
 
Enfoque
EnfoqueEnfoque
Enfoque
 
Busqueda por backtracking
Busqueda por backtrackingBusqueda por backtracking
Busqueda por backtracking
 
Enfoques
EnfoquesEnfoques
Enfoques
 
Algoritmo simplex
Algoritmo simplexAlgoritmo simplex
Algoritmo simplex
 
Vuelta Atras
Vuelta AtrasVuelta Atras
Vuelta Atras
 
recursividad.pptx
recursividad.pptxrecursividad.pptx
recursividad.pptx
 
recursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptxrecursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptx
 
Matriz inversa
Matriz inversaMatriz inversa
Matriz inversa
 
Matriz inversa
Matriz inversaMatriz inversa
Matriz inversa
 
clase1_TecDiseño_2021.ppsx
clase1_TecDiseño_2021.ppsxclase1_TecDiseño_2021.ppsx
clase1_TecDiseño_2021.ppsx
 
Metodo de la burbuja en algoritmo
Metodo de la burbuja en algoritmo Metodo de la burbuja en algoritmo
Metodo de la burbuja en algoritmo
 
Daniela mendozaestructuradedatosii
Daniela mendozaestructuradedatosiiDaniela mendozaestructuradedatosii
Daniela mendozaestructuradedatosii
 

Más de Daniel Cam Urquizo

Clasificacion de sistemas de informacion
Clasificacion de sistemas de informacionClasificacion de sistemas de informacion
Clasificacion de sistemas de informacion
Daniel Cam Urquizo
 
Aplicacion de descriptores de sonido
Aplicacion de descriptores de sonidoAplicacion de descriptores de sonido
Aplicacion de descriptores de sonido
Daniel Cam Urquizo
 
Aplicación grafica para aprendizaje multimedia sobre representación de patolo...
Aplicación grafica para aprendizaje multimedia sobre representación de patolo...Aplicación grafica para aprendizaje multimedia sobre representación de patolo...
Aplicación grafica para aprendizaje multimedia sobre representación de patolo...
Daniel Cam Urquizo
 
Identificacion de voz usando wavelets
Identificacion de voz usando waveletsIdentificacion de voz usando wavelets
Identificacion de voz usando wavelets
Daniel Cam Urquizo
 

Más de Daniel Cam Urquizo (13)

OOSE
OOSEOOSE
OOSE
 
Patrones de diseño y frameworks
Patrones de diseño y frameworksPatrones de diseño y frameworks
Patrones de diseño y frameworks
 
Patrones de Diseño y Frameworks
Patrones de Diseño y FrameworksPatrones de Diseño y Frameworks
Patrones de Diseño y Frameworks
 
Quadratic Sieve, algoritmos y ejemplos
Quadratic Sieve, algoritmos y ejemplosQuadratic Sieve, algoritmos y ejemplos
Quadratic Sieve, algoritmos y ejemplos
 
Tecnicas de busqueda por similitud de patrones
Tecnicas de busqueda por similitud de patronesTecnicas de busqueda por similitud de patrones
Tecnicas de busqueda por similitud de patrones
 
Dispositivos que se usan para detectar el olor y el sabor y su aplicacion en ...
Dispositivos que se usan para detectar el olor y el sabor y su aplicacion en ...Dispositivos que se usan para detectar el olor y el sabor y su aplicacion en ...
Dispositivos que se usan para detectar el olor y el sabor y su aplicacion en ...
 
Sonido en el hombre
Sonido en el hombreSonido en el hombre
Sonido en el hombre
 
Clasificacion de sistemas de informacion
Clasificacion de sistemas de informacionClasificacion de sistemas de informacion
Clasificacion de sistemas de informacion
 
Base de datos multimedia
Base de datos multimediaBase de datos multimedia
Base de datos multimedia
 
Aplicacion de descriptores de sonido
Aplicacion de descriptores de sonidoAplicacion de descriptores de sonido
Aplicacion de descriptores de sonido
 
Aplicación grafica para aprendizaje multimedia sobre representación de patolo...
Aplicación grafica para aprendizaje multimedia sobre representación de patolo...Aplicación grafica para aprendizaje multimedia sobre representación de patolo...
Aplicación grafica para aprendizaje multimedia sobre representación de patolo...
 
Identificacion de voz usando wavelets
Identificacion de voz usando waveletsIdentificacion de voz usando wavelets
Identificacion de voz usando wavelets
 
proyeccion oblicua
proyeccion oblicuaproyeccion oblicua
proyeccion oblicua
 

Último

2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
EncomiendasElSherpa
 
Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
GuillermoBarquero7
 

Último (6)

2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
 
Caso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business CentralCaso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business Central
 
Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
 
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOSESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
 
Trabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - OfimáticaTrabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - Ofimática
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 

8 reinas

  • 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. Í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. 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. 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. 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. 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. 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. 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. 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