Upload
dianagradosl
View
255
Download
1
Embed Size (px)
Citation preview
1
UNIVERSIDAD NACIONAL DE TRUJILLO
FACULTAD DE CIENCIAS FISICAS Y MATEMATICAS
INGENIERIA INFORMATICA
PROGRAMACION LOGICA
MONOGRAFÍA
PROBLEMA DE LAS OCHO REINAS
AUTORES
GRADOS LEYVA DIANA ELIZABETH
GRADOS LEYVA DIANA LISSET
SIFUENTES GUZMAN LUIS ERNESTO
TRUJILLO – PERU
2
ÍNDICE
DEDICATORIA
INTRODUCCIÓN
1. MARCO TEÓRICO
1.1. Capítulo I: PLANTEAMIENTO DEL PROBLEMA
1.1.1. Caso específico - Problema de las ocho reinas
1.1.2. Caso generalizado - Problema de las n reinas
1.2. Capítulo 2: DESARROLLO DEL PROBLEMA
1.2.1. Algoritmo de búsqueda en profundidad
1.2.2. Algoritmo de búsqueda en anchura
1.2.3. Análisis del caso específico- Problema de las ocho reinas
1.2.4. Análisis del caso generalizado- Problema de las n- reinas
1.3. Capítulo 3: APLICACIONES EN LA SOCIEDAD
CONCLUSIONES
ANEXOS
APÉNDICE A
APÉNDICE B
BIBLIOGRAFÍAS
3
4
6
6
6
6
7
7
8
9
13
15
17
18
19
20
22
3
Queremos agradecer a todos nuestros maestros ya que
ellos nos enseñan a valorar los estudios y a superarnos
cada día, también agradecemos a nuestros padres
porque gracias a ellos podemos estar en esta prestigiosa
universidad y así poder aportar con nuestros
4
INTRODUCCION
Estamos viviendo, no una época de cambios sino un cambio de época, un cambio
en el campo científico-tecnológico, en el campo empresarial y sobre todo en el
campo social. Estos cambios que se dan, no solo pueden beneficiar al ser
humano, sino que también pueden perjudicarlo.
Los cambios pueden traer consigo una gran variedad de problemas. Donde la
naturaleza de estos, se caracteriza por la multiplicidad de decisores que confluyen
en una decisión.
5
Aquí en Perú como en cualquier otro país hemos experimentado el cambio que se
viene dando en los sistemas de comunicaciones, ya que mediante estos podemos
lograr la transferencia de información, sin embargo siempre se busca transferir el
mayor volumen de ésta, ya sea a corta o larga distancia; para ello es necesario
lograr un mayor ancho de banda, es aquí donde es inevitable tomar la decisión de
cómo deben ir ubicados los n transceptores del sistema.
Teniendo en cuenta esta situación, nos centramos en cómo resolver o tratar de
resolver esta situación mediante “El problema de las n- reinas”.
El problema de las n- reinas nos dará una alternativa para poder ubicar los n-
transceptores del sistema de manera que estos no se interfieran entre sí, logrando
el mayor ancho de banda posible.
En la presente monografía nos centraremos en tres puntos esenciales, primero en
el análisis del “Problema de las 8-reinas” y del “Problema de las n-reinas”,
segundo, la relación que tienen con los métodos de búsquedas (búsqueda en
profundidad y búsqueda en anchura), y finalmente de cómo podría ayudar este
problema a resolver la problemática que se tiene en los Sistemas de
Comunicaciones.
6
1. MARCO TEORICO
1.1. Capítulo 1: PLANTEAMIENTO DEL PROBLEMA
El problema de las Reinas (Queen Problem) es muy antiguo, siendo
propuesto por primera vez en el año 1848, como el problema de las ocho
reinas, sin embargo, con el paso de 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.
En esta monografía se analizara el caso propuesto inicialmente (ocho
reinas) como un caso específico y posteriormente el caso generalizado.
1.1.1. Caso específico - Problema de las ocho reinas
El problema de las reinas fue originalmente propuesto para n=8
en el año 1848 en un trabajo anónimo, siendo posteriormente
atribuido a Max Bezzel. Sin embargo, la publicación detallada
más antigua que se conoce fue realizada por Nauck en 1850.
Este problema consiste en colocar ocho reinas en un tablero de
8x8 sin que estas se amenacen entre ellas, de tal manera que no
sea posible que dos reinas se capturen entre sí, es decir, que no
estén en la misma fila, ni en la misma columna ni en la misma
diagonal. Se dice que hay una colisión si hay dos reinas que se
pueden capturan entre sí.
1.1.2. Caso generalizado - Problema de las n reinas
El problema de las ocho reinas se puede plantear de modo
general como problema de las n reinas. El problema consiste en
7
colocar n reinas en un tablero de nxn, de tal manera que ninguna
de las reinas quede atacando a otra.
Se trata pues de encontrar una solución (elegir las n celdas
donde colocar a las reinas) que minimice el número total de
colisiones.
Su análisis y solución es isomorfo al de las ocho reinas, es decir
tienen la misma estructura.
1.2. Capítulo 2: DESARROLLO DEL PROBLEMA
La investigación sobre este tema no ha parado hasta hoy, por lo que
existe una amplia variedad de algoritmos sugeridos para su solución.
Esta monografía se centrará en los algoritmos de búsqueda, ya que
estos algoritmos son de gran ayuda para solucionar el problema de las n
reinas. Dichos algoritmos se explican a continuación.
1.2.1. Algoritmo de búsqueda en profundidad
La búsqueda en profundidad, llamada Depth First Search en
inglés, es un algoritmo usado para recorrer o buscar elementos
en un árbol o un grafo. Su procedimiento consiste en visitar todos
los nodos de forma ordenada, es decir, va localizando los
recorridos posibles y en caso de no poder continuar, vuelve al
punto donde existen nuevos recorridos posibles con el fin de
visitar todos los nodos.
En otras, una vez llega al final del camino vuelve atrás hasta que
encuentra una bifurcación que no ha explorado, y repite el
8
proceso hasta acabar el árbol (esto se conoce como
backtracking).
Fig 1 Recorrido de la Búsqueda por Profundidad disponible en: http://iorch.wordpress.com/
1.2.2. Algoritmo de búsqueda en anchura
La búsqueda en anchura, llamada Breadth First Search en
inglés, es un algoritmo para recorrer o buscar elementos en un
grafo (usado frecuentemente sobre árboles). Intuitivamente, se
comienza en la raíz (eligiendo algún nodo como elemento raíz en
el caso de un grafo) y se exploran todos los vecinos de este
nodo. A continuación para cada uno de los vecinos se exploran
sus respectivos vecinos adyacentes, y así hasta que se recorra
todo el árbol
9
Fig 2 Recorrido de Búsqueda por Anchura disponible en: http://iorch.wordpress.com/
1.2.3. Análisis del caso específico- Problema de las ocho reinas
Este caso, como se dijo anteriormente, trata de ubicar ocho
reinas en un tablero de 8x8.
Solución:
Como cada reina puede amenazar a todas las reinas que estén
en la misma fila, cada una ha de situarse en una fila diferente.
Primero numeramos las reinas del 1 al 8. Luego podemos
representar las 8 reinas mediante una 8-tupla
[X1,X2,X3,X4,X5,X6,X7,X8] teniendo en cuenta que cada índice dela
tupla representa una fila y el valor una columna. Así cada reina
estaría en la posición (i, tupla[i]) donde i toma valores del 1 al 8.
Por ejemplo, la tupla [3,1,6,2,8,6,4,7] significa que la reina 1 está
en la fila1, columna 3; la reina 2 en la fila 2, columna 1; la reina 3
10
en la fila 3, columna 6; la reina 4 en la fila 4, columna 2; etc...
Como se puede apreciar esta solución es incorrecta ya que
estarían la reina 3 y la 6 en la misma columna.
Para decidir en cada etapa cuáles son los valores que puede
tomar cada uno de los elementos Xi hemos de tener en cuenta
algunas restricciones a fin de que el número de opciones en
cada etapa sea el menor posible. El algoritmo de búsqueda en
profundidad, como fue mencionado anteriormente, utiliza
backtracking (vuelta atrás) para recorrer todo el árbol. Teniendo
esto en cuenta podemos diferenciar dos tipos de restricciones:
Restricciones explicitas: Formadas por reglas que restringen
los valores que pueden tomar los elementos Xi a un conjunto
determinado. En nuestro problema este conjunto es S=
{1,2,3,4,5,6,7,8}.
Restricciones implícitas: Indican la relación existente entre
los posibles valores de los Xi para que éstos puedan formar
parte de una n-tupla solución. En el problema que nos ocupa
podemos definir dos restricciones implícitas. En primer lugar
sabemos que dos reinas no pueden situarse en la misma
columna y por tanto no puede haber dos Xi iguales
(obsérvese además que la propia definición de la tupla
impide situar a dos reinas en la misma fila, con lo cual
tenemos cubiertos los dos casos, el de las filas y el de las
columnas). Por otro lado sabemos que dos reinas no pueden
11
estar en la misma diagonal, lo cual reduce el número de
opciones. Esta condición se refleja en la segunda restricción
implicita que, en forma de ecuación, puede ser expresada
como |x – x’| ≠ |y – y’|, siendo (x,y) y (x’,y’) las coordenadas
de dos reinas en el tablero.
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 simetrías, rotaciones y
traslaciones de las 12 soluciones únicas, que se muestran a
continuación:
12
13
Fig 3. 12 soluciones únicas del problema de las ocho reinas, disponible en: http://iorch.wordpress.com/
1.2.4. Analisis del caso generalizado – Problema de las n reinas
Este caso, como se dijo anteriormente, trata de ubicar n reinas
en un tablero de nxn sin que se amenacen.
El analisis y solucion para este caso tiene la misma estrustura a
la solucion de las ocho reinas.
A continuacion se presenta el numero de soluciones para n
reinas, donde n>=1:
Tabla 1: Numero de soluciones para n- reinas.
N Única Distinta
1 1 1
2 0 0
3 0 0
4 1 2
5 2 10
6 1 4
7 6 40
8 12 92
9 46 352
10 92 724
11 341 2.680
12 1.787 14.200
13 9.233 73.712
14 45.752 365.596
… … …
14
Extructura del arbol de expansion para n=4.
Fig 4. Estructura del árbol de expansión para 4 reinas en:
http://socanet.zonalibre.org/archives/124908.html
Fig 5. Estructura del árbol para 4 reinas disponible en:
http://www.lcc.uma.es/~av/Libro/CAP6.pdf
[-,-,-,-]0
[1,-,-,-]1 [2,-,-,-]5 [3,-,-,-]9 [4,-,-,-]13
[1,4,-,-]3 [1,3,-,-]2
[1,4,2,-]4
[2,4,-,-]6
[2,4,1,-]7
[2,4,1,3]8
[3,1,-,-]10
[3,1,4,-]11
[3,1,4,2]12
[4,1,-,-]14
[4,1,3,-]15
[4,2,-,-]16
15
1.3. Capítulo 3: APLICACIONES EN LA VIDA REAL
El problema de las n-reinas es conocido usualmente como un problema
relacionado a un juego y también como un problema apropiado para
probar algoritmos nuevos. Sin embargo, tiene otras aplicaciones ya que
se le considera como un modelo de máxima cobertura. Una solución al
problema de las n-reinas garantiza que cada objeto puede ser accesado
desde cualquiera de sus ocho direcciones vecinas (dos verticales, dos
horizontales y cuatro diagonales) sin que tenga conflictos con otros
objetos.
Sabiendo lo anterior podemos decir que el problema de las n-reinas es
aplicable para resolver el conflicto que se presenta en los Sistemas de
Comunicaciones de banda estrecha y direccional, el cual es lograr el
mayor ancho de banda posible; para ello se debe ubicar los n
transceptores del sistema, de tal manera que no se interfieran entre
ellos. Con los n transceptores ubicados en patrones sin conflictos, lo que
corresponde a una solución del problema de las n-reinas, podemos decir
que cada transceptor puede comunicarse con el mundo exterior en
forma libre en 8 direcciones sin que sea inhibido por otro transceptor. La
fig.6 muestra una distribución para 10 transceptores.
Esta distribución corresponde a una de las soluciones para el problema
de las 10-reinas.
16
Fig 6. Ubicación de 10 Transmisores/Receptores sin conflicto entre ellos (cada uno puede comunicarse en cualquier dirección vertical, horizontal o diagonal)
Algunas otras aplicaciones posibles donde se puede utilizar el problema
de las n-reinas son:
Control de tráfico aéreo
Programación de tareas computacionales
Procesamiento paralelo óptico
Compresión de datos
Balance de carga en un computador multiprocesador
Ruteo de mensajes o datos en un computador multiprocesador
Etc.
17
CONCLUSIONES
Mediante esta monografía, hemos comprendido de qué trata en si el problema
de las ocho reinas, de qué manera podemos solucionarlo y principalmente
cuáles son sus aplicaciones en la vida real.
Como hemos venido diciendo los sistemas de comunicaciones son muy
importantes en nuestra vida diaria, ya que siempre estamos transfiriendo
información. Sin embargo con los conocimientos adquiridos hemos podido dar
una mejora a cómo lograr el mayor ancho de banda posible en estos sistemas
para poder transmitir un mayor volumen de información.
El problema de las ocho reinas o n-reinas se puede implementar en diferentes
lenguajes de programación, así como java, python, c++, prolog, etc.
18
ANEXOS
19
A continuación se muestra una relación de fuentes de apreciaciones de donde
fue recopilada la información en mención en esta monografía.
APENDICE A:
Fuente de libro sobre los sistemas de comunicaciones en Internet:
Google – Books:
http://books.google.com.pe/books?id=_arH8J1d1FYC&printsec=frontco
ver&dq=sistemas+de+comunicaciones&hl=es-
419&sa=X&ei=E02zU_2_M6m0sAT5qoGQCA&ved=0CCQQ6AEwAQ#
v=onepage&q=sistemas%20de%20comunicaciones&f=false
20
APENDICE B:
Código del Problema de las n-Reinas hecho en prolog.
% Podemos ubicar 1,2,...,8, o N reinas con la regla: situar_NR(N, Solucion), % definiendo el tamaño del tablero como NxN (N número de reinas). situar_NR(N, P) :- tablero(1, N, T), ubicacionReinas(T, [], P). ubicacionReinas([], P, P). ubicacionReinas(T, R, P) :- selecciona(T, I, NL),not(atacaReina(I, R)), ubicacionReinas(NL, [I|R], P). selecciona([X|R], X, R). selecciona([A|R], X, [A|NR]) :- selecciona(R, X, NR). atacaReina(A, R) :- atacaReina(A, 1, R). atacaReina(A, B, [Y|_]) :- A is Y + B. atacaReina(A, B, [Y|_]) :- A is Y - B. atacaReina(A, B, [_|R]) :- M is B+1, atacaReina(A, M, R). tablero(A,A,[A]). tablero(A,B,[A|RL]) :- B>A, P is A+1, tablero(P,B,RL). % Podemos obtener el número de soluciones con la regla: numeroSoluciones numeroSoluciones(R,N) :- bagof(P,situar_NR(R,P),L),longitud(L,N). longitud([],0). longitud([_|A],N) :- longitud(A,N1), N is N1+1. % pregunta: numeroSoluciones(8, X). %------------------------------------------------------------------------ %------------------------********************---------------------------- % Se puede obtener soluciones sin incluir las soluciones invertidas situar_NR2(N,L) :- bagof(S,situar_NR(N,S),Lis),quitarinversas(N,Lis,L), mostrar(L),L=true. quitarinversas(_, [],[]).
21
quitarinversas(N,[P|R], [P|L]) :- borrarinv(N,P,R,NR), quitarinversas(N,NR,L). borrarinv(_,_,[],[]). borrarinv(N,P,[X|Y],NY) :- es_inversa(N,P,X),!,borrarinv(N,P,Y,NY). borrarinv(N,P,[X|Y],[X|NY]) :- borrarinv(N,P,Y,NY). es_inversa(_,[],[]). es_inversa(N,[X|R],[Y|S]) :- Z is N-X, Y is Z+1, es_inversa(N,R,S). %------------------------------------------------------------------------ mostrar([]):-!. mostrar([Cab| Cola]):- write(Cab),nl, mostrar(Cola). situar_NR21(N,L) :- bagof(S,situar_NR(N,S),Lis), quitarinversas(N,Lis,L). % Podemos obtener el número de soluciones sin contar las soluciones invertidas % con la regla: numeroSoluciones2 numeroSoluciones2(R,N) :- situar_NR21(R,L), longitud(L,N). }
22
BIBLIOGRAFIA
- Andres Spading y Pablo Itaim Ananias, Valparaiso, 12 de abril del 2005,
Optimizacion Combinatorial “El Problema de las N-Reinas”, 6 paginas.
- Wikipedia,enciclopedia libre, Problema de las ocho reinas, disponible en:
http://es.wikipedia.org/wiki/Problema_de_las_ocho_reinas
- Lizbeth, Recorrido y Búsqueda en Arboles, disponible en:
http://www.monografias.com/trabajos-pdf5/recorrido-y-busqueda-
arboles/recorrido-y-busqueda-arboles.shtml
- Riojas Cañari, Alicia Cirila, Conceptos, Algoritmo y Aplicación al problema
de las N-reinas, 83 paginas, disponible en:
http://sisbib.unmsm.edu.pe/bibvirtual/monografias/Basic/riojas_ca/contenid
o.htm