Sie sind auf Seite 1von 15

Problema de las

8 Reinas
Programacin lgica
Alumnos:
Barreto Valderrama Lizbeth
Cam Urquizo Daniel
Gutierrez Romero Fabio

Profesor:
Diaz Pulido

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 estn en la misma fila, columna o diagonal.
Posibles posiciones:
Restricciones:
Misma fila y columna
Misma columna
Dada dos reinas en
posicin (i,j) (k,l)
Importancia
Con este problema podemos implementar
diferentes soluciones
Solucin
El problema de las ocho
reinas tiene 92 soluciones, de
las cuales 12 son
esencialmente distintas, es
decir las 92 soluciones
existentes se pueden obtener
a partir de simetras,
rotaciones y traslaciones de
las 12 soluciones nicas.
Podemos considerar que el
resultado sea solo una
posicion o genere todas las
posibles
Soluciones en N reinas

Ingenieria del Proyecto
Busqueda en profundidad
Colocar la reina n en la primera casilla validad de la fila
si la reina no puede llegar a colocarse en ninguna casilla,
se vuelve atras y se cambia de posicion de la reina n-1
intentar colocar las reinas restantes en las filas que quedan
Explora todos los casos hasta que llegue a las soluciones
Cdigo
Sabemos que el problema consiste en ubicar las reinas en el tablero de
ajedrez de manera que ningn par de ellas se amenace.Necesitamos una
representacin para la solucin, 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 ms de una reina por columna.
Codigo
El siguiente predicado genera/1 genera las distintas configuraciones del
tablero.
Cdigo
Ahora necesitamos un predicado para determinar si una configuracin 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 conguracin 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 conguracin vaca.
Codigo
Ahora generamos y comprobamos

Esto da solucin al problema, pero no es muy eficiente, de hecho
comprobamos en PROLOG el tiempo de ejecucin.
Codigo
Entonces como hay muchas configuraciones que estamos generando
sabemos q las reinas siempre estn en distintas filas entonces podemos
descartar a priori modificando el predicado genera/1.
Codigo
Calculamos la cantidad de soluciones que deberan ser 92 por lo antes
mencionado con el siguiente predicado cantidadSol/1.
Conclusiones
En cuanto a la optimizacion se puede implementar con
algoritmos geneticos e incluso redes neuronales.
Utilidad en la vida real
Una desventaja de esta implementacion es muy lento
porque su complejidad es exponencial o factorial,
Ventajas es facil de implementar y entender a comparacion
de otros metodos

Das könnte Ihnen auch gefallen