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

1.5 metodos iterativos
1.5 metodos iterativos1.5 metodos iterativos
1.5 metodos iterativos
morenito9001
 
Metodos de ordenacion radix sort
Metodos de ordenacion radix sortMetodos de ordenacion radix sort
Metodos de ordenacion radix sort
tephyfree
 

La actualidad más candente (20)

Teoría de Colas aplicada a Java
Teoría de Colas aplicada a JavaTeoría de Colas aplicada a Java
Teoría de Colas aplicada a Java
 
Programación en Prolog para Inteligencia Artificial
Programación en Prolog para Inteligencia ArtificialProgramación en Prolog para Inteligencia Artificial
Programación en Prolog para Inteligencia Artificial
 
Problema de las 8 reinas rebaza castañeda jhoser alberto
Problema de las 8 reinas  rebaza castañeda jhoser albertoProblema de las 8 reinas  rebaza castañeda jhoser alberto
Problema de las 8 reinas rebaza castañeda jhoser alberto
 
Introducción a los Métodos Numéricos
Introducción a los Métodos NuméricosIntroducción a los Métodos Numéricos
Introducción a los Métodos Numéricos
 
1.5 metodos iterativos
1.5 metodos iterativos1.5 metodos iterativos
1.5 metodos iterativos
 
2.1.5 Ordenación por Distribucion.pptx
2.1.5 Ordenación por Distribucion.pptx2.1.5 Ordenación por Distribucion.pptx
2.1.5 Ordenación por Distribucion.pptx
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Recursividad
RecursividadRecursividad
Recursividad
 
Algortimos De Ordenamiento
Algortimos De OrdenamientoAlgortimos De Ordenamiento
Algortimos De Ordenamiento
 
Metodos de ordenacion radix sort
Metodos de ordenacion radix sortMetodos de ordenacion radix sort
Metodos de ordenacion radix sort
 
Arboles Binarios
Arboles BinariosArboles Binarios
Arboles Binarios
 
Arreglos de registros
Arreglos de registros Arreglos de registros
Arreglos de registros
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
 
Grafos eulerianos y hamiltonianos
Grafos eulerianos y hamiltonianosGrafos eulerianos y hamiltonianos
Grafos eulerianos y hamiltonianos
 
Aritmetica Modular
Aritmetica ModularAritmetica Modular
Aritmetica Modular
 
Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.
 
Busqueda por profundidad iterativa
Busqueda por profundidad iterativaBusqueda por profundidad iterativa
Busqueda por profundidad iterativa
 
Complejidad Computacional
Complejidad ComputacionalComplejidad Computacional
Complejidad Computacional
 
Programación 3: caminos más cortos con un solo origen
Programación 3: caminos más cortos con un solo origenProgramación 3: caminos más cortos con un solo origen
Programación 3: caminos más cortos con un solo origen
 

Destacado (10)

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
 
Monografia ocho reinas
Monografia ocho reinasMonografia ocho reinas
Monografia ocho reinas
 
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
 

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
 

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