Вы находитесь на странице: 1из 126

UNIVERSIDAD CATOLICA BOLIVIANA SAN PABLO

Unidad Académica Cochabamba


Ingenierı́a de Sistemas

Sistema generador de crucigramas

Tesis de Licenciatura en Ingenierı́a de Sistemas

Rolando Lora Diez de Medina

Cochabamba – Bolivia
Febrero 2004
TRIBUNAL EXAMINADOR

................................. .................................
Dr. Davor Pavisic Mgr. Marı́a Consuelo Puente
Profesor Guı́a Profesora Relatora

................................. .................................
Mgr. Marı́a Consuelo Puente Dr. René Santa Cruz
Directora de Carrera Rector Regional
ÍNDICE GENERAL

1. INTRODUCCIÓN 1
1.1. Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1. Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2. Objetivos especı́ficos . . . . . . . . . . . . . . . . . . . . . 3
1.3. Justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4. Alcance y limitaciones . . . . . . . . . . . . . . . . . . . . . . . . 4

2. PROBLEMAS SUJETOS A LA SATISFACCIÓN DE


RESTRICCIONES 6
2.1. El problema de la construcción de crucigramas . . . . . . . . . 7
2.2. Marco conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1. Definiciones básicas . . . . . . . . . . . . . . . . . . . . . 10
2.2.2. Representación gráfica . . . . . . . . . . . . . . . . . . . . 13
2.3. Búsqueda de soluciones . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.1. Algoritmos sistemáticos de búsqueda . . . . . . . . . . . 15
2.3.2. Algoritmos de consistencia . . . . . . . . . . . . . . . . . 22

3. GENERACIÓN AUTOMATIZADA DE CRUCIGRAMAS 26


3.1. Enfoques de modelamiento . . . . . . . . . . . . . . . . . . . . . . 26
3.1.1. Modelo de instanciación por letra . . . . . . . . . . . . . 27
3.1.2. Modelo de instanciación por palabra . . . . . . . . . . . 29
3.2. Paradigmas de resolución . . . . . . . . . . . . . . . . . . . . . . 29
3.3. Diccionario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3.1. Caracterı́sticas de la lengua española . . . . . . . . . . 31
3.3.2. Árboles de búsqueda digitales . . . . . . . . . . . . . . . . 35

4. EL COMPILADOR DE CRUCIGRAMAS 37

iii
4.1. Análisis de crucigramas construidos manualmente . . . . . . . 37
4.1.1. Reglas básicas para la construcción de crucigramas . 38
4.1.2. Muestreo de indicadores de calidad para cuadrı́culas 39
4.2. Indicadores adicionales de decisión . . . . . . . . . . . . . . . . . 44
4.3. Diseño del compilador . . . . . . . . . . . . . . . . . . . . . . . . 46
4.3.1. Adaptación de backtracking dinámico . . . . . . . . . . 47
4.4. Pruebas preliminares . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.5. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.5.1. Escenario primero: variedad de cuadrı́culas . . . . . . 52
4.5.2. Escenario segundo: variación en el diccionario . . . . 53

5. EL SISTEMA 58
5.1. Análisis de requerimientos . . . . . . . . . . . . . . . . . . . . . . 58
5.1.1. Requerimientos funcionales . . . . . . . . . . . . . . . . . 58
5.1.2. Requerimientos no funcionales . . . . . . . . . . . . . . 61
5.2. Arquitectura candidata . . . . . . . . . . . . . . . . . . . . . . . . 62
5.3. Diseño de la base de datos . . . . . . . . . . . . . . . . . . . . . . 64
5.3.1. Modelamiento conceptual . . . . . . . . . . . . . . . . . . 65
5.3.2. Modelo entidad-relación . . . . . . . . . . . . . . . . . . . 66
5.4. Módulo formateador de crucigramas . . . . . . . . . . . . . . . 69
5.4.1. Formatos gráficos de alta calidad . . . . . . . . . . . . . 70
5.4.2. Formateo de crucigramas con LaTeX . . . . . . . . . . 70
5.5. Módulo compilador de crucigramas . . . . . . . . . . . . . . . . 72
5.6. Implementación del sistema . . . . . . . . . . . . . . . . . . . . . 73
5.7. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.7.1. Población de la base de datos . . . . . . . . . . . . . . . 73
5.7.2. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

CONCLUSIONES Y RECOMENDACIONES 79

BIBLIOGRAFÍA 82

iv
ANEXOS

A. Modelos ORM 1

B. Cuadrı́culas 10

C. Crucigramas 41

v
ÍNDICE DE FIGURAS

2.1. Esquema general del sistema . . . . . . . . . . . . . . . . . . . . 7


2.2. Mapa de Bolivia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3. Hipergrafo del mapa de Bolivia . . . . . . . . . . . . . . . . . . . 13
2.4. Grafo del mapa de Bolivia . . . . . . . . . . . . . . . . . . . . . . 15
2.5. Grafos de restricciones para Bolivia . . . . . . . . . . . . . . . . 23

3.1. Ejemplo de una cuadrı́cula de cuatro palabras . . . . . . . . . 28


3.2. Longitudes de palabra en el DRAE . . . . . . . . . . . . . . . . 31
3.3. Distribución de letras en el DRAE . . . . . . . . . . . . . . . . . 32
3.4. Relación frecuencia/posición . . . . . . . . . . . . . . . . . . . . 33
3.5. Distribución letra/posición . . . . . . . . . . . . . . . . . . . . . . 34
3.6. Árbol de búsqueda digital . . . . . . . . . . . . . . . . . . . . . . 36

4.1. Gráfico de densidad e integración laragrama . . . . . . . . . . 41


4.2. Cuadrı́culas de 15x15 . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3. Cuadrı́cula de 15x15 compleja . . . . . . . . . . . . . . . . . . . 43
4.4. Estructuras de datos: Celda y cuadrı́cula . . . . . . . . . . . . . 47
4.5. Estructuras de datos: Variable . . . . . . . . . . . . . . . . . . . 48
4.6. Estructuras de datos: CSP . . . . . . . . . . . . . . . . . . . . . . 49

5.1. Casos de uso elementales: Administrador . . . . . . . . . . . . 59


5.2. Casos de uso elementales: Constructor . . . . . . . . . . . . . . 60
5.3. Casos de uso elementales: Cliente . . . . . . . . . . . . . . . . . 61
5.4. Arquitectura de tres capas para el sistema . . . . . . . . . . . . 63
5.5. Modelo ORM: Diccionario . . . . . . . . . . . . . . . . . . . . . . 65
5.6. Modelo ER: Usuarios . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.7. Modelo ER: Diccionario y claves . . . . . . . . . . . . . . . . . . 68
5.8. Modelo ER: Crucigramas . . . . . . . . . . . . . . . . . . . . . . 69
5.9. Formateador de crucigramas . . . . . . . . . . . . . . . . . . . . 71

vi
5.10.Evolución hacia la solución cuadrı́cula 43 . . . . . . . . . . . . . 75
5.11.Evolución hacia la solución cuadrı́cula 61 . . . . . . . . . . . . . 76
5.12.Desempeño de la cuadrı́cula 43 . . . . . . . . . . . . . . . . . . . 77
5.13.Desempeño de la cuadrı́cula 69 . . . . . . . . . . . . . . . . . . . 78

vii
ÍNDICE DE TABLAS

2.1. Tabla de dependencias para departamentos de Bolivia . . . . 12


2.2. Tabla de restricciones para departamentos de Bolivia . . . . . 14

3.1. Ejemplos de palabras de 16 letras . . . . . . . . . . . . . . . . . 35

4.1. Comparación de caracterı́sticas distintos crucigramas . . . . . 39


4.2. Estadı́sticas de indicadores de calidad para cuadrı́culas . . . . 40
4.3. Resultados de las pruebas preliminares . . . . . . . . . . . . . . 50
4.4. Resultados de las pruebas exhaustivas . . . . . . . . . . . . . . 56
4.5. Índice de complejidad en cuadrı́culas dadas . . . . . . . . . . . 57
4.6. Resultados obtenidos con distintos diccionarios . . . . . . . . . 57

viii
Resumen

En el presente trabajo se ha estudiado de manera teórica el problema de la cons-


trucción automatizada de crucigramas y se han puesto en práctica los conceptos
recolectados para la implementación de un sistema generador de crucigramas.

Para formalizar el estudio del problema citado, se ha recurrido al marco con-


ceptual correspondiente a los problemas sujetos a la satisfacción de restricciones
(CSP’s). Este conjunto de problemas representa un área de investigación actual de
mucho interés. Esto se debe, principalmente, a que gran parte de los problemas más
difı́ciles de resolver, desde el punto de vista de la complejidad computacional, pueden
ser modelados como un CSP.

Sobre la base del marco teórico citado, se ha modelado el problema de la cons-


trucción de crucigramas como un problema sujeto a la satisfacción de restricciones.
Posteriormente, se ha utilizado el algoritmo de backtracking dinámico en combinación
a algoritmos de consistencia para la resolución del mismo.

Los resultados obtenidos han sido satisfactorios, lográndose la construcción de


crucigramas en base a cuadrı́culas con indicadores de calidad altos. Se ha visto que
el emplear una base de datos de palabras y claves de alta calidad, derivarı́a en cruci-
gramas comparables con aquellos publicados en medios de comunicación prestigiosos.

Palabras clave: crucigramas, problemas sujetos a la satisfacción de restricciones,


CSP’s, algoritmos sistemáticos de búsqueda, algoritmos de consistencia, backtracking
dinámico, inteligencia artificial.
CAPÍTULO 1
INTRODUCCIÓN

Los crucigramas son uno de los pasatiempos favoritos de miles de personas en


todo el mundo. Aparecieron en Inglaterra a finales del siglo diecinueve, pero eran
muy elementales y estaban orientados sobre todo a los niños. En aquel entonces no
tuvieron una gran acogida y pasaron por algunos años desapercibidos.

El pasatiempo consiste en llenar una cuadrı́cula, utilizando una letra por casilla,
con palabras que puedan ser leı́das en sentido horizontal o vertical y cuyo significado
se sugiere mediante claves. La cuadrı́cula se compone parcialmente de casillas nulas,
aquellas que no albergarán ninguna letra, y casillas abiertas, denominadas también
celdas abiertas. La caracterı́stica principal de los crucigramas radica en que algunas
celdas abiertas, en muchos casos todas, son utilizadas para formar una palabra ver-
tical y otra horizontal. Esta caracterı́stica, inherente en los crucigramas, de cruzar
palabras, permite a las personas la obtención de pistas sobre las palabras incompletas
a medida que se vaya resolviendo el resto de la cuadrı́cula.

En el año 1913 un periodista inglés, de nombre Arthur Wynne, publicó en el


periódico New York World el primer crucigrama orientado hacia el público en gene-
ral. Dicha publicación acreditó a Wynne como el inventor del, ahora muy popular,
pasatiempo.

A partir de los años veinte, muchos periódicos comenzaron a publicar crucigramas.


El éxito fue tal, que al final de la década casi todos los periódicos estadounidenses
incluı́an estos acertijos en sus publicaciones habituales. Posteriormente los crucigra-
mas comenzaron a reaparecer en Europa. Empezó a surgir un grupo de personas,
muy hábiles y creativas, que se dedicaron a imponer su estilo en la construcción de
los acertijos. Fueron estas personas quienes establecieron ciertos parámetros para la
construcción de crucigramas, los cuales se toman en cuenta hasta hoy en dı́a.

A mediados de los años setenta, L. J. Mazlack fue la primera persona en

1
crear crucigramas simples utilizando una computadora. Su trabajo, publicado en
el artı́culo Computer Construction of Crossword Puzzles using Precedence Relation-
ships [MAZ76], fue retomado por otros informáticos, quienes desarrollaron nuevas
metodologı́as desde entonces.

En el año 1979, Johnson y Garey, incluyeron en su libro Computers and Intrac-


tability [GAR79], la definición formal del problema referente a la construcción general
de crucigramas. Clasificaron a dicho problema, según determinasen Lewis y Papadi-
mitriu unos años antes, como NP-Completo.

A mediados de los ochenta, los crucigramas construidos por computadoras ya


tenı́an un nivel aceptable para la publicación, sin embargo estaban muy lejos de
igualar, en calidad, el nivel de aquellos compilados por humanos.

Actualmente, existen algunas aplicaciones comerciales para compilar crucigramas


que tienen un buen desempeño. No obstante, el problema sigue siendo muy estudiado
y se investigan métodos que permitan construir crucigramas sobre cuadrı́culas de alta
calidad. Cuadrı́culas como aquellas utilizadas en medios de publicación prestigiosos
a nivel mundial.

1.1. Problema

Debido a la popularidad que han alcanzado los crucigramas, la mayorı́a de los


diarios y revistas se ven en la necesidad de publicar periódicamente tales acertijos.
La construcción manual de crucigramas exige tiempo y talento, por lo que los medios
deben contar con especialistas que se dediquen por completo a esta tarea. Tal situa-
ción deriva en costos, tanto económicos como del tiempo empleado en la elaboración,
que en muchos casos no pueden ser justificados.

2
1.2. Objetivos

1.2.1. Objetivo general

Implementar un sistema generador de crucigramas personalizados, que pueda


brindar sus servicios a través de Internet, y cuyo producto final pueda ser
competitivo.

1.2.2. Objetivos especı́ficos

Implementar un compilador de crucigramas que trabaje a partir de requeri-


mientos personalizados.

Implementar un sistema, basado en tecnologı́a Internet, que sirva de interfaz


entre el compilador y los usuarios y que, además, permita administrar la base
de datos de claves y palabras.

Implementar un módulo que permita formatear los crucigramas generados de


manera que se puedan lograr impresiones de alta calidad.

Permitir a usuarios administradores alimentar la base de datos con el objetivo


de ampliar y diversificar los contenidos.

1.3. Justificación

El sistema generador de crucigramas pretende reunir caracterı́sticas funcionales


que deriven en un producto de alta calidad, que pueda competir tanto en el medio
local como en el global. A esto se suman las ventajas que otorga un sistema que
pueda funcionar a través de Internet. Siendo la principal el poder prestar servicios a
miles de personas y permitir, en todo momento, la administración remota de la base
de datos.

El sistema estará orientado a cubrir la demanda de aquellos medios y personas


que deseen tener acceso a crucigramas generados a pedido y de acuerdo a necesidades

3
especı́ficas.

Por otro lado, el problema referente a la compilación automatizada de crucigra-


mas ha sido abordado muchas veces y desde diversos puntos de vista. Muchos de los
métodos utilizados para resolver este problema y otros similares, son resultado de
estudios realizados, durante los últimos treinta años, en el área de inteligencia arti-
ficial. Sin embargo, la búsqueda de nuevos y mejores algoritmos para resolver este
tipo de problemas continua. De tal manera, el estudio de las áreas relacionadas a la
construcción de crucigramas, hacen que el proyecto sea más interesante y atractivo.

1.4. Alcance y limitaciones

El sistema contará con las siguientes caracterı́sticas:

El usuario podrá personalizar sus crucigramas determinando los valores de los


siguientes parámetros:

Geometrı́a: Se compone de las dimensiones de la cuadrı́cula (número de


casillas a lo ancho por número de casillas a lo largo) más el patrón de la
misma. El patrón está definido por la distribución de celdas disponibles y
nulas. El usuario podrá elegir entre un conjunto de cuadrı́culas de diversas
geometrı́as provistas por el sistema.

Temas: El usuario podrá elegir, entre un conjunto de temas disponibles,


aquellos de los que desea que se obtengan las palabras para construir el
crucigrama.

Complejidad: Se refiere al nivel de dificultad del crucigrama. El usuario


podrá escoger entre tres niveles: fácil, normal y difı́cil.

El producto final estará compuesto por el crucigrama generado y la respectiva


solución.

Los usuarios del sistema podrán realizar un seguimiento de sus crucigramas, con
la posibilidad de descargar cualquiera de ellos en formato final de impresión.

4
El sistema permitirá la administración de usuarios, temas, palabras, claves,
cuadrı́culas y crucigramas.

El sistema propuesto estará limitado en los siguientes aspectos:

Las cuadrı́culas ingresadas al sistema serán sujetas a la aprobación de un ad-


ministrador, en función a la capacidad del sistema de resolver crucigramas
en dichas cuadrı́culas. Una vez aprobadas, recién podrán ser consideradas en
solicitudes realizadas por usuarios finales.

La generación del producto final no será inmediata, por lo que el cliente reci-
birá una notificación por correo electrónico con la dirección donde podrá rea-
lizar la descarga respectiva.

El compilador de crucigramas utilizará claves textuales solamente, las que


harán referencia estrictamente a palabras.

Se trabajará con una base de datos compuesta por un diccionario de palabras


en español, claves, categorı́as y niveles de complejidad, pero la asignación de
relaciones se realizará de forma aleatoria. Las claves correspondientes a las
palabras serán ficticias y tendrán como único objetivo la realización de pruebas
en escenarios más cercanos a la realidad.

5
CAPÍTULO 2
PROBLEMAS SUJETOS A LA SATISFACCIÓN DE RESTRICCIONES

El proyecto que se propone está orientado al desarrollo de un sistema generador


de crucigramas, el cual funcionarı́a a través de Internet. Los objetivos especı́ficos pro-
puestos en el anterior capı́tulo permiten distribuir el trabajo a realizar en tres áreas
claramente identificables. La primera, y aparentemente la de mayor complejidad,
consiste en el diseño y desarrollo de un compilador de crucigramas. La segunda,
estrechamente relacionada a la anterior, dirige los esfuerzos a la obtención de un
formateador, cuya labor (fundamentalmente) es generar en formato gráfico final los
crucigramas obtenidos por el compilador. Finalmente resta mencionar, como tercera
área de trabajo, al sistema encargado de coordinar la interacción entre los usuarios
y las tareas que éstos pueden realizar. La figura 2.1 representa de manera general
las distintas áreas mencionadas y la relación, tentativa, que existe entre cada una de
ellas.

El presente capı́tulo pretende cubrir una pequeña parte del marco teórico nece-
sario para conseguir resolver satisfactoriamente el desarrollo del compilador de cru-
cigramas. Se comenzará definiendo formalmente el problema de la construcción de
crucigramas, luego se identificará las caracterı́sticas más importantes de este proble-
ma y se estudiará lo que son los problemas sujetos a la satisfacción de restricciones.
Se finalizará el capı́tulo planteando algunos algoritmos que pueden ser utilizados
para resolver el tipo de problemas citado.

Inicialmente se desea aclarar el significado del término “compilador” dentro del


contexto del proyecto propuesto. Según el diccionario de la Real Academia de la
Lengua Española, la palabra “compilador” significa: “Que compila”, vale decir: “Que
reúne, en un solo cuerpo, partes, extractos o materias de otros libros o documentos”.
En el ambiente relacionado a los crucigramas la palabra “compilador” se utiliza
para denominar a la persona que, utilizando un diccionario de palabras, construye
crucigramas.

6
SISTEMA GENERADOR DE CRUCIGRAMAS PERSONALIZADOS

C A S A

F O R A N A

Crucigrama (gráfico) Formateador P E N A L T I

A R O C A N

S U C R E Ñ A

A L E A D O
Crucigrama (lógico) A N S A

Compilador Claves
BD

Requisitos

Requisitos
- Geometría
Crucigrama (gráfico) Interfaz Web INTERNET
- Complejidad
- Temas

Figura 2.1: Esquema general del sistema basado en los objetivos que se desean lograr. Se
destaca el acceso a través de Internet y una arquitectura candidata basada en tres módulos
independientes.

2.1. El problema de la construcción de crucigramas

Desde hace más de cincuenta años, expertos en el área de informática teórica


han estado construyendo los cimientos conceptuales necesarios para desarrollar parte
del mundo tecnológico que nos rodea. A principios de los años setenta un grupo de
cientı́ficos, que estudiaba la complejidad de los problemas de cómputo, identificó una
gran clase de problemas denominada problemas NP-Completos.

En informática teórica los problemas son clasificados según su complejidad. Los


problemas que pertenecen a la clase P, por ejemplo, son aquellos que pueden ser
resueltos por un algoritmo en tiempo polinomial.

Los problemas NP-Completos son muy difı́ciles de resolver, ya que la complejidad


de estos excede la capacidad de cómputo. Por el hecho de que ningún problema de
esta clase pueda ser resuelto en tiempo polinomial (salvo que P = NP ) se utilizan
algoritmos de aproximación que en muchos casos encuentran soluciones lo suficiente-
mente buenas como para ser utilizadas en la práctica. La pregunta de si “P 6= N P ”
representa uno de los problemas de investigación abiertos más intrigantes de la ac-
tualidad.

7
El estudio de los problemas NP-Completos genera mucho interés, debido a que
una diversidad de problemas cotidianos de gran importancia han sido clasificados
como NP-Completos. Lo interesente es que la teorı́a indica que si resolvemos un
problema NP-Completo en tiempo polinomial, entonces todos los problemas de esta
clase tienen una solución en tiempo polinomial.

Los problemas NP-Completos aparecen en diversas áreas de estudio, como ser:


álgebra booleana, grafos, aritmética, redes, planificación, etc. Algunos problemas
NP-Completos son: El problema del vendedor viajero, el coloreo de un grafo con
tres colores, el problema de empaquetamiento y el problema de la construcción de
crucigramas, el cual se define a continuación:

Definición 2.1 Dada una matriz de dimensiones N × M compuesta por 1’s y 0’s, y
un conjunto finito de palabras, el problema de la construcción de crucigramas consiste
en asignar letras a todas aquellas casillas marcadas con 0 tal que las secuencias
máximas, tanto horizontales como verticales, de estas casillas contengan palabras
válidas.

Para que un problema sea clasificado como NP-Completo debe pertenecer a la


clase NP y debe ser NP-Hard. Para comprobar si un problema pertenece a NP basta
definir un algoritmo que verifique si una solución planteada es correcta en tiempo
polinomial. Comprobar que el problema es NP-Hard es una labor un poco más
complicada, que se basa, principalmente, en el concepto de reductibilidad en tiempo
polinomial. Se recomienda leer el capı́tulo “NP Completeness” de [COR90] para una
introducción a esta área de la informática teórica.

Para fines prácticos del presente trabajo basta mencionar que el problema de
la construcción de crucigramas es NP-Completo. Los primeros en comprobarlo fue-
ron Lewis y Papadimitriu en los años setenta, quienes utilizaron la metodologı́a de
reducción, reduciendo el problema Cobertura exacta por 3-Conjuntos al problema
dado [GAR79].

El problema de la construcción de crucigramas, además de estar clasificado como

8
un problema NP-Completo, es un problema sujeto a la satisfacción de restricciones.

Los problemas sujetos a la satisfacción de restricciones, conocidos también como


CSP’s (del inglés Constraint Satisfaction Problem), abarcan una gran cantidad de
problemas, principalmente los pertenecientes al área de la investigación de operacio-
nes, la mayorı́a de ellos clasificados como NP-Completos.

Existe un marco teórico unificado que permite el estudio de los problemas sujetos
a la satisfacción de restricciones. Esto ha contribuido a lograr avances importantes
en la resolución de este tipo de problemas.

Siendo el problema de la construcción de crucigramas un CSP, se vió conveniente


abordar la solución al problema a partir del marco teórico correspondiente a estos
problemas.

2.2. Marco conceptual

Los problemas sujetos a la satisfacción de restricciones son un área de investi-


gación actual muy importante. El estudio de este tipo de problemas fue iniciado
el año 1974 por Montanari, quien los utilizó como una manera de describir ciertos
problemas combinatorios que surgieron en el procesamiento de imágenes [PEA97].

Al poco tiempo se descubrió que el marco conceptual que propuso Montanari se


adaptaba a una gran variedad de problemas, desde entonces se ha intensificado el
estudio de esta área, tanto de manera teórica como práctica, y se han logrado avances
significativos.

En la presente sección se introducen algunas definiciones básicas que permitirán


formalizar lo que es un problema sujeto a la satisfacción de restricciones, para pos-
teriormente estudiar de qué manera se puede afrontar la resolución de problemas de
este tipo.

9
2.2.1. Definiciones básicas

Definición 2.2 (CSP) Un problema sujeto a la satisfacción de restricciones P


se define por una tupla (X, D, C), donde X es un conjunto finito de n variables
{x1 , ..., xn }, D es un conjunto finito de dominios, cada cual asociado a una variable
{D(x1 ), ..., D(xn )}, y C es un conjunto de restricciones aplicadas a subconjuntos de
variables en X.

El dominio de una variable es el conjunto de valores que pueden ser asignados a


ella. Se utilizará el término “etiqueta” a la asignación de un valor, de su respectivo
dominio, a una variable. Una solución a P es la asignación de un valor ai ∈ Di a
xi , 1 ≤ i ≤ n que satisface todas las restricciones. Si dicha solución no existe se dice
que no es posible satisfacer el problema.

Finalmente C es un conjunto finito de restricciones y cada restricción c ∈ C


es un par (W, Q), donde W = {w1 , ..., wk } es un subconjunto ordenado de X ,y
Q ⊆ D(w1 ) × · · · × D(wk ) es un predicado sobre esas variables.

Las restricciones muchas veces se modelan explı́citamente utilizando un conjun-


to de tuplas que las satisfagan. Sin embargo para fines prácticos es mejor utilizar
funciones booleanas. De esta manera la función recibirı́a una instancia del conjun-
to de variables y devolverı́a verdadero si satisfacen la restricción y falso de otro
modo [SIL00].

Definición 2.3 (Rigidez) Dada una restricción c ∈ C donde W = {x1 , ..., xk }, la


rigidez de la misma se define mediante la siguiente relación [SIL00]:

|Q|
T =
|D(x1 ) × · · · × D(xk )|

Con el objetivo de esclarecer las anteriores definiciones, a continuación se desa-


rrolla un ejemplo que denota la manera de modelar correctamente un CSP.

Ejemplo: Coloreo de un mapa

Dado el mapa de Bolivia (figura 2.2a) se desea colorear cada departamento de


manera que dos departamentos vecinos tengan asignados colores distintos. Los colores
permitidos son: rojo, amarillo y verde.

10
x9 R

V
x8
x4
A
x1 x7 R A

x5 V

x2 V
x6 A

x3 R

(a) Mapa de Bolivia con la respectiva (b) Una posible solución al problema de
asignación de variables. coloreo de un mapa

Figura 2.2: Mapa de Bolivia utilizado como ejemplo para entender el modelo de problemas
sujetos a la satisfacción de restricciones. En la primera figura se observa una posible asignación
de variables, y en la segunda una solución satisfactoria al problema.

Se logra distinguir que para este problema, el conjunto de variables X está repre-
sentado por los departamentos a los cuales se desea asignar un color. Formalmente:
X = {x1 , ..., x9 } donde xi representa a uno de los nueve departamentos de Bolivia.
Como solo es posible utilizar tres colores, entonces D(xi ) = {rojo, amarillo, verde}
con 1 ≤ i ≤ 9.

Se construyen las restricciones en base a la tabla 2.1. Por ejemplo para el de-
partamento de Tarija, en base a la definición 2.2, se tiene que: W = {x3 , x2 , x6 } y
Q = {(r, a, v), (r, v, a), ..., (v, a, r)}. Como se empieza a apreciar, en gran parte de los
problemas reales, calcular explicitamente el sub-conjunto de D(w1 ) × · · · × D(wk )
que satisface una restricción dada puede resultar una tarea muy costosa (sobre to-
do cuando existen más variables relacionadas, como en el caso de Cochabamba). Se
procede de la misma manera para modelar las demás restricciones.

Una vez concluida esta etapa, se deberá realizar la búsqueda de una asignación
de variables que no viole ninguna restricción. Esta búsqueda permitirá encontrar una
o más soluciones al problema o, caso contrario, afirmar que no existe una manera

11
Departamento Variable Departamentos vecinos
Cochabamba x1 x2 , x4 , x5 , x6 , x7 , x8
Sucre x2 x1 , x3 , x6 , x7
Tarija x3 x2 , x6
La Paz x4 x1 , x5 , x8 , x9
Oruro x5 x1 , x2 , x3 , x4 , x6
Potosı́ x6 x1 , x2 , x5
Santa Cruz x7 x1 , x2 , x3 , x8
Beni x8 x1 , x4 , x7 , x9
Pando x9 x4 , x8

Cuadro 2.1: Tabla de departamentos de Bolivia y dependencias.

satisfactoria de asignar valores a las variables. Para el ejemplo planteado, una posible
solución puede ser observada en la figura 2.2b.

El ejemplo anterior permite familiarizarnos con la definición formal de los proble-


mas sujetos a la satisfacción de restricciones. Sin embargo el problema que se desea
resolver es la búsqueda de una solución válida, la cual se complica mucho a medida
que aumenta la cantidad de variables o la cardinalidad de los dominios.

Hagamos un análisis de lo que ocurre con el departamento de Tarija. La restric-


ción en este caso reside en {x3 , x2 , x6 }, concretamente en el departamento anterior-
mente citado, Sucre y Potosı́. A estos tres departamentos deberán ser asignados tres
colores distintos (de hecho los únicos con los que contamos). Formalmente se de-
berá tomar un sub-conjunto de C = D(x3 ) × D(x2 ) × D(x6 ) en el que cada elemento
satisfaga la restricción. Como sabemos que |D(xi )| = 3, podemos afirmar que:

|C| = |D(x3 )| × |D(x2 )| × |D(x6 )| = 27

De los 27 elementos que componen este conjunto solamente los siguientes 6 elementos
{(r, a, v), (r, v, a), (a, r, v), (a, v, r), (v, r, a), (v, a, r)} se componen de colores diferen-
tes. Esta relación permite medir la rigidez de la restricción. Según la definición 2.3:
T = 6/27. Se puede deducir que las restricciones cuya rigidez se aproxima al valor
de 1 son mucho más holgadas que las que se hallan cercanas al 0.

12
Figura 2.3: Hipergrafo que representa la relación entre variables y restricciones del ejem-
plo 2.2.1. Se tomaron en cuenta solamente las restricciones correspondientes a La Paz, Santa
Cruz, Tarija y Pando por lo que el hipergrafo representa parcialmente la red de restricciones
del problema.

2.2.2. Representación gráfica

En general cualquier problema sujeto a la satisfacción de restricciones puede ser


asociado a una estructura matemática denominada hipergrafo, que sintetiza como las
variables del problema se relacionan. En un hipergrafo, los nodos representan las va-
riables del problema y los hiperarcos, dibujados como regiones de nodos, agrupan las
variables que corresponden a la misma restricción [DEC92]. Por ejemplo la figura 2.3
muestra el hipergrafo correspondiente a la red de restricciones parcial del problema
de colorear el mapa de Bolivia.

En el caso que las restricciones de un problema sean unarias o binarias (cada


restricción se define sobre máximo dos variables), se podrı́a utilizar un grafo para
representar la red de restricciones. Adicionalmente, dado que es posible convertir
cualquier restricción k-aria a un grupo de restricciones binarias [KUM92], la repre-
sentación de una red de restricciones utilizando un grafo podrı́a aplicarse a cualquier
CSP.

El grafo utilizado para representar una red de restricciones de la manera citada,

13
Departamento Variable Restricciones
Cochabamba x1 {(x1 , x2 ), (x1 , x4 ), (x1 , x5 ), (x1 , x6 ), (x1 , x7 ), (x1 , x8 )}
Sucre x2 {(x2 , x1 ), (x2 , x3 ), (x2 , x6 ), (x2 , x7 )}
Tarija x3 {(x3 , x2 ), (x3 , x6 )}
La Paz x4 {(x4 , x1 ), (x4 , x5 ), (x4 , x8 ), (x4 , x9 )}
Oruro x5 {(x5 , x1 ), (x5 , x2 ), (x5 , x3 ), (x5 , x4 ), (x5 , x6 )}
Potosı́ x6 {(x6 , x1 ), (x6 , x2 ), (x6 , x3 ), (x6 , x5 )}
Santa Cruz x7 {(x7 , x1 ), (x7 , x2 ), (x7 , x8 )}
Beni x8 {(x8 , x1 ), (x8 , x4 ), (x8 , x7 ), (x8 , x9 )}
Pando x9 {(x9 , x4 ), (x9 , x8 )}

Cuadro 2.2: Tabla de departamentos de Bolivia y el conjunto de restricciones que recaen sobre
cada uno de ellos.

se denomina grafo de restricciones primitivo. Los nodos representan a las variables


del problema y se asocia con un arco todos los pares de nodos que comparten una
restricción [DEC92]. La figura 2.4 representa el grafo de restricciones del proble-
ma 2.2.1 y la tabla 2.2 enumera el conjunto de restricciones que recae sobre cada
departamento.

Representar la red de restricciones de un problema sujeto a la satisfacción de


restricciones utilizando un grafo, permite el uso de algoritmos que hacen uso de las
caracterı́sticas inherentes a esta estructura. En [DEC92] se sugiere una representación
adicional denominada grafo de restricciones dual. En este caso, los nodos representan
un conjunto de variables que componen una restricción y los arcos se utilizan para
denotar pares de restricciones que comparten variables entre sı́. Los arcos se etiquetan
con las variables que tienen en común dos nodos de restricciones.

2.3. Búsqueda de soluciones

Una vez que se modela un problema sujeto a la satisfacción de restricciones lo que


interesa es la búsqueda de soluciones a ese problema. Dependiendo del caso, algunas
veces se desea encontrar una solución, otras interesa enumerar todas las soluciones
posibles y en algún caso solamente saber si es que alguna solución existe.

14
Figura 2.4: Grafo que representa la relación entre variables y restricciones del ejemplo 2.2.1

Una manera directa de resolver un CSP consiste en generar todas las posibles
asignaciones de valores a las variables y probar si se satisfacen todas las restricciones.
Este enfoque se denomina generar y probar y constituye la manera más ineficiente de
afrontar la resolución de un problema de estas caracterı́sticas. Un cálculo aproximado
del tiempo que tomarı́a construir crucigramas utilizando este método se encuentra
en el siguiente capı́tulo.

Entre las técnicas utilizadas para resolver problemas sujetos a la satisfacción de


restricciones, se puede identificar dos familias de algoritmos, cada cual con carac-
terı́sticas importantes:

Algoritmos sistemáticos de búsqueda

Algoritmos de consistencia

2.3.1. Algoritmos sistemáticos de búsqueda

Los algoritmos sistemáticos determinan si una solución al problema existe bus-


cando en todo el espacio. Esta búsqueda, por lo general, se realiza de una manera

15
Algoritmo 2.1 Backtracking es el algoritmo sistemático más sencillo para resolver CSP’s.
Recibe como parámetros un problema sujeto a la satisfacción de restricciones y un conjunto
de pares, inicialmente vacı́o, que representa asignaciones a variables. El algoritmo devuelve un
conjunto de pares que contiene asignaciones válidas a las variables del problema o UNSAT en
caso de que no exista una solución.
1: Backtracking(P, f ) → resp
2: si f es una asignación total en P entonces
3: resp ← f
4: c/cont
5: resp ← UNSAT
6: v ← escogerV ariable(P )
7: para todo (x ∈ Dv ) mientras (resp = UNSAT ) hacer
8: si (f ∪ {(v, x)}) satisface las restricciones de P entonces
9: f ← f ∪ {(v, x)}
10: resp ← Backtracking(P, f )
11: fin si
12: fin para
13: fin si
14: retornar resp

ordenada lo cual asegura la completitud de los algoritmos. Es decir que se puede


probar teóricamente que el algoritmo terminará devolviendo una respuesta, y que se
puede estimar el orden de magnitud del tiempo requerido por el mismo.

Entre los algoritmos sistemáticos de búsqueda, el más sencillo utilizado en la


práctica se denomina backtracking y se asemeja a una búsqueda en profundidad.
Backtracking (ver algoritmo 2.1) puede realizar la asignación de valores a las va-
riables en un orden predefinido o decidir que variable instanciar a continuación en
base a alguna heurı́stica de instanciación. En el caso del algoritmo 2.1 se aprecia
la existencia de una función denominada escogerVariable que se encarga de elegir
la siguiente variable a instanciar. Esta función podrá implementar una heurı́stica o
fijar un orden determinado.

El algoritmo de backtracking se diferencia del enfoque generar y probar en un


aspecto fundamental, que radica en el hecho de trabajar siempre con soluciones
parciales válidas. Esta caracterı́stica es común en la mayorı́a de los algoritmos sis-
temáticos para resolver CSP’s, claro está que nada asegura que una solución parcial

16
podrá ser extendida a una final.

En sı́ntesis, backtracking realiza asignaciones a las variables de una manera orde-


nada, hasta encontrar un conflicto. Por conflicto se entiende que se han agotado los
valores de un dominio que puedan ser asignados a una variable que satisface todas
las restricciones. Llegado a este punto, backtracking regresa a la anterior asignación
y la modifica en un intento de sortear los conflictos que causaron esta vuelta atrás.
En caso de no lograr este objetivo, backtracking continúa rehaciendo las asignaciones
de manera ordenada.

Backtracking posee un mecanismo de resolución de conflictos ineficiente lo que


deriva en un conjunto de anomalı́as conocidas como trashing [BAK95]. Estas ano-
malı́as se caracterizan por el desperdicio de tiempo buscando en porciones del espacio
que no son relevantes a la solución.

La cantidad de trashing que se puede generar al tratar de solucionar algunos pro-


blemas, puede hacer este enfoque intratable en la práctica. Según Kumar [KUM92]
la anomalı́a citada tiene dos posibles causas: inconsistencia de nodo o falta de con-
sistencia de arco.

La inconsistencia de nodo radica en que si existe una restricción unaria que impide
la asignación de cierto valor de Di a xi , entonces cada vez que backtracking asigne
ese valor resultará en una violación inmediata de tal restricción. Esto se soluciona
eliminando todos los valores de Di que están restringidos a xi .

La falta de consistencia de arco ocurre de la siguiente manera. Suponga que las


variables se inician en el orden x1 , x2 , ..., xi , ..., xj , ..., xn y que existe una restricción
binaria entre xi y xj tal que si xi = λ entonces xj no puede ser instanciada con
ningún valor [KUM92]. Se ve claramente que una vez que se instancia xi = λ el
problema se vuelve inconsistente. Sin embargo, esto se descubrirá recién cuando
debamos instanciar xj , aun en esa instancia el algoritmo volverı́a atrás repetidas
veces tratando de solucionar el problema.

17
Algoritmo 2.2 Backjumping lleva a cabo una resolución de conflictos de manera inteligente,
lo que le permite reducir significativamente la cantidad de trashing que efectúa backtracking.
Pese a eso no elimina por completo esta anomalı́a.
1: Backjumping(P, f ) → (f 0 , Γ)
2: si f es una asignación total en P entonces
3: retornar (f, φ)
4: c/cont
5: v ← escogerV ariable(P )
6: resp ← UNSAT
7: Γ←φ
8: para todo (x ∈ Dv ) hacer
9: si (f ∪ {(v, x)}) satisface las restricciones de P entonces
10: f ← f ∪ {(v, x)}
11: (resp, Γ0 ) ← Backjumping(P, f )
12: c/cont
13: Γ0 ← Conjunto de variables que forman parte del conflicto
14: fin si
15: si resp 6= UNSAT entonces
16: retornar (resp, φ)
17: c/cont si v ∈ / Γ0 entonces
18: retornar (UNSAT , Γ0 )
19: c/cont
20: Γ ← Γ ∪ (Γ0 − {v})
21: fin si
22: fin para
23: fin si
24: retornar (UNSAT , Γ)

Una mejor alternativa a backtracking es backjumping (ver algoritmo 2.2). La


diferencia entre estos dos algoritmos radica en que el segundo realiza una resolución
de conflictos más inteligente. Básicamente, una vez que backjumping se encuentra
imposibilitado de realizar una asignación válida a la variable seleccionada, identifica
cuales de las variables ya asignadas están ocasionando el conflicto. De este conjunto
elige cuál es la variable cronólogicamente más antigua y retorna hasta ese punto en
la búsqueda desechando las asignaciones que se hicieron de por medio.

Backjumping soluciona gran parte de las anomalı́as de backtracking convirtiéndolo


en un método viable para resolver problemas en la práctica. Pese a eso, el algoritmo
sigue sufriendo el fenómeno de trashing (aunque en menor grado que backtracking)

18
debido a que al deshacer el trabajo intermedio pierde información relevante que
podrı́a ser utilizada para evitar caer en errores repetidamente.

En busca de un algoritmo más inteligente, Stallman y Sussman propusieron una


variación de backtracking que se orienta por dependencias. El algoritmo conocido
como DDB (dependency-directed backtracking) utiliza un conjunto de valores elimi-
nados que se construye durante la búsqueda y que rige la dirección de la misma de
una manera mucho más eficaz que backjumping. DDB es considerado un algoritmo
“agresivo” de búsqueda debido a que se vale de toda la información que se puede
deducir de los errores, para realizar decisiones más acertadas. Sin embargo, la eficacia
de DDB se contrasta con la eficiencia y complejidad del algoritmo. Puntualmente,
DDB tiene un costo enorme en cuanto a requerimientos de memoria, la complejidad
en espacio es exponencial, lo que lo convierte en un algoritmo inapropiado en la
práctica.

En el año 1993, Ginsberg propuso un algoritmo sistemático de backtracking que


poseı́a muchas de las propiedades de los mencionados anteriormente, añadiendo al-
gunas otras y, lo más importante, manteniéndose polinomial en espacio. De hecho
backtracking dinámico (como fue denominado) fue el primer algoritmo “agresivo” de
backtracking que tenı́a esta caracterı́stica.

Backtracking dinámico ha sido un aporte importante a los métodos de búsqueda


para resolver CSP’s. Desde el año 1993, se han propuesto muchas modificaciones subs-
tanciales y se lo ha utilizado con éxito en problemas de planificación reales [GIN96].

Antes de plantear el algoritmo de backtracking dinámico es necesario conocer al-


gunas definiciones adicionales. A continuación se presentan los conceptos de solución
parcial y mecanismo de eliminación, tomados de [GIN93].

Definición 2.4 Sea (X, D, C) un problema sujeto a la satisfacción de restricciones.


Por solución parcial al problema, se entiende un subconjunto ordenado J ⊆ X más
una asignación permitida de un valor a cada variable de J. Se denotará una solución
parcial utilizando una tupla de pares ordenados, donde cada par (i, v) asigna el valor

19
v a la variable i. Dada una solución parcial P , de denotará P al conjunto de variables
asignadas por P .

Definición 2.5 Dada una solución parcial P a un problema sujeto a la satisfacción


de restricciones, una explicación de eliminación para una variable i está dada por el
par (v, S) donde v ∈ Di y S ⊆ P . Lo que significa que i no puede tomar el valor v
debido a los valores asignados por P a las variables en S.

Un mecanismo de eliminación ² para un CSP es una función que acepta como


argumentos una solución parcial P , y una variable i ∈ / P . La función retorna un
conjunto (posiblemente vacio) ²(P, i) de explicaciones de eliminación para i.

Para un conjunto E de explicaciones de eliminación, se denotará E al conjunto


de valores identificados como eliminados, sin importar las razones dadas. Conse-
cuentemente se utilizará la notación ²(P, i) para representar el conjunto de valores
eliminados por elementos de ²(P, i).

En base a las definiciones 2.4 y 2.5 es posible plantear el algoritmo 2.3, que es, ex-
cluyendo algunas diferencias de forma y notación, la versión original de backtracking
dinámico según la propusiese Ginsberg el año 93.

El algoritmo de backtracking dinámico es menos claro que los anteriores algorit-


mos citados. De entrada, es un poco difı́cil comprender a primera vista cómo funciona
y asegurar que es correcto. Por ejemplo, el hecho de que el algoritmo termina, además
devolviendo una respuesta correcta, no es tan evidente. Ginsberg probó en [GIN93]
que backtracking dinámico siempre termina, la prueba se basa en que al momento de
realizar una vuelta atrás, siempre se escoge de las variables conflictivas a la última
que fue asignada en la solución parcial, para retirarla del problema.

Una caracterı́stica muy importante del algoritmo es que conserva el trabajo in-
termedio. Esto se debe a que resuelve conflictos basado en las explicaciones de elimi-
nación, lo que hace que elementos de la solución parcial ajenos al conflicto no sean
modificados. Esto aunque tales variables hayan sido asignadas en medio de la variable
identificada como origen del conflicto y la variable que sufrió las consecuencias.

Backtracking dinámico fue incorparado al problema de la generación de crucigra-

20
Algoritmo 2.3 Backtracking dinámico fue propuesto por Ginsberg el año 1993. En promedio
tiene un performance mejor a backjumping debido a que retiene información relevante necesaria
para resolver conflictos.
1: BacktrackingDinamico(P, ²) → f
2: f ←∅
3: Ex ← ∅ para todo x ∈ X
4: mientras f 6= X hacer
5: i ← escogerV ariable() {i ∈ X − f }
6: Ei ← Ei ∪ ²(f, v)
7: S ← Di − Ei
8: si S 6= ∅ entonces
9: v ← escogerElemento(S)
10: f ← f ∪ (i, v)
11: c/cont
12: E ← variables(Ei )
13: si E = ∅ entonces
14: retornar UNSAT
15: c/cont
16: Sea (j, vj ) la última entrada en f vinculada a una variable de E
17: Eliminar (j, vj ) de f
18: Eliminar (de las variables asignadas) las explicaciones asociadas a j
19: Ej ← Ej ∪ (vj , E ∩ f )
20: fin si
21: fin si
22: fin mientras
23: retornar f

mas descrito en [GIN90] obteniendo mejoras significativas en eficiencia en función a


otros algoritmos.

Pese a todo, backtracking dinámico está muy lejos de ser el algoritmo “perfecto”
que la comunidad de cientı́ficos espera encontrar algún dı́a. Si bien tiene cualidades
muy interesantes y ha sido probado en la práctica, el algoritmo tiene algunos pro-
blemas también. En el artı́culo The hazards of fancy backtracking [BAK95], Baker
demuestra que para algunos problemas backtracking dinámico tiene un performance
peor comparado con casos promedio resueltos por otros algoritmos. En el mismo
artı́culo se estudia las causas de este comportamiento y se propone una variación
interesante.

21
La amenaza más grande al realizar búsquedas utilizando backtracking dinámico,
es la denominada anomalı́a del error temprano. Esta anomalı́a, presente también en
todos los algoritmos de backtracking citados, dificulta una recuperación a tiempo de
errores cometidos al principio, pero que causarán conflictos mucho más adelante en la
búsqueda. El hecho de cometer un error muy temprano (cuando las restricciones están
relajadas todavı́a), conduce a intentar resolver un problema que será inconsistente
a mediano o largo plazo. Eso sin mencionar que una vez hallada la inconsistencia,
regresar y enmendar el error puede ser una tarea muy larga.

Por tal motivo, Ginsberg y McAllester propusieron el año 1994 el algoritmo deno-
minado partial order dynamic backtracking. Este algoritmo no se limita a volver atrás
cronológicamente en la solución parcial, sino que permite la evaluación de cualquier
variable en cualquier punto. Esta modificación elimina la posibilidad de que un error
temprano afecte significativamente a la búsqueda.

Backtracking dinámico goza de una propidad adicional relacionada a la descom-


posición de problemas. Dado el caso, si un problema sujeto a la satisfacción de restric-
ciones puede ser descompuesto en varios sub-problemas independendientes (que no
comparten ninguna restricción entre sı́), entonces backtracking dinámico resuelve el
problema en el mismo tiempo que tomarı́a resolver los sub-problemas por separado.

2.3.2. Algoritmos de consistencia

La tarea fundamental de estos algoritmos es forzar ciertos niveles de consistencia


en la red de restricciones del problema. Por lo general los algoritmos de consistencia
son utilizados en una fase de pre-tratamiento, complementados por algoritmos de
backtracking. A continuación se define formalmente el concepto de consistencia de
arco.

Definición 2.6 Dado un grafo G = (X, C) que representa un problema sujeto a la


satisfacción de restricciones, el arco (xi , xj ) es consistente, si y solo si, para cada
valor v1 ∈ D(xi ) existe algún valor v2 ∈ D(xj ) tal que xi = v1 y xj = v2 es una
asignación permitida por la restricción binaria entre xi y xj .

22
(a) Grafo de restricciones que (b) Grafo obtenido luego de
representa una solución forzar la consistencia de
parcial al ejemplo 2.2.1 arco entre (x8 , x9 ) y
(x8 , x4 ).

Figura 2.5: Grafos de restricciones para Bolivia

La figura 2.5a representa una instancia en la solución del ejemplo 2.2.1. Se puede
apreciar que x1 , x4 , x7 y x9 ya tienen valores asignados. El arco (x9 , x8 ) es consistente
según la definición 2.6, pero el arco (x8 , x9 ) no lo es debido a que para el color rojo
no existe un color en x9 que satisfaga la restricción. Para arreglar esta inconsistencia
basta eliminar de D(x8 ) el color rojo. Si, de la misma manera, hacemos consistente
el arco (x8 , x4 ) obtenemos el grafo de la figura 2.5b donde claramente vemos que se
ha violado la restricción entre (x1 , x8 ).

Queda claro que si un arco (xi , xj ) es consistente, el arco (xj , xi ) no necesa-


riamente lo es. También que al forzar la consistencia en un arco existe la posibilidad
de que otros la pierdan. El algoritmo 2.4, propuesto por Mackworth en el año 1977,
permite lograr la consistencia de arco de una red de restricciones

Si al forzar la consistencia de arco para un problema dado, el tamaño de todos los


dominios se reduce a 1, significa que se ha encontrado la única solución posible, caso
contrario al volver consistente una red de restricciones se está facilitando el trabajo
que deberá hacer posteriormente un algoritmo de backtracking.

23
Algoritmo 2.4 AC–3 (Arc Consistency) propuesto por Mackworth el año 1977, permite
forzar la consistencia de arco en una red de restricciones.
1: AC–3(G)
2: Q ← {(xi , xj )} ∈ arcos(G), i 6= j
3: mientras Q 6= ∅ hacer
4: (xk , xm ) ← escogerArcoEliminando(Q)
5: si revisarConsistencia(xk , xm ) entonces
6: Q ← Q ∪ {(xi , xk ), (xi , xk ) ∈ arcos(G), i 6= k ∧ i 6= m}
7: fin si
8: fin mientras

1: revisarConsistencia(xi , xj )
2: borrado ← FALSE
3: para todo vi ∈ D(xi ) hacer
4: si no existe vj ∈ D(xj ) tal que (vi , vj ) es consistente entonces
5: eliminarV alor(vi , D(xi ))
6: borrado ← TRUE
7: fin si
8: fin para
9: retornar borrado

Los algoritmos de consistencia proveen un enfoque distinto para afrontar la re-


solución de problemas sujetos a la satisfacción de restricciones y, por lo general, no
trabajan solos sino en combinación con algún algoritmo de búsqueda sistemática.

Existen niveles superiores de consistencia denominados de manera general como


Consistencia K, cuya definición obtenida de [KUM92] se encuentra a continuación,
seguida de otra definición que representa un nivel de consistencia aun mayor.

Definición 2.7 Un grafo de restricciones es “Consistente K” si tomando los valores


de K − 1 variables que satisfacen todas las restricciones que se plantean sobre ellas,
y tomando una variable cualquiera K, existe un valor para ésta que satisface todas
las restricciones definidas sobre estas K variables.

Definición 2.8 Un grafo de restricciones es “Fuertemente Consistente K” si es


“Consistente J” para todo J ≤ K.

En general los algoritmos para obtener niveles K-consistentes requieren de mucho


tiempo, pero en la mayorı́a de los casos la necesidad de utilizar backtracking es
eliminada. Normalmente consideramos que un problema es fácil cuando puede ser

24
resuelto en tiempo polinomial. Dentro del contexto de las redes de restricciones, un
problema es fácil cuando un algoritmo como backtracking puede resolverlo sin volver
atrás [DEC92].

Con el fin de lograr tal objetivo, se han realizado investigaciones para tratar de
encontrar cuál es el nivel de consistencia que asegura una búsqueda lineal. Dichas
investigaciones fundamentan la tratabilidad de un problema en base al concepto
de ancho inducido de un grafo (referirse a [BAK95] y [DEC92]). En base a dicho
concepto, es posible analizar la complejidad de un problema e incluso identificar
cuál podrı́a ser el orden de instanciación fijo de variables que optimice la resolución
del mismo.

Sin embargo, recalcando lo citado unos párrafos atrás, el tiempo requerido para
lograr niveles de consistencia altos en problemas cotidianos, puede hacer ineficiente
este enfoque. Por tal motivo, en la práctica se han obtenido los mejores resultados
combinando niveles de consistencia básicos con algoritmos agresivos de backtrac-
king.

25
CAPÍTULO 3
GENERACIÓN AUTOMATIZADA DE CRUCIGRAMAS

La construcción automatizada de crucigramas es un problema que ha despertado


el interés de muchos investigadores. En primera instancia parecerı́a ser una cuestión
sin mucha trasendencia, desde el punto de vista que los crucigramas son utilizados
como entretenimiento, y el encontrar formas de construirlos automáticamente no es
un aporte primordial al desarrollo tecnológico. Sin embargo las caracterı́sticas del
problema lo convierten en un modelo ideal para profundizar el estudio en muchas
áreas importantes.

La primera caracterı́stica que sobresale es la facilidad de plantear y eventualmente


comprender el problema. La segunda, y de mayor importancia, es que puede ser visto
como un CSP, lo cual permite, al resolverlo, resolver otro gran conjunto de problemas
similares1 .

El presente capı́tulo se divide en tres secciones. La primera hace referencia a


dos maneras de modelar el problema de los crucigramas como un CSP. La segunda
comprende un breve resumen de los paradigmas utilizados en la resolución de este
tipo de problemas y el respectivo éxito que tuvieron. La última sección está orientada
a estudiar las caracterı́sticas del diccionario, uno de los elementos más importantes
en la generación automatizada de crucigramas.

3.1. Enfoques de modelamiento

Como se puede apreciar en la definición 2.1 la matriz compuesta por 1’s y 0’s
corresponde a la cuadrı́cula del crucigrama. Donde cada 1 se denomina celda cerrada
(debido a que no albergará ninguna letra) y cada 0 se denomina celda abierta. A
partir de esta aclaración derivan las siguientes dos definiciones [JEN97].

Definición 3.1 La densidad de una cuadrı́cula esta representada por el porcentaje


1
Incluso los problemas sujetos a la satisfacción de restricciones pueden ser directamente relacio-
nados con la teorı́a de bases de datos relacionales [PEA97].

26
de celdas abiertas que tiene.

Definición 3.2 El grado de integración de una cuadrı́cula, hace referencia al por-


centaje de celdas compartidas con respecto al total de celdas abiertas. Una celda com-
partida es aquella que es utilizada por dos palabras, una vertical y otra horizontal.

En el capı́tulo anterior se vió, de manera general, lo que son los problemas sujetos
a la satisfacción de restricciones. A su vez se formalizó (ver definición 2.1) el proble-
ma de la construcción de crucigramas. A continuación se desarrollará la manera de
modelar el problema citado como un CSP.

Para plantear el problema de generar crucigramas en términos de un CSP se uti-


lizará como ejemplo el crucigrama planteado en la figura 3.1a. En este crucigrama,
se observa que las pistas o claves están denotadas por un número en la esquina supe-
rior izquierda, mientras que los números que aparecen en la esquina inferior derecha
sirven solamente para enumerar las celdas. El ejemplo corresponde a un crucigrama
de cuatro palabras, tiene una densidad del 68.75 % y un grado de integración de
18.75 %. Como primer paso se debe identificar las variables del problema. Como se
puede apreciar se cuentan con dos posibilidades claras: utilizar una variable por pa-
labra o utilizar una variable por letra. A continuación se desarrolla ambos enfoques
por separado.

3.1.1. Modelo de instanciación por letra

Siguiendo la definición 2.2 el conjunto de variables en este ejemplo estarı́a cons-


tituido por X = {x1 , ..., x11 } y el dominio de cada una por D(xi ) = {a, ..., z} o
todas las letras permitidas en el idioma español. Como la cuadrı́cula se compone de
cuatro palabras entonces se tiene cuatro restricciones. Las restricciones recaen sobre
el conjunto:

{(x1 , x5 , x7 ), (x1 , x2 , x3 , x4 ), (x4 , x6 , x8 , x11 ), (x9 , x10 , x11 )}

27
(a) Cuadrı́cula de cuatro (b) Hipergrafo de (c) Grafo de
palabras. restricciones restricciones
correspondiente a la correspondiente a
cuadrı́cula planteada la cuadrı́cula
y el modelo de planteada y el
instanciación por modelo de
letra. instanciación por
palabra.

Figura 3.1: Ejemplo de una cuadrı́cula de cuatro palabras y dos posibles representaciones
gráficas basadas en el número de variables sobre las que recae la restricción.

Forzando a cada una de las combinaciones a ser una palabra de un diccionario


dado. La representación de la red de restricciones utilizando un hipergrafo puede
ser apreciada en la figura 3.1b. Se puede notar que para representar crucigramas
utilizando un modelo por letra la estructura empleada es mucho más intuitiva que
un grafo.

El modelo de instanciación por letra se caracteriza porque la cardinalidad de


los dominios es pequeña, pero una restricción puede llegar a aplicarse sobre tantas
variables como el tamaño de la palabra más larga. Este enfoque ha sido mucho menos
utilizado que el modelo de instanciación por palabra, lo utilizó Mazlack el año 1976
cuando abrió las puertas de la investigación sobre este problema [MAZ76].

En este modelo se puede apreciar que existen |A|n combinaciones, donde A =


{a, ..., z} y n el número de celdas abiertas. Esto significa que el método generar y
probar para el ejemplo dado requerirı́a verificar 2711 combinaciones de posibles solu-
ciones para el crucigrama. Suponiendo que se cuente con una poderosa computadora
capaz de revisar mil millones de posibles soluciones por segundo, habrı́a que esperar
algo más de 64 dı́as para poder tener acceso al conjunto de soluciones válidas. Si la

28
cuadrı́cula fuese algo más estricta, por ejemplo con 13 celdas abiertas, tomarı́a más
de un siglo revisar todas las combinaciones.

3.1.2. Modelo de instanciación por palabra

Este modelo, también denominado dual, considera que cada palabra es una va-
riable. Es decir X = {W1 , W2 , W3 , W4 } con el respectivo dominio:

D(Wi ) = {w ∈ Dict, longitud(w) = longitud(xi )}

Donde Dict es el diccionario de palabras a utilizar. Algo que caracteriza al modelo


es que todas las restricciones son binarias, como puede apreciarse en la figura 3.1c.

Este modelo reduce el número de variables significativamente, pero la cardinali-


dad de los dominios se vuelve sorprendentemente grande. Por ejemplo D(W2 ) repre-
senta todas las palabras del diccionario utilizado que tengan una longitud igual a
cuatro. Dependiendo del diccionario este conjunto puede tener una cardinalidad muy
grande. La ventaja del modelo es que las restricciones son binarias y representan la
letra de intersección entre dos palabras, lo que permite una verificación muy rápida.

Estimar cuánto tiempo tomarı́a el método generar y probar depende directamente


del diccionario que utilicemos y de las longitudes esperadas para cada palabra. Para
el ejemplo planteado en la figura 3.1a existe un total de combinaciones igual a:

C = |{w ∈ Dict, longitud(w) = 3}|2 × |{w ∈ Dict, longitud(w) = 4}|2

Suponiendo que el diccionario utilizado cuente con 500 palabras de tamaño 3 y 1000
de tamaño 4, y utilizando la misma capacidad de cómputo establecida en la anterior
sección, encontrar todas las posibles soluciones tomarı́a aproximadamente 4 minutos.
Utilizando diccionarios y cuadrı́culas más grandes, el enfoque se vuelve intratable.

3.2. Paradigmas de resolución

Independientemente de los dos modelos que se plantean, el problema ha sido


afrontado utilizando el paradigma procedimental y el declarativo.

29
El paradigma declarativo se basa en modelar el problema de una manera lógica
y dejar que el motor de inferencia encuentre la solución o soluciones a ciertos ob-
jetivos trazados. Los motores de inferencia utilizan algoritmos similares a los vistos
en la sección 2.3, pero de manera interna. Las experiencias rescatadas hasta el mo-
mento indican que los entornos de programación de restricciones lógicas no son tan
eficientes al resolver problemas con gran número de varibles y restricciones. Uno de
los últimos intentos, documentados, de construir crucigramas utilizando este para-
digma se llevó a cabo el año 1997 por Gary Meehan y Peter Gray utilizando CHIP
(veáse [MEE97]). Las conclusiones no fueron muy prometedoras debido a que en com-
paración con trabajos realizados años antes, el enfoque declarativo obtuvo tiempos
experimentales mayores en la construcción de crucigramas.

El paradigma procedimental se basa en codificar la manera en que se desea realizar


un trabajo. Este enfoque permite mayor flexibilidad y control de los algoritmos. La
desventaja radica en que no existe una representación intuitiva del problema. La
mayor parte de los trabajos desarrollados en torno a los crucigramas utiliza este
enfoque.

3.3. Diccionario

Uno de los componentes más importantes en la resolución del problema de la


construcción de crucigramas es el diccionario. Esto se debe principalmente a que las
caracterı́sticas del diccionario utilizado influenciarán de manera considerable en el
conjunto de cuadrı́culas que se vaya a resolver. Es posible que con un diccionario
dado muchas cuadrı́culas se vuelvan infactibles o intratables en la práctica, mientras
que con otro sea posible resolverlas sin mayores inconvenientes. Con el objetivo
de esclarecer el vı́nculo entre el diccionario y la tratabilidad del problema de la
construcción de crucigramas, se inicia esta sección revisando algunas caracterı́sticas
de la lengua española, de carácter estadı́stico, producto de un estudio realizado en
base al diccionario de la Real Academia de la Lengua Española.

30
Figura 3.2: Distribución de longitudes de palabra en el diccionario de la Real Academia de la
Lengua Española

3.3.1. Caracterı́sticas de la lengua española

El diccionario a ser utilizado en la construcción de crucigramas incide directa-


mente en dos aspectos importantes. El primero es la calidad de las palabras que
podrı́an figurar en el resultado. Está claro que si el diccionario contiene, en su ma-
yorı́a, palabras técnicas o muy complejas, entonces los crucigramas obtenidos a partir
de éste difı́cilmente podrán ser orientados al público general. El segundo aspecto es
el desempeño del compilador, ya que las caracterı́sicas propias del diccionario rigen,
en cierta manera, la eficacia del mismo.

Con el fin de comprender mejor la influencia que podrı́a tener un diccionario


particular en el compilador, la presente sección presenta algunos de los resultados
obtenidos a partir de un análisis al diccionario oficial de la Real Academia de la
Lengua Española2 . El número de vocablos incluı́dos en el diccionario citado supera
la cifra de los ochenta mil.
2
Se utilizó la versión electrónica del DRAE del año 1995.

31
Figura 3.3: Número total de veces que aparece cada letra en el diccionario

La figura 3.2 representa la distribución de longitudes de palabra en el diccionario.


Se observa una semejanza a la distribución normal, que indicarı́a que las palabras de
la lengua española se distribuyen de esta manera según su longitud. Más importante
aun es notar que esta distribución rige de manera directa la tratabilidad de las cua-
drı́culas. Por ejemplo, una cuadrı́cula que contenga un elevado número de palabras
de longitud tres, podrı́a hacer del problema intratable por más que existan soluciones
válidas.

Otra estadı́stica importante de conocer es el número de veces que aparece cada


letra en el diccionario. La figura 3.3 expresa precisamente esto. Se puede observar que
las letras k y w casi no son utilizadas y que el conjunto {ñ, q, y, x, z} se caracteriza
por tener elementos que aparecen en muy pocas ocasiones (comparativamente con
otros elementos del conjunto alfabeto).

A su vez, es interesante conocer cómo se distribuyen las letras en palabras de lon-


gitud fija. Por ejemplo la figura 3.4 representa cómo se distribuyen las letras {i, a, n}

32
Figura 3.4: Relación frecuencia/posición de las letras {i, a, n} en palabras de doce caracteres.

en palabras de longitud doce y según la posición en la que aparecen. Una distribución


completa letra/posición para palabras de dieciseis caracteres se puede apreciar en la
figura 3.5 (Referirse a la tabla 3.1 para el detalle de los picos más significativos). De
la misma manera es posible obtener las tablas para distintas longitudes.

Habiendo obtenido toda esta información estadı́stica del diccionario, es posible


calcular probabilı́sticamente el número de palabras que empareja con un patrón dado.
Este cálculo aproximado es muy rápido de computar y, como veremos más adelante,
puede ser utilizado en algunas heurı́sticas que guı́en la búsqueda de soluciones.

Definición 3.3 Sea P (l, n, c) la probabilidad de que una palabra de longitud l con-
tenga el caracter c en la posición n, siendo P (l, n, ?) = 1 donde ? representa un
caracter todavı́a no instanciado; el número aproximado de palabras que emparejan
con un patrón dado es:
l
Y
Np (l, c) ≈ T (l) × P (l, i, ci )
i=1

donde T(l) es el número total de palabras de longitud l y c es una cadena de caracteres


que representa un patrón.

33
Figura 3.5: Distribución letra/posición para palabras de dieciseis caracteres.

Por ejemplo, se desea calcular el número aproximado de palabras que empare-


ja con el patrón “a???s” utilizando el diccionario de Real Academia de la Lengua
Española.

Según la definción planteada:


5
Y
Np (5, a???s) ≈ T (5) × P (5, i, ci )
i=1
Np (5, a???s) ≈ T (5) × P (5, 1, a) × P (5, 2, ?) × P (5, 3, ?) × P (5, 4, ?) × P (5, 5, s)
450 270
Np (5, a???s) ≈ 5398 × ×1×1×1×
5398 5398
Np (5, a???s) ≈ 22,51

El resultado obtenido refleja que, estadı́sticamente, existen 22 palabras en el


diccionario que emparejan con el patrón “a???s”. Realizando un conteo exacto se
obtiene que en realidad existen 51 palabras con tales caracterı́sticas.

En el proceso de construcción de crucigramas, cada vez que se desea instanciar


una nueva variable, es muy probable que ésta se encuentre restringida por los valores

34
Pico No Letra/posición Ejemplos
1 A(11) transitoriamente, cronológicamente, presidencialismo, etc
2 E(13) alternativamente, desalumbramiento, sistemáticamente, etc
3 E(16) desnaturalizarse, contraproducente, cronológicamente, etc
4 M(12) astronómicamente, condicionalmente, tradicionalmente, etc
5 N(14) descarrilamiento, descomulgamiento, estadı́sticamente, etc
6 T(15) antiimperialista, atrincheramiento, fotolitografista, etc

Cuadro 3.1: Descripción de los picos más altos en la distribución letra/posición de la figura 3.5

que fueron asignados a las variables con las que comparte restricciones. La definición
utilizada en el desarrollo del ejemplo, permite evaluar, aproximadamente, la cardi-
nalidad del conjunto de palabras asignables a una variable. Este método resulta ser
muy eficiente de computar pero algo inexacto.

En la práctica, conocer la cardinalidad del conjunto de valores asignables para ca-


da variable puede servir para utilizar heurı́sticas que guı́en la búsqueda de soluciones
de manera más consistente.

3.3.2. Árboles de búsqueda digitales

Se ha visto en el capı́tulo de introducción que el sistema generador de cruci-


gramas permitirá la administración de una base de datos que contiene, entre otras
cosas, palabras y claves. Las palabras conforman el diccionario que se utilizarı́a para
la construcción de crucigramas. Sin embargo, se ha planteado en los objetivos la
posibilidad de solicitar crucigramas personalizando ciertos parámetros como la com-
plejidad y los temas. Dado el caso, el compilador de crucigramas trabajarı́a siempre
utilizando un subconjunto incluı́do de todas las palabras disponibles en la base de
datos. Este subconjunto se obtendrı́a a través de algún mecanismo que permita tra-
ducir los requerimientos del usuario en una selección de palabras consistente con
estos requerimientos.

Independientemente de la manera en que se implemente la base de datos del


sistema, es conveniente utilizar una estructura de datos que permita al compilador

35
Figura 3.6: Los árboles de búsqueda digitales tienen como caracterı́stica el compartir prefijos,
lo que los convierte en una estructura de datos ideal para obtener un rápido acceso al diccionario
con muy pocos requerimientos de memoria.

realizar operaciones básicas sobre el diccionario de manera eficiente. En el marco


de la construcción de crucigramas, las siguientes operaciones son las más relevantes:
Inserción de palabras, borrado, búsqueda y búqueda de palabras utilizando patrones.
Esta última utilizada para calcular los dominios válidos de una variable cuando la
cuadrı́cula esta incompleta.

Una de las técnicas fundamentales para trabajar eficientemente con diccionarios


de palabras radica en la utilización de árboles de búsqueda digitales. Los árboles de
búsqueda digitales, también denominados tries (digital reTRIEval trees), son una
estructura de datos en la que se almacena un conjunto de palabras que comparten
prefijos. Cada palabra del diccionario se almacena en un trie utilizando una arista
para cada letra. La figura 3.6 representa un árbol de búsqueda digital que contiene
al menos cuatro palabras. Cada palabra se denota con una marca en el nodo al cual
se conecta la arista de la última letra. Por ejemplo, es posible identificar la palabra
“ameno”.

36
CAPÍTULO 4
EL COMPILADOR DE CRUCIGRAMAS

Como se mencionó anteriormente, el buen funcionamiento del sistema generador


de crucigramas depende crı́ticamente de la calidad del compilador. En base a los
objetivos planteados, uno de los factores más importantes del proyecto radica en
la “competitividad” que puedan tener los crucigramas obtenidos por el sistema. Es
decir, éstos deberán ser lo suficientemente buenos como para poder competir con
aquellos construidos por personas y publicados en medios escritos.

El presente capı́tulo está dividido en tres secciones. La primera se enfoca en la


realización de un análisis de la construcción manual de crucigramas, dirigido a la ob-
tención de parámetros de calidad que permitirán evaluar la calidad de los resultados
obtenidos por el compilador.

Luego se justificará la necesidad de plantear ciertos indicadores adicionales rela-


cionados a la naturaleza de las palabras y las claves, los cuales servirán para controlar
tanto la complejidad global del crucigrama como para influir en las heurı́sticas que
serán utilizadas en los algoritmos de generación.

Finalmente se plantea el diseño del compilador según todos los objetivos a cum-
plir.

4.1. Análisis de crucigramas construidos manualmente

Existe en el mercado global una gran cantidad de crucigramas disponibles, todos


ellos de diversos estilos y complejidad. Entre los más prestigiosos a nivel mundial
están los crucigramas del periódico americano New York Times, los del Times de
Londres y también los del diario El Paı́s de España. A nivel local se puede afirmar
que los crucigramas de mayor prestigio han sido aquellos construidos por el señor
Mario Lara Carrasco, quién entre otros publicó el popular geniograma y el laragrama.

37
Los estilos utilizados en las publicaciones nombradas anteriormente son muy dife-
rentes entre sı́ y representan a toda una cultura en el mundo de los crucigramas. Se
dice, por ejemplo, que los crucigramas ingleses son mucho más complejos que los
americanos. Sin embargo, éstos últimos son mucho más exigentes en cuanto al nivel
de calidad de la cuadrı́cula. Los españoles por su lado se enfocan mucho más en las
palabras que contiene el crucigrama y el nivel cultural que exige.

4.1.1. Reglas básicas para la construcción de crucigramas

Por lo general, un crucigrama debe cumplir ciertos requisitos antes de ser enviado
a un medio de comunicación para su posterior publicación. Éstos varı́an según el
medio, en algunos casos son muy estrictos mientras que en otros demasiado flexibles.
Las reglas básicas para la construcción de crucigramas, aplicadas por la gran mayorı́a
de medios de publicación y constructores de crucigramas, son las que siguen1 :

1. La cuadrı́cula debe ser rectangular y estar compuesta por celdas abiertas y


cerradas, siendo las abiertas las que serán destinadas a albergar letras.

2. No utilizar muchas celdas cerradas. En algunos casos se exige que no se ocupe


más del 16 % de la cuadrı́cula con celdas de este tipo.

3. No repetir palabras en la cuadrı́cula.

4. No utilizar palabras o frases inventadas. Cada respuesta deberá tener una re-
ferencia en el diccionario o ser de uso común en el vocabulario.

5. Procurar que las dimensiones de la cuadrı́cula sean impares (15 × 15, 17 × 17,
etc).

A partir de las reglas citadas se generan muchas variaciones por lo general de


acuerdo al medio en el que se publicará el crucigrama. Para tener una idea más clara
1
Estas reglas fueron adaptadas de [Cru02] para poder englobar las normas utilizadas en la
construcción de crucigramas en otros paı́ses como Inglaterra y Bolivia.

38
Caracterı́stica London Times NY Times Geniograma
Cuadrı́cula simétrica simétrica -
Mı́nima longitud de palabra 3 3 1
Grado de Integración < 100 % 100 % < 100 %
Densidad de la cuadrı́cula > 80 % > 80 % -
Tipo de claves Crı́pticas Directas Directas

Cuadro 4.1: Comparación entre las caracterı́sticas generales de los crucigramas ingleses, ame-
ricanos y bolivianos.

del tipo de variantes que pueden existir, se compara en la tabla 4.1 las caracterı́sticas
generales entre un grupo representativo de crucigramas.

4.1.2. Muestreo de indicadores de calidad para cuadrı́culas

En busca de obtener parámetros reales de calidad para posteriormente utilizarlos


comparativamente con los crucigramas obtenidos por el sistema, se realizó un mues-
treo de crucigramas publicados en distintos medios que se enfocó en la obtención de
la densidad promedio de la cuadrı́cula y el grado de integración promedio.

El muestreo se realizó sobre crucigramas americanos y algunas publicaciones


prestigiosas bolivianas. La tabla 4.2 resume las estadı́sticas obtenidas, de las cuales,
además de los indicadores mencionados en el anterior párrafo, se cuenta con un dato
interesante que hace referencia al promedio de los promedios de las longitudes de las
palabras utilizadas en cada cuadrı́cula (P LP ).

Analizando los datos obtenidos, no es sorpresa que todos los crucigramas ame-
ricanos tengan un grado de integración igual al 100 %, esto es consecuencia de una
regla impuesta por los medios de publicación. Sı́ llama la atención que tanto la den-
sidad promedio máxima como la mı́nima correspondan a crucigramas publicados en
Bolivia y que además eran construidos por la misma persona; el señor Mario Lara
Carrasco. Sin embargo se aprecia que este indicador (el de densidad) es correspondido
por el grado de integración en ambos casos.

39
Publicación Muestras Densidad ( %) Integración ( %) P LP
New York Times 15×15 1716 84.25 100.00 5.12
Crossword Sinergy 15×15 1273 84.12 100.00 5.05
New York Times 25×25 12 84.05 100.00 5.61
Sun Times 15×15 1405 83.40 100.00 4.97
Boston Globe 21×21 94 83.34 100.00 5.21
Washington Post 21×21 74.05 83.21 100.00 5.24
New York Times 21×21 74.35 83.14 100.00 5.26
New York Times 23×23 16 82.94 100.00 5.26
Sun Times 21×21 235 82.52 100.00 5.07
Philadelphia Inquirer 21×21 75 82.10 100.00 5.05
Los Tiempos 13×15 12 81.45 100.00 -
Laragrama 14×16 30 68.62 91.11 -
Geniograma 16×18 30 85.21 74.04 -

Cuadro 4.2: Resumen estadı́stico a partir de un muestreo de indicadores de calidad para


crucigramas publicados en distintos medios.

El grado de integración de una cuadrı́cula refleja la complejidad que tiene la


red de restricciones del problema que se quiere resolver. Si se utiliza el modelo de
instanciación “por palabra”, definido en la sección 3.1.2, entonces se tiene que cada
nodo en el grafo de restricciones representa una palabra y los arcos representan
qué palabras se relacionan entre sı́. En el caso de que una cuadrı́cula tenga un
grado de integración de 100 %, significarı́a que el total de las celdas abiertas están
compartidas por dos palabras por lo que en el grafo de restricciones una palabra
de tamaño n (representada por un nodo) deberá estar conectada mediante arcos
a n palabras con las que se relaciona. Evidentemente crucigramas con grados de
integración igual al 100 % se representarán mediante redes de restricciones menos
relajadas, mientras que cuando el indicador estudiado tiene valores muy bajos, los
respectivos grafos serán en cierta manera más fáciles de resolver.

Sin embargo, no se puede utilizar solamente el grado de integración para deter-


minar la complejidad de una cuadrı́cula, ya que la densidad es un parámetro de igual
importancia. Supóngase, por ejemplo, un problema en el que la cuadrı́cula tiene un

40
Figura 4.1: Gráfico que representa los porcentajes de densidad e integración de la muestra
tomada de laragramas. Se puede apreciar que ambos indicadores, aparentemente, no guardan
relación entre sı́, pero se mantienen dentro de un rango estable.

grado de integración del 100 % y una densidad muy baja (menor al 50 %). La red
de restricciones que representa el problema, si bien puede ser bastante estricta, es
significativamente más pequeña que la red de una cuadrı́cula de dimensiones simila-
res pero con una densidad mayor. Esto se debe principalmente a que en la medida
que aumenta la densidad de una cuadrı́cula existe una tendencia a que aumente el
número de variables del problema, esto con el fin de mantenerlo tratable. La validez
de esta afirmación radica en el hecho de que pueden existir dos cuadrı́culas de dimen-
siones iguales, densidades iguales y grados de integración iguales pero con diferente
disposición de celdas cerradas, lo que derivarı́a en un diferente número de palabras
y posiblemente en que una de ellas sea solucionable y la otra no.

Por ejemplo, en la figura 4.2 se presenta dos cuadrı́culas, ambas con una densidad
de 81.33 %, un grado de integración total y dimensiones similares. La única variación
que existe entre las dos radica en la disposición de las celdas cerradas, la cual incide
directamente en el número de palabras que albergará cada una. En el caso de la

41
(a) Cuadrı́cula 15x15, densidad 81.33 % y (b) Cuadrı́cula 15x15, densidad 81.33 % y
80 palabras. 86 palabras.

Figura 4.2: Dos cuadrı́culas de similares dimensiones, igual densidad y grado de integración,
que difieren solamente en el número de palabras. Esto se debe a la particular disposición de
celdas cerradas en cada caso.

cuadrı́cula representada en la figura 4.2a serán 80 mientras que la otra registra un


número de palabras igual a 86. Esta diferencia, aparentemente insignificante, cambia
el grado de complejidad del problema para cada caso en particular. De hecho en el
ejemplo dado una de las dos cuadrı́culas deberá ser más compleja de resolver que la
otra (desde el punto de vista computacional). ¿Hay alguna manera de asegurar cuál?

Siempre y cuando la densidad y el grado de integración se mantengan constantes;


existe una tendencia a que el promedio de longitud de palabra, de una cuadrı́cula,
aumente a medida que reducimos el número de palabras de la misma. Esto es evi-
dente, si tenemos un número de celdas abiertas constante y lo repartimos entre un
número dado de palabras; a medida que logremos repartir celdas entre menos pala-
bras, éstas últimas tenderán a ser más largas.

En una red de restricciones, cada palabra restringe un número de nodos similar


a su longitud, siempre que el grado de integración sea total. Consecuentemente, pa-
labras más largas restringirán mayor cantidad de nodos. Utilizando la misma lógica,
a promedios de longitud de palabra, correspondientes a una cuadrı́cula, más altos,
tendremos redes de restricciones menos relajadas.

42
Figura 4.3: Cuadrı́cula de 15x15, 80 % de densidad y grado de integración total, en la que la
disposición de las celdas hace que el problema se torne sumamente complejo.

Por ende, asumiendo que el grado de integración de un conjunto de cuadrı́culas es


del 100 %, como en los ejemplos planteados, y que la disposición, de manera distinta,
de n celdas cerradas en cada una de las cuadrı́culas podrı́a incidir en el número
de palabras que alberga cada una; se propone un indicador que permita clasificar
cuadrı́culas según su complejidad:

Definición 4.1 Dada una cuadrı́cula G, con una densidad igual a d, número de
columnas C, número de filas F , promedio de longitudes de palabra LP y número
de palabras igual a P , la complejidad de la misma puede ser obtenida mediante la
relación:
d × C × F × LP
XG =
2×P

Basados en el indicador planteado se puede decir que, aparentemente, la cua-


drı́cula de la figura 4.2a es más compleja que la propuesta en la figura 4.2b, y que la
cuadrı́cula de la figura 4.3 es mucho más difı́cil de resolver que ambas, aun cuando
su densidad es un poco menor.

La correctitud de la definición propuesta se deberá ratificar por medio de la


experimentación. El ancho inducido en un grafo es un parámetro alternativo formal
que puede utilizarse para determinar la complejidad de una red de restricciones.

43
En [DEC92] y [BAK95] se profundiza sobre este concepto.

El ancho inducido puede usarse, como indicador de complejidad, para cualquier


problema que pueda ser modelado como un CSP, en cambio, la definición 4.1 tiene
un objetivo similar pero puede ser aplicada solamente a cuadrı́culas de crucigramas.

Se ha visto conveniente fijar, como parámetros de calidad aceptables, densidades y


grados de integración mayores o iguales al 80 %. Dado que estos parámetros dependen
por completo de la cuadrı́cula, se establecerá que el sistema generador de crucigramas
personalizados trabaje con cuadrı́culas que cumplan estos requisitos mı́nimos.

4.2. Indicadores adicionales de decisión

Hasta este punto se ha evaluado algunos parámetros calidad y se han obtenido


estadı́sticas interesantes que permitirán, posteriormente, evaluar comparativamente
los crucigramas generados por el sistema. Con esta información será posible comparar
la competitividad entre los crucigramas generados y los que circulan en algunos
medios de comunicación a nivel local y global. Sin embargo, sólo es posible enfocarse
en la calidad de la cuadrı́cula y no ası́ en las palabras y claves, las que al final de
cuentas constituyen la esencia de un crucigrama.

Para lograr que los crucigramas generados por el sistema sean competitivos a
todo nivel, es necesario asegurar que los contenidos de la base de datos (palabras
y claves) sean de muy alta calidad. Pero no sólo eso, también se necesita plantear
algunos indicadores adicionales que permitan seleccionar temáticamente, según los
requisitos del usuario, las palabras a utilizarse y permitan clasificar a los crucigramas
según su complejidad.

En el capı́tulo introductorio (veáse sección 1.4) se plantea que el usuario final po-
drá elegir el grado de complejidad que desea para su crucigrama final. Este paráme-
tro de decisión puede resultar muy conflictivo, ya que la complejidad es un concepto
relativo a la persona que la evalúe. Además surge una pregunta muy importante:

44
¿Dónde reside la complejidad en un crucigrama? Inicialmente se podrı́a pensar que
reside tanto en las palabras como en las claves. Pero también es posible afirmar que
reside en la cuadrı́cula y la manera en la que están cruzadas las palabras.

Para fines prácticos se asumirá que la complejidad global de un crucigrama reside


parcialmente en las palabras utilizadas (en porcentaje menor) y parcialmente en
las claves (en porcentaje mayor). A continuación se plantean tres indicadores que
podrı́an ser utilizados para clasificar un crucigrama según su complejidad.

Definición 4.2 (Complejidad léxica palabra) Valor que califica una palabra a
partir de su composición. El rango de este indicador es de 1..100 y se lo calcula en
base a los siguientes criterios.

Longitud
Letras utilizadas
Posición de las letras

Definición 4.3 (Complejidad general palabra) Valor asociado a una palabra,


con rango: 1..100, que identifica la complejidad de la palabra en base a los siguientes
criterios:

1. Uso y conocimiento en el lenguaje común.


2. Categorı́as a las que pertenece (cultura general, categorı́a especial).

Definición 4.4 (Complejidad claves) Valor asociado a una clave, con rango:
1..100, que identifica la complejidad de la clave en función a la palabra que refe-
rencia. Para calificar la complejidad de una clave se tomarán en cuenta algunos de
los siguientes criterios:

Tipo de clave (directa o crı́ptica)


Relación con la palabra (sinónimo, definición, sin relación directa, etc)

La complejidad léxica de una palabra es un parámetro que se define con el fin de


soportar el mecanismo de elección de palabras del compilador. La definición indica
que este parámetro debe ser calculado según la longitud de la palabra, letras que
utiliza y posición en la que se encuentran las letras. El cálculo se realiza utilizando
la información estadı́stica obtenida. La finalidad de este indicador es identificar pa-

45
labras cuyas caracterı́sticas, estadı́sticamente, no favorecen a la construcción de un
crucigrama en particular. Por ejemplo palabras que usen algunas las letras {k, x, y}
podrı́an ser penalizadas debido a que se reducen las posibilidades de encontrar pala-
bras que crucen con el patrón que vaya a formarse.

Por otro lado, los indicadores complejidad general palabra y complejidad claves
son obtenidos a partir de una clasificación realizada por los usuarios administradores
del sistema. Se utilizan en el proceso de selección de palabras que irá a utilizar el
compilador en la construcción de un crucigrama.

4.3. Diseño del compilador

El compilador, de la misma manera que el sistema, puede ser modularizado.


Se vió apropiado implementar por separado los cinco módulos que se describen a
continuación.

Diccionario Agrupa las funciones de acceso al diccionario. Se utilizan árboles de


búsqueda digitales para contener al mismo. La función más importante de este
módulo es la búsqueda en diccionario utilizando patrones.

Estadı́sticas Implementa funcionalidad relacionada a la obtención y uso de es-


tadı́sticas a partir del diccionario. Se utilizan tablas de acceso directo que
permiten un cómputo eficiente de indicadores.

CSP’s Es el módulo base del compilador. En éste se implementa todo un marco de


trabajo basado en el planteamiento teórico de los problemas sujetos a la satis-
facción de restricciones. El módulo CSP’s define funcionalidad básica de acceso
a variables, dominios y restricciones tomando en cuenta las particularidades del
problema.

DB Tiene el fin de implementar funciones que sirvan de interfaz entre los datos
(diccionario, crucigramas, claves, etc) y cualquier sub-módulo que necesite uti-
lizarlos.

46
Celda Cuadrícula

Número de Columnas
Elemento Backtracks

Número de Filas

Variable Variable
Horizontal Vertical
Puntero Celdas

(a) Estructura de una (b) La cuadrı́cula se compone de información sobre la geometrı́a


celda. de la misma y una matriz de celdas sobre la que se
generará el crucigrama

Figura 4.4: Estructuras de datos correspondientes a una celda y una cuadrı́cula respectiva-
mente. Se puede observar que en una celda se almacena información adicional al elemento
albergado.

Algoritmos Finalmente, éste módulo reúne algoritmos utilizados para la búsqueda


de soluciones una vez que el problema es modelado como un CSP. Contiene
algoritmos de backtracking, de consistencia y algunas heurı́sticas importantes.

4.3.1. Adaptación de backtracking dinámico

Al observar el algoritmo 2.3 se puede apreciar que está planteado a un nivel


abstracto que dificulta una implementación inmediata y requiere de un proceso de
adaptación que permita ejecutar las operaciones requeridas de la manera más efi-
ciente.

Revisando la definición 2.5, referente al conjunto de explicaciones de eliminación,


se puede notar que es necesario encontrar estructuras de datos que permitan tra-
bajar de manera óptima sobre estos conceptos. Recordemos que una explicación de
eliminación se compone de un par (v, S) donde v representa un valor y S los mo-
tivos por los cuales este valor fue eliminado. A su vez, cada variable del problema
deberá tener asociado un conjunto de explicaciones. Por ejemplo, en el contexto de
este proyecto, la variable hipotética 5 horizontal podrı́a tener el siguiente conjun-
to de explicaciones: {(oro, {1h, 3v}), (pan, {1h, 7v, 2v}), (zar, {4v})}. El conjunto de
valores eliminados (E) respectivo serı́a: {oro, pan, zar}.

47
Nodo Variable

ID Longitud

Fila Columna

Dirección Explicaciones

Puntero Siguiente

Puntero Anterior

Figura 4.5: Estructura de datos orientada a albergar una variable del problema utilizando el
enfoque “por palabra”. Los elementos son: Un identificador único de variable, las coordenadas
de la cuadrı́cula donde reside el primer elemento de la variable, la longitud de la palabra, la
dirección (horizontal o vertical), una bandera que indica si el caracter puede ser modificado y
punteros que permiten la inclusión de la variable en una lista doblemente enlazada.

Es necesario contar con una manera de representar el conjunto de explicaciones


que permita la implementación eficiente de las siguientes operaciones: Cálculo del
conjunto de valores eliminados, búsqueda de valores dada una variable de explicación,
operaciones sobre conjuntos (union, intersección, resta), operaciones básicas.

Para resolver este problema se vió conveniente utilizar un árbol de búsqueda


digital para almacenar los valores eliminados, y a su vez que cada valor referencie a
un árbol binario de búsqueda que contenga el conjunto de variables que conforman
la explicación.

Para la selección de la siguiente variable a instanciar, se utilizará la heurı́stica


de la “más restringida primero”. Esta heurı́stica ha probado ser indispensable en
la práctica. La heurı́stica selecciona la variable que tenga menor cantidad de va-
lores asignables según el patrón que la restringe. Este cálculo puede ser exacto o
estadı́stico, este último se lo realiza utilizando la definición 3.3.

48
Cuadrícula

Número de Columnas

Número de Filas

Puntero Celdas

CSP

Puntero a Cuadrícula

Puntero a Variables

Puntero Acceso Directo

Número de Variables

0 1 n

Figura 4.6: Estructura de datos compuesta que representa un problema sujeto a la satisfacción
de restricciones. Se puede observar que el CSP se compone de una cuadrı́cula (que impone
las restricciones), un conjunto de variables y, adicionalmente, conviene conocer el número de
variables que tiene el problema. Los dominios se representan utilizando la cuadrı́cula y se los
calcula en base al diccionario.

La consistencia del problema se logra de manera implı́cita debido a que los do-
minios de cada variable se obtienen dinámicamente según el estado de la cuadrı́cula.
De entrada esto asegura la consistencia de nodo, ya que el dominio está compuesto
por valores válidos solamente. La consistencia de arco se logra utilizando una técni-
ca denominada “look ahead” o mirar para adelante. “Look ahead” implica revisar,
antes de hacer una asignación definitiva, si es que las variables afectadas no reducen
la cardinalidad de sus dominios a cero. En la práctica, la técnica descrita puede ser
lograda de dos maneras: Exacta (calculando los tamaños de los dominios afectados)
y estadı́stica (utilizando tablas precomputadas que aproximen la cardinalidad de los
dominios afectados). Nuevamente la definición 3.3 puede ser utilizada para realizar
el “look ahead” estadı́stico.

La selección de la primera variable a instanciar se realizará en base a una de las


siguientes tres heurı́sticas: Selección aleatoria, selección de la variable más restrin-
gida o selección de la variable que más restringe la cuadrı́cula. A fin de reducir la
probabilidad de que backtracking dinámico incida en un error temprano, se asignará a
esta variable uno de los valores con mejores perspectivas de favorecer al resto de la

49
No t[s] tmax [s] tmin [s] bt btmax btmin
1 10.88 51.04 1.57 187 416 33
2 10.51 25.24 1.96 285 525 33
3 11.23 34.92 2.96 279 494 64
4 14.23 33.87 1.70 293 627 87
5 11.33 45.63 1.80 234 732 56
6 12.93 37.58 3.65 227 496 32
7 6.32 18.32 1.85 223 715 42
8 10.69 39.59 5.40 217 459 78
9 16.57 142.54 1.77 287 681 46
10 28.84 96.38 4.50 527 1074 190

Cuadro 4.3: Resultados obtenidos por el compilador en la etapa de prototipaje. Se utilizaron


diez cuadrı́culas 15x15 con indicadores de calidad aceptables. Los resultados reflejan los tiempos
obtenidos y número de backtracks necesarios en 25 pruebas que se realizaron a cada una.

cuadrı́cula. Para esto se podrı́a ordenar a las palabras candidatas según la suma del
número de palabras asignables en cada variable que se verı́a afectada por esta asig-
nación. En cada uno de estos procedimientos se introducirán elementos aleatorios
que permitan diversificar las soluciones a una cuadrı́cula.

4.4. Pruebas preliminares

La presente sección presenta los resultados obtenidos en la etapa de prototipaje


del compilador. Se utilizó el diccionario de la Real Academia de la Lengua Española
(algo más de 80,000 entradas) y se escogieron diez cuadrı́culas de 15x15 correspon-
dientes a crucigramas reales con indicadores de calidad equivalentes a los promedios
obtenidos de cuadrı́culas del New York Times.

Sobre cada una de estas diez cuadrı́culas se realizaron 25 pruebas en las que
el compilador utilizó el algoritmo de iterative sampling para evitar dedicar mucho
tiempo a soluciones inconsistentes desde el principio. Los resultados pueden obser-
varse en la tabla 4.3. Algunos crucigramas obtenidos experimentalmente pueden ser
observados en la sección de anexos del presente documento.

50
De los resultados obtenidos se puede notar que en promedio, backtracking diná-
mico resolvió gran parte de los problemas reconsiderando decisiones menos de 500
veces. Tomando en cuenta que las cuadrı́culas que se utilizaron se caracterizan por te-
ner un grado de complejidad relativamente alto, las pruebas reflejan que el problema
de la construcción de crucigramas ha sido resuelto satisfactoriamente.

Durante la etapa de prototipaje del compilador, surgieron observaciones intere-


santes (o fueron ratificadas) referentes a la construcción de crucigramas. Primero
se observó que la complejidad del problema no depende de las dimensiones de la
cuadrı́cula sino la distribución de las celdas. Se encontraron cuadrı́culas pequeñas
(menores a 11x11) que resultaron ser intratables en el intervalo de tiempo aceptado.

Se ratificó la importancia de utilizar heurı́sticas que guı́en la búsqueda de una


manera más inteligente. Sin embargo, se observó que sobre-utilizar heurı́sticas en
combinación a un algoritmo de las caracterı́sticas de backtracking dinámico puede ser
contraproducente. Intuitivamente esto se debe a que backtracking dinámico depende
de toda la información que pueda recopilar, y la información se genera a partir de
errores solamente. La heurı́sticas, tanto de instanciación de variables como de elección
de valores, tienden a minimizar el número de malas decisiones que se puedan tomar
en la búsqueda. A causa de esto, al encontrarse un conflicto, backtracking dinámico
no tiene suficiente información como para resolverlo de la mejor manera posible.

4.5. Pruebas

Una vez obtenido el prototipo final correspondiente al módulo compilador de


crucigramas y habiendo realizado pruebas preliminares que ratifiquen la eficiencia y
eficacia de los métodos utilizados, se llevó a cabo un conjunto de pruebas adicionales,
estructuradas de mejor manera, con el fin de conocer mejor el desempeño de dicho
módulo.

Las pruebas adicionales están orientadas a medir el desempeño del compilador


en dos escenarios distintos. El primero corresponde a la compilación de crucigramas

51
utilizando una variedad de cuadrı́culas y un diccionario preestablecido para todas
las muestras. El segundo escenario tiene como objetivo conocer el comportamiento
del compilador cuando el tamaño del diccionario varı́a.

4.5.1. Escenario primero: variedad de cuadrı́culas

Al momento de ejecución de las pruebas correspondientes a este escenario, se


contaba con la versión final del compilador, ya integrada al sistema y trabajando
directamente con la base de datos. Se utilizaron 74 cuadrı́culas de dimensiones 15x15
y se permitió al compilador realizar un máximo de cinco mil backtracks, comenzando
con un lı́mite inferior de mil, incrementos de cien y utilizando el algoritmo iterative
sampling para evitar la anomalı́a del error temprano. Vale decir que cada cuadrı́cula
que no fue solucionada tuvo que fracasar en cuarenta intentos. Se tomaron en cuenta
al registrar los resultados el tiempo de procesador y número de backtracks necesarios
para resolver la cuadrı́cula.

Se tomaron diez muestras de cada una de las 74 cuadrı́culas y se utilizó un diccio-


nario de palabras correspondiente al total de entradas puras que tiene el diccionario
de la Real Academia de la Lengua Española, algo más de sesenta mil. Se utilizó un
generador de número pseudoaleatorio.

La tabla 4.4 refleja los resultados obtenidos en las pruebas. La primera columna
corresponde al identificador interno de la cuadrı́culas en la base de datos, seguida
de la densidad, número de variables, número de muestras solucionadas, tiempo de
procesador promedio y número de backtracks necesarios para alcanzar la solución.
El orden de presentación de los resultados es ascendente y se basa en el promedio de
backtracks. No se encontró ninguna solución a las cuadrı́culas: 87, 85, 90 y 88.

Aplicando el indicador de complejidad definido en la sección 4.1 se puede obtener


las seis cuadrı́culas, teóricamente, más difı́ciles, las mismas que se encuentran en
la tabla 4.5. Se puede apreciar la relación entre los resultados experimentales y los
ı́ndices de complejidad obtenidos por el indicador. De hecho, las cuatro cuadrı́culas

52
a las que no se encontró solución en la primera ronda de pruebas corresponden a
las cuatro que tienen los indicadores de complejidad más altos. Además, se puede
observar que los valores de complejidad de tales cuadrı́culas se hallan en un rango
muy elevado (superior a 700), mientras que los indicadores de complejidad para las
cuadrı́culas que fueron solucionadas oscilan entre 500 y 600.

El Anexo B contiene algunas de las cuadrı́culas que se mencionan en los resultados


junto con el indicador de la base de datos respectivo.

Posteriormente se realizó una segunda vuelta de pruebas sobre las diez cuadrı́cu-
las más complejas solamente. La única variación fue que se permitió al compilador
realizar hasta un máximo de cien mil backtracks por muestra. En estas pruebas,
cuyos resultados no se encuentran en este documento por ser menos relevantes, se
encontraron soluciones satisfactorias a todas las cuadrı́culas exceptuando la 87 y la
90.

Se concluye la sección afirmando que el compilador cumplió a cabalidad con las


expectativas, resolviendo una gran cantidad de cuadrı́culas reales de manera eficiente
y eficaz. Se encontraron cuadrı́culas (ambas correspondientes a publicaciones del
NY Times) que no pudieron ser resueltas dentro de los parámetros permitidos. Por
último, se pudo comprobar que el indicador de complejidad propuesto se comporta
de manera adecuada y podrı́a ser utilizado para evaluar cuadrı́culas creadas por los
usuarios del sistema antes de utilizarlas en la construcción de crucigramas.

4.5.2. Escenario segundo: variación en el diccionario

Es importante conocer cual es el comportamiento del compilador cuando se uti-


lizan diccionarios de distinto tamaño. Básicamente los resultados de este escenario
permitirán medir la factibilidad de construir crucigramas personalizados según te-
mas de interés. Para realizar las pruebas se escogió una cuadrı́cula con desempeño
promedio (referirse al Anexo B, cuadrı́cula 51) y se procedió a resolverla utilizan-
do distintos subconjuntos, obtenidos al azar, del diccionario de la Real Academia.

53
Para cada muestra se utilizó un incremento del 5 % en el tamaño del diccionario,
con respecto a la anterior. Se permitió al compilador realizar un máximo de diez mil
backtracks.

Los resultados, que pueden observarse en la tabla 4.6, encierran algunas carac-
terı́sticas muy importantes. La más interesante radica en el hecho de que no se
encontraron soluciones utilizando diccionarios con menos de veinticinco mil entra-
das. A partir de diccionarios con más de treinta mil palabras el comportamiento del
compilador parece ser más uniforme y no se observa una caı́da en el rendimiento a
medida que la cardinalidad del diccionario crece.

Hay que notar que la cuadrı́cula utilizada para las pruebas corresponde a una
publicación real de alta calidad y con indicadores relativamente altos. Este puede
ser el motivo por el que no pueda ser solucionada utilizando diccionarios pequeños
y aplicando las restricciones de utilización de recursos. Se ha visto que existen al-
gunos compiladores de crucigramas (comerciales) que tienden a diseñar cuadrı́culas
con ciertas particularidades que se adapten mejor a un diccionario construido es-
pecialmente. Por ejemplo, una cuadrı́cula en la que abundan las palabras de tres
letras, será mejor resuelta con un diccionario de similares caracterı́sticas. En el caso
del presente trabajo se desea un compilador lo suficientemente genérico para poder
trabajar con cualquier cuadrı́cula y cualquier diccionario sin hacer uso de particu-
laridades preestablecidas que puedan ser beneficiosas al momento de resolver un
problema. En realidad se busca resolver los problemas más complejos que se pueda,
dando por sentado que todos aquellos problemas sencillos que se encuentren en el
camino se resolverán sin mayor inconveniente.

Analizando el hecho que revela este conjunto de resultados, se debe considerar


que el permitir a los usuarios personalizar tanto los temas como la complejidad
de sus crucigramas podrı́a acarrear algún problema. En realidad cuando se habla de
personalizar un crucigrama temáticamente se hace referencia a utilizar un diccionario
compuesto de palabras relacionadas a los temas escogidos. Con la complejidad sucede

54
algo similar. El punto importante radica en que si la cardinalidad de la unión de los
conjuntos de palabras correspondientes a cada uno de los temas, escogidos por el
usuario, no es lo suficientemente grande (por ejemplo mayor a treinta mil elementos)
se corre el riesgo de que no se halle solución al problema.

55
Id d |X| |S| t[s] bt Id d |X| |S| t[s] bt
69 80.44 % 84 10 3.05 107 28 80.44 % 78 10 15.70 255
33 80.44 % 84 10 2.94 117 91 79.56 % 82 10 6.49 256
50 73.33 % 86 10 2.36 121 59 78.67 % 82 10 9.45 257
82 78.67 % 86 10 4.29 132 19 79.56 % 84 10 7.16 258
34 80.44 % 84 10 3.69 151 78 80.44 % 78 10 12.12 259
44 75.11 % 82 10 3.11 159 77 76.44 % 80 10 7.51 270
23 76.89 % 84 10 3.94 160 65 78.67 % 82 10 8.79 271
48 67.56 % 72 10 5.60 163 42 80.44 % 82 10 7.18 273
29 80.00 % 86 10 7.82 165 76 79.11 % 84 10 7.20 275
73 78.22 % 88 10 8.97 167 32 79.56 % 78 10 9.64 276
68 80.44 % 82 10 4.26 169 83 82.22 % 78 10 12.38 280
75 79.11 % 84 10 5.98 169 31 77.78 % 82 10 8.32 283
45 76.89 % 82 10 3.63 178 46 82.22 % 86 10 7.74 299
49 75.11 % 86 10 4.42 178 63 81.78 % 84 10 8.48 301
74 74.67 % 80 10 4.50 179 25 80.89 % 84 10 7.96 304
71 81.78 % 88 10 4.35 185 79 79.56 % 81 10 9.20 313
38 82.22 % 84 10 7.11 199 36 81.33 % 84 10 7.03 315
21 81.33 % 82 10 9.79 204 70 80.44 % 86 10 7.87 315
51 76.44 % 84 10 6.75 206 30 80.44 % 78 10 12.49 317
37 77.33 % 88 10 5.40 208 80 81.33 % 80 10 7.24 318
67 78.67 % 88 10 3.56 208 35 82.22 % 82 10 11.47 319
18 80.44 % 84 10 4.82 211 60 77.78 % 86 10 5.51 326
43 76.44 % 80 10 4.99 212 72 80.44 % 78 10 10.05 330
22 79.56 % 80 10 7.19 218 26 80.00 % 82 10 7.94 333
61 80.44 % 84 10 5.14 223 64 80.89 % 88 10 11.29 363
56 79.11 % 84 10 3.91 225 40 82.67 % 84 10 10.70 366
92 80.44 % 82 10 9.93 227 20 79.11 % 84 10 9.53 379
17 79.56 % 82 10 8.92 228 24 80.00 % 84 10 9.74 387
54 80.44 % 82 10 4.69 228 89 81.33 % 82 10 12.81 388
58 79.56 % 84 10 4.51 234 27 81.33 % 86 10 7.89 389
39 81.33 % 82 10 11.59 237 66 80.44 % 82 10 8.47 402
16 79.56 % 84 10 5.28 239 57 81.33 % 80 8 30.87 427
62 79.56 % 82 10 5.65 240 84 84.00 % 78 9 28.91 444
81 77.78 % 82 10 10.28 252 55 81.78 % 84 9 16.52 471
47 79.11 % 84 10 10.47 254 86 83.11 % 78 1 45.20 1268

Cuadro 4.4: Resultados de las pruebas exhaustivas realizadas al compilador. En las tablas
figuran 70 cuadrı́culas a las que se halló por lo menos una solución junto con los indicadores
promedio de eficiencia. Los resultados se ordenan según el número de backtracks promedio (bt)
que se realizaron al resolver cada instancia del problema.

56
Id d |X| XC bt
87 82.22 % 54 1173.67 -
85 85.78 % 70 760.20 -
90 84.89 % 70 744.52 -
88 86.67 % 72 733.54 -
84 84.00 % 78 587.13 444
86 83.11 % 78 574.76 1268
83 82.22 % 78 562.53 280

Cuadro 4.5: Las seis cuadrı́culas más complejas según el indicador de complejidad propuesto.
Los resultados de las pruebas ratificaron la complejidad de estas cuadrı́culas.

Id |Dict| t[s] bt
828 4166 - -
829 8332 - -
830 12498 - -
831 16663 - -
832 20829 - -
833 24995 - -
834 29160 321.00 9527
835 33326 30.60 916
836 37492 12.60 412
837 41657 156.00 3876
838 45823 6.84 300
839 49989 19.20 731
840 54155 8.56 462
841 58320 7.89 443
842 62486 26.10 1082
843 66652 94.00 1404
844 70817 36.10 2246
845 74983 23.80 607
846 79149 313.00 3837
847 83314 7.69 250

Cuadro 4.6: Resultados de las pruebas realizadas utilizando distintas variaciones del diccio-
nario. Se puede observar que con diccionarios que tienen menos de veinticinco mil entradas,
uniformemente repartidas, el compilador no pudo encontrar soluciones en el tiempo de ejecución
permitido.

57
CAPÍTULO 5
EL SISTEMA

El presente capı́tulo comprende el análisis y diseño del sistema dirigiendo especial


atención al diseño de la base de datos. La metodologı́a utilizada en este capı́tulo se
basa en el método de modelamiento conceptual conocido como ORM y se representan
los casos de uso mediante el lenguaje unificado de modelaje (UML).

5.1. Análisis de requerimientos

La primera etapa en el desarrollo de un sistema consiste en determinar cuáles son


los requerimientos que debe cumplir. Estos se dividen en funcionales y no funcionales.
Los requerimientos funcionales están relacionados a la funcionalidad que tendrá el
sistema, mientras que los no funcionales hacen referencia a requerimientos externos.
La determinación correcta de los requerimientos permite obtener un modelo básico
de cómo tiene que funcionar el sistema y bajo qué caracterı́sticas.

5.1.1. Requerimientos funcionales

En base a los objetivos del proyecto se puede determinar una lista inicial de
requerimientos que el sistema debe cumplir. Estos permiten modelar el sistema desde
una perspectiva de actores y casos de uso.

Se identificaron tres actores los cuales se describen a continuación:

Administrador.- Es el usuario que tendrá acceso total al sistema. Tendrá a su cargo


la administración de usuarios, parámetros de sistema, diccionario, etc. También
podrá tener acceso a reportes convencionales y estadı́sticos del sistema.

Constructor.- Representa a un conjunto muy importante de usuarios encargados


de administrar el diccionario y las claves. Estos usuarios deben ser personas
que tengan dominio del lenguaje, alta preparación, mucha cultura y dedicación
con el fin de mantener la calidad de los datos lo más alta posible.

58
Adm. Diccionario
Adm. Configuración
Adm. Usuarios

Adm. Cuadrículas
Adm. Solicitudes

Generar Reportes Administrador Adm. Claves

Figura 5.1: Casos de uso elementales: Administrador

Cliente.- Representa al conjunto de personas y/o entidades que serán los usuarios
finales del sistema.

Casos de uso elementales - Administrador

Los casos de uso elementales del actor administrador engloban las posibles inter-
acciones que puede tener el administrador con el sistema (ver figura 5.1). Se detalla
cada caso de uso a continuación:

Administrar Parámetros de Configuración.- Involucra la administración de la


configuración del sistema. Los parámetros configurables son: formatos (fechas,
números, etc), categorı́as disponibles para asignación a palabras, hojas de estilo
(CSS), etc.

Administrar Usuarios.- Hace referencia a la creación, modificación y borrado de


usuarios. También involucra la asignación de roles a cada usuario con el fin de
delimitar el acceso al sistema.

Administrar Pedidos.- Comprende el seguimiento a pedidos bajo diversos crite-


rios. Dentro de este caso de uso también se encuentra la posibilidad de cancelar

59
Adm. Claves Adm. Diccionario

Constructor

Figura 5.2: Casos de uso elementales: Constructor

un pedido.

Administrar Cuadrı́culas.- Hace referencia a la creación, modificación y borrado


de cuadrı́culas que serán utilizadas para generar crucigramas.

Generar Reportes.- Es uno de los casos de uso más importantes del sistema. Invo-
lucra la generación de reportes y estadisticas referentes a solicitudes, usuarios,
diccionario, etc.

También son casos elementales del administrador administrar claves y adminis-


trar diccionario, sin embargo como dichos casos están más relacionados con las tareas
de los usuarios constructores se los describe más adelante.

Casos de uso elementales - Constructor

Los usuarios constructores tienen acceso a una porción más limitada del sistema
que los usuarios administradores. Los dos casos de uso que los caracterizan son los
que siguen (ver figura 5.2):

Administrar Diccionario.- Este caso de uso comprende las siguientes acciones:


Agregar, modificar o eliminar palabras del diccionario y calificar las palabras
de acuerdo al grado de complejidad. También se encuentra dentro de este caso
de uso la categorización de palabras.

Administrar Claves.- La administración de claves se basa en las acciones de crear,

60
Solicitar
Adm. Crucigramas Crucigramas

Cliente

Figura 5.3: Casos de uso elementales: Cliente

modificar y eliminar claves de la base de datos. Las claves estarán necesaria-


mente asociadas a palabras y podrán ser clasificadas como claves crı́pticas o
normales. También se podrá calificar a las claves según su complejidad.

Casos de uso elementales - Cliente

Por último, el actor cliente es aquel que representa al usuario que accederá a los
servicios prestados por el sistema. Los casos de uso de este actor se describen en las
siguientes lı́neas (ver figura 5.3):

Administrar Crucigramas.- Implica el acceso a la base de datos de crucigramas


ya generados, para realizar descargas o solicitar la regeneración de los mismos.
Se admitirá la eliminación de crucigramas e incluso la modificación de claves
con el fin de brindar mayor flexibilidad.

Solicitar Crucigramas.- Hace referencia al proceso de solicitud de generación de


crucigramas personalizados. En este proceso se podrán especificar parámetros
con relación a la geometrı́a del crucigrama, los temas y la dificultad.

5.1.2. Requerimientos no funcionales

Los requerimientos no funcionales son aquellos ajenos al desempeño funcional del


sistema pero que son de igual manera importantes y se deben tomar en cuenta al
momento de diseñar la aplicación. Los requerimientos no funcionales del sistema se

61
citan a continuación:

El sistema deberá ser seguro en cuanto a los accesos a datos.

El sistema deberá poseer una arquitectura robusta y extensible.

El sistema deberá ser desarrollado, en lo posible, utilizando software abierto.

El sistema deberá ser capaz de funcionar bajo entornos con mediana capacidad
de procesamiento.

El sistema deberá estar bien documentado.

El sistema deberá estar desarrollado para funcionar a través de Internet.

5.2. Arquitectura candidata

Debido a las caracterı́sticas del sistema, entre las más importantes el hecho de que
vaya a funcionar en Internet, y a los requisitos no funcionales, como ser seguridad y
estabilidad, se plantea una arquitectura de tres capas como la arquitectura candidata
para desarrollar el sistema.

La figura 5.4 representa la arquitectura mencionada la cual se compone de tres


niveles. El primero corresponde al nivel de base de datos donde presta sus servicios
el DBMS. Una capa más arriba está el nivel de aplicación donde se implementa
la funcionalidad del sistema. Se puede apreciar a primera instancia que este nivel
está compuesto por tres módulos: El compilador, el núcleo y el formateador. Todos
ellos interactúan con la base de datos en distintos niveles. En la capa más alta reside
el servidor web, el que gestionará pedidos de los usuarios directamente con el núcleo
del sistema.

Los sistemas de tres capas son muy seguros y eficaces y, combinados con el enfoque
cliente-servidor, permiten reducir al mı́nimo los requisitos básicos de hardware y
software en las plataformas cliente.

62
Presentación
SERVIDOR WEB

Compilador Núcleo Formateador


Funcional

DBMS
Datos

Figura 5.4: Arquitectura de tres capas. La capa inferior corresponde a la base de datos,
la intermedia se denomina nivel de aplicación y la última corresponde al servidor web que
interactuará con las solicitudes de los clientes.

Para implantar y desarrollar el sistema generador de crucigramas personalizados,


según la arquitectura candidata planteada, es necesario contar con los siguientes
requisitos de software:

Linux 2.4.x .- Sistema operativo multiusuario y multitarea ideal para servidores y


equipos de alto rendimiento.

PostgreSQL 7.x .- Avanzado manejador de bases de datos que soporta el modelo


objeto relacional. Estará orientado a proporcionar servicios en la capa más baja
del sistema.

Apache SSL.- Servidor web con importantes caracterı́sticas, como ser: eficiencia,

63
seguridad, flexibilidad, etc. El servidor Apache funcionará en el nivel más alto
del sistema.

LATEX.- Formateador de textos que será utilizado para dar formato gráfico final a
los crucigramas generados.

Sendmail o Postfix .- MTA que permitirá la comunicación por medio de correo


electrónico entre el sistema y los usuarios.

Paquetes Adicionales .- Perl, PHP.

Los requisitos de software necesarios para acceder al sistema como cliente son los
que siguen:

Navegador Web HTTP 1.1 (Mozilla, Opera, Firefox, IE, etc.) con JavaScript
instalado, soporte para Cookies y soporte para SSL.

5.3. Diseño de la base de datos

La calidad en el diseño de una base de datos asegura en gran parte la eficacia,


eficiencia, productividad y adaptabilidad de una aplicación. En busca de lograr un
diseño estable y eficiente es mejor modelar el sistema primero a nivel conceptual,
utilizando conceptos y un lenguaje que sea comprensible.

En la presente sección se lleva a cabo el diseño de la base de datos que residirá en


el nivel más bajo de la aplicación. Se plantea un modelo conceptual basado en la
metodologı́a denominada modelamiento objeto-rol, que permite abstraer la manera
en la que están relacionados los objetos entidades y la información que albergan.
Luego a, partir de la conceptualización del sistema, se obtiene un modelo entidad-
relación que podrá ser implementado en un manejador de base de datos relacional
u objeto relacional.

64
Owner
clue_type (id_us er_acct)

C ategory
(id_category)

C lue
(id_clue)
length

Word
(id_word))
s core_human

entry
s core_human
s core_s yntax

entry

Figura 5.5: Diagrama Objeto-Rol que modela conceptualmente el diccionario y las claves del
sistema.

5.3.1. Modelamiento conceptual

Para modelar conceptualmente la base de datos correspondiente al sistema gene-


rador de crucigramas se utilizó la metodologı́a denominada modelamiento objeto-rol
o ORM (Object Role Modeling). Una breve introducción a dicha metodologı́a puede
encontrarse en [HAL98b].

Si bien ORM es una metologı́a que se adapta mejor al modelamiento conceptual


de datos, puede también ser utilizada para representar modelos orientados a objetos
con menor detalle que otras metologı́as como UML [HAL98a].

El modelo ORM correspondiente al diccionario puede ser apreciado en la figu-


ra 5.5. Se eligió este modelo para mostrar parcialmente los beneficios de la metodo-
logı́a transcribiendo la descripción de algunos de los roles a continuación:

Palabra - Categorı́a Palabra corresponde a categorı́a, es posible que alguna pala-

65
bra corresponda a muchas categorı́as y que alguna categorı́a contenga más de
una palabra.

Palabra - longitud Cada palabra tiene una longitud determinada.

Palabra - Clave Palabra es referenciada por una o más claves, una clave corres-
ponde a una palabra.

La metodologı́a permite modelar conceptualmente objetos que juegan roles, utili-


zando el lenguaje natural. Cada objeto es a su vez una entidad o un valor (los valores
son encerrados en lı́neas punteadas). Los roles pueden ser instanciados con una mues-
tra de datos que permite inferir las restricciones. El modelo final obtenido puede ser
fácilmente transformado, mediante algoritmos, a un módelo lógico entidad-relación
que podrá ser implementado en un manejador de bases de datos relacional u objeto
relacional. Una excelente referencia al modelamiento objeto rol y a bases de datos
en general puede ser encontrada en el libro Information Modeling and Relational
Databases: From Conceptual Analysis to Logical Design [HAL01].

El resto de los modelos ORM correspondientes al sistema generador de crucigra-


mas se encuentran en el Anexo A.

5.3.2. Modelo entidad-relación

A partir del modelo conceptual del sistema, descrito en la anterior sección, es


posible obtener un modelo ER normalizado y optimizado según las caracterı́sticas
conceptuales modeladas.

El modelo ER obtenido para el sistema puede ser dividido en cuatro partes:


usuarios, diccionario, crucigramas y pedidos, las cuales se describen a continuación.

Usuarios La figura 5.6 representa el modelo de usuarios para el sistema. Se compo-


ne de una tabla orientada a almacenar datos comunes sobre usuarios (nombre,
apellido, login, etc), la cual es asociada con un rol que determina las carac-

66
param us er_acct
PK id_param PK id_us er_ac c t

FK 1 id_param_c ategory name


c ategory_key_referenc e I1 las tname role
name U1 email
PK id_role
id_parent gender
data_field_1 FK2 id_courtes y_title
des c ription
data_field_2 U2 login
data_field_3 md5_pas s word
las t_login
FK 1 id_role
birthday
id_country

privilege role_privilege
PK id_privilege PK id_role_privilege

des c ription F K 1,U1 id_role


U1 logic al_name F K 2,U1 id_privilege

Figura 5.6: Modelo entidad-relación correspondiente a usuarios del sistema. El modelo repre-
senta los distintos tipos de usuario, asi como la asignación de roles y privilegios para controlar
los niveles de acceso.

terı́sticas del usuario. Por ejemplo, el rol “cliente” hace referencia al usuario
final del sistema, el cual podrá realizar solicitudes personalizadas para la ge-
neración de crucigramas. Otro rol es el denominado “constructor”, este tipo
de usuario dedicará sus esfuerzos a mantener la base de datos amplia y con-
sistente. Gran porcentaje de la calidad de los crucigramas obtenidos recae en
este tipo de usuario. Finalmente existe un rol que identifica a los usuarios
“administradores” del sistema.

Diccionario Es el núcleo del sistema sobre el cual se realizan las distintas tareas
(figura 5.7). En primera instancia, está compuesto por las palabras, las cua-
les están acompañadas de un conjunto de indicadores de calidad que serán
utilizados por el compilador. Cada palabra puede estar asociada con muchas
categorı́as lo que permite obtener un subconjunto de palabras correspondientes
a un número limitado de temas.
De la misma manera, cada palabra puede estar asociada a muchas claves, las
que tendrán distintos niveles de complejidad y habrán sido propuestas por un

67
category word us er_acct

PK id_c ategory PK id_word PK id_us er_ac c t

U1 name U1 entry name


des cription length I1 las tname
s c ore_s yntax U1 email
s c ore_human gender
FK 1 id_owner FK2 id_courtes y_title
I1 random_pick U2 login
c ens ors hip md5_pas s word
aproved las t_login
has _drae_entry FK 1 id_role
drae_entry birthday
id_country

word_category
PK id_word_c ategory clue

PK id_clue
F K 1,U1 id_word
F K 2,U1 id_c ategory
entry
FK 1 id_word
s c ore_human
clue_type
FK 2 id_us er_ac c t

Figura 5.7: Modelo entidad-relación que representa como se almacenan las palabras en la
BD. Se puede apreciar la relación entre claves y palabras como también ciertos indicadores de
calidad que permitirán generar crucigramas con distintos niveles de complejidad.

usuario constructor.

Crucigramas Un nivel más arriba que el diccionario, se encuentra el modelo de


crucigramas (figura 5.8), vital para el desarrollo del sistema. Este modelo se
compone de la tabla destinada a almacenar crucigramas, los cuales estarán
asociados a una cuadrı́cula, al usuario que solicitó el crucigrama y a un conjunto
de categorias de las cuales se obtuvieron las palabras para compilarlo.
La entidad cuadrı́cula es muy importante también. Su función es almacenar
todas las posibles cuadrı́culas sobre las cuales se podrán hacer solicitudes de
generación de crucigramas. Aparte de la cuadrı́cula en si, contiene indicadores
de calidad de la cuadrı́cula como ser: densidad, grado de integración, etc.

68
cros s word_s olution cros s word us er_acct
PK id_c ros s word_s olution PK id_c ros s word PK id_us er_ac c t

FK 1 id_c ros s word name name


word id_grid I1 las tname
pos _row grid U1 email
pos _c ol FK 1 id_us er_ac c t gender
is _ac ros s c omplexity FK2 id_courtes y_title
clue file_path U2 login
clue_number internal_s tatus md5_pas s word
date_c ompleted las t_login
cpu_time_us ed FK 1 id_role
backtracks _us ed birthday
id_country

cros s word_category category


PK id_c ros s word_c ategory PK id_c ategory

F K 1,U1 id_c ros s word U1 name


F K 2,U1 id_c ategory des cription

Figura 5.8: Modelo entidad-relación correspondiente a crucigramas. Es importante destacar


que la cuadrı́cula, en primera instancia, es un elemento independiente del crucigrama.

5.4. Módulo formateador de crucigramas

Durante el análisis y prototipaje del sistema generador de crucigramas se vió que


el módulo formateador es significativamente más sencillo de diseñar e implementar
que el compilador. Desde la definición de los objetivos del proyecto, entregar los
crucigramas en un formato gráfico de alta calidad fue una consideración vital a
tomar en cuenta. Fue por esto que se consideró, inicialmente, implementar un módulo
independiente que se dedique solamente a esta función. La figura 5.4, que representa
la arquitectura candidata, ratifica la preconcepción que se tenı́a del sistema antes de
llevar el análisis a una siguiente etapa. Luego de estudiarse una serie de opciones que
permitan la obtención de la funcionalidad deseada para este módulo, se descubrió que
en realidad esta tarea era mucho más sencilla de realizar que lo que se tenı́a previsto.
La presente sección presenta, de manera resumida, cómo se integró al sistema la
capacidad de obtener crucigramas en formato gráfico de alta calidad, dejando de
lado la investigación y el análisis de distintas metologı́as por considerarse menos

69
relevante, sobre todo en función al trabajo que se hizo en el módulo compilador.

5.4.1. Formatos gráficos de alta calidad

Existen dos tipos de formatos gráficos, los basados en mapas de imagen y los
basados en vectores. Los formatos basados en mapas de imagen almacenan la infor-
mación referente a la imagen considerando que la misma está definida por una matriz
de puntos llamados pixels. Cada pixel contiene información sobre el color que repre-
senta en la imagen, el mismo que está limitado por la cantidad de bits que componen
el pixel. Por otro lado, los gráficos basados en vectores tienen la caracterı́stica de estar
formados por un conjunto de lı́neas y figuras que se definen matemáticamente.

Los gráficos basados en vectores, al no estar ligados a una resolución fija (entre
otras cosas), se convierten en el tipo de formato ideal para obtener crucigramas de
alta calidad. De los diversos formatos que existen con esta caracterı́stica, se deci-
dió que el sistema cuente con la posibilidad de descargar los crucigramas generados
ya sea en formato EPS o PDF. El primero es un formato, basado en el lenguaje de
impresión Postscript, reconocido por la mayor parte de aplicaciones orientadas a la
ilustración y ampliamente utilizado por editores en medios de publicación escrita.
Por su parte, el formato PDF, basado también en Postscript, se adapta mejor a las
necesidades de los usuarios, de obtener impresiones finales de sus crucigramas de ma-
nera fácil y directa. Todas aquellas personas que no requieran de la realización de un
trabajo de edición posterior a la obtención del crucigrama, optarán por este último
formato. La elección de estos formatos garantiza un equilibrio entre la portabilidad
y la flexibilidad de los crucigramas generados por el sistema.

5.4.2. Formateo de crucigramas con LaTeX

Desde un principio, como se mencionó al comienzo de esta sección, se pensó en la


necesidad de implementar un módulo independiente que permita realizar el forma-
teo de crucigramas. Posteriormente se vió conveniente la utilización de LATEX como
reemplazo a este módulo, ya que, además de cumplir con todos los requisitos ne-

70
TeX
LaTeX

DVI

DVI EPS ó PDF DVI

dvips dvipdfm

PS

PDF
PDF

gs

EPS
EPS

Figura 5.9: A partir de un archivo fuente de LaTeX, se procesa el respectivo archivo DVI el
cual se convierte posteriormente al formato requerido por el usuario.

cesarios, es una solución versátil, de fácil implementación y que otorga un nivel de


flexibilidad muy importante.

LATEX es un paquete utilizado para la estructuración y formateo de textos en alta


calidad. El objetivo principal de este paquete es permitir a los autores concentrarse
en el contenido de sus documentos, dejando las funciones de formateo al paquete
en sı́. LATEX es una aplicación muy popular en la comunidad cientı́fica y académica.
Se utiliza para la presentación de trabajos de tesis, artı́culos y publicaciones en
general, en las más prestigiosas universidades y organizaciones del mundo. Entre
otras ventajas, LATEX es gratuito, está disponible para diferentes plataformas, los
archivos son portables, es extensible y sobre todo permite obtener documentos en
formatos muy altos de calidad listos para su publicación.

A su vez, LATEX brinda soporte para realizar ilustraciones utilizando comandos de


alto nivel. Fue esta combinación de ilustraciones y texto la que se utilizó en el proceso
de obtención de crucigramas en formato gráfico de alta calidad. Según la arquitectura
planteada en la figura 5.4, lo que se hizo fue reemplazar el módulo formateador con
LATEX y se procedió a implementar en el núcleo las funciones necesarias para obtener

71
el código fuente que permita generar archivos PDF o EPS.

Nativamente LATEX solamente produce archivos DVI, los cuales se utilizan para
realizar la respectiva impresión del documento. Por ende es necesario transformar
este tipo de archivo a los formatos requeridos. Esta tarea es inmediada utilizando
pequeños utilitarios que vienen incluidos con cualquier distribución de LATEX mo-
derna. El proceso de conversión según el tipo de archivo requerido se ilustra en la
figura 5.9.

5.5. Módulo compilador de crucigramas

Una vez que se realizaron las pruebas respectivas al módulo compilador de cru-
cigramas (veáse anterior capı́tulo), se procedió a realizar la integración del mismo
con el sistema. Se vió conveniente utilizar como interfaz de comunicación entre éste
y el núcleo, a la base de datos directamente. De esta manera el compilador puede
funcionar como una aplicación independiente.

El módulo compilador de crucigramas fue adaptado para funcionar como un pro-


ceso demonio, es decir que no requiera atención del usuario y pueda funcionar perma-
nentemente. Sencillamente deberá revisar cada cierto tiempo si en la base de datos se
han registrado nuevos pedidos, procederá a resolverlos y a almacenar las soluciones.
El lograr la independencia funcional de este módulo, de hecho el más importante del
sistema, trae muchos beneficios, entre ellos la posibilidad de distribuir el trabajo de
construcción de crucigramas entre muchos servidores.

En el presente trabajo se adaptó el compilador para que pueda trabajar en un


número determinado de pedidos a la vez. Esto se logró utilizando la teorı́a de control
de procesos, en la que se uso un proceso padre con la función de obtener los pedidos
y derivarlos a procesos hijos para que los resuelvan. El número máximo de pedidos
a resolver en paralelo es configurable y dependerá de las caracterı́sticas del servidor
en el que se está ejecutando el sistema. De manera experimental se determinó que
los requisitos de memoria para cada proceso hijo, tomando en cuenta un diccionario

72
de ochenta mil palabras y una cuadrı́cula promedio de 15x15, no exceden los 10Mb.

También es bueno notar que la independencia funcional de este módulo permitirı́a,


dado el caso, que el sistema desempeñe sus funciones con normalidad aun si no
existiese un proceso compilador funcionando. Eventualmente cuando el compilador
reanude sus tareas deberá empezar a resolver los pedidos acumulados. En este punto
vale la pena aclarar que la resolución de pedidos se realizará en orden de llegada.

5.6. Implementación del sistema

Una vez implementado el sistema, se integró el compilador de crucigramas y


se procedió a desarrollar la interfaz entre el sistema y el módulo formateador de
crucigramas (en este caso LATEX). Según el análisis realizado, se implemtó el sistema
de tres capas en base a un entorno Apache/PHP/PostgreSQL. Adicionalmente se
utilizaron librerias de PEAR y se vió conveniente incluir el paquete jpgraph para la
generación de gráficos estadı́sticos.

5.7. Pruebas

Una vez llevada a cabo la integración, las pruebas se limitaron a simular todos
los casos de uso definidos en el análisis con el fin de depurar mejor el prototipo final.
Se utilizó una base de datos de mediana calidad y se pudo tener acceso a algunos de
los resultados estadı́sticos generados por el sistema.

5.7.1. Población de la base de datos

Entre las limitaciones del proyecto, citadas en el primer capı́tulo, se especifica


que el sistema deberá proveer una base de datos de palabras en español, pero que las
claves, ası́ como las categorı́as y niveles de complejidad, corresponderán a entradas
ficticias generadas aleatoriamente con el fin de realizar pruebas que se asemejen a la
realidad.

Durante el proceso de desarrollo del proyecto, se utilizó el diccionario de la Real

73
Academia de la Lengua Española en su versión completa. Inicialmente se tuvo acceso
a las palabras únicamente. Luego se encontró la manera de automatizar un proceso
de captura de significados utilizando el conjunto de palabras, un robot web imple-
mentado para el caso y el diccionario electrónico de la Real Academia disponible en
lı́nea en Internet. Habiendo obtenido estos datos, se procedió a aplicar heurı́sticas
sencillas que automaticen el proceso de generación de claves para las más de sesenta
mil palabras.

Concluida esta etapa se contó con una base de datos con mayor calidad a la que se
tenı́a prevista, por lo que los resultados a las pruebas realizadas demostraron que es
posible obtener crucigramas que requieran muy poco trabajo previo a la publicación
final. Sin lugar a dudas, una base de datos de muy alta calidad podrı́a contribuir
a generar crucigramas muy similares a aquellos construidos sin intervención de la
tecnologı́a.

5.7.2. Resultados

A la fecha de entrega del presente documento, el sistema generador de cruci-


gramas personalizados ha resuelto algo más de dos mil pedidos que se generaron
durante la etapa de pruebas. La cantidad de información generada durante todo este
perı́odo permitió la obtención de datos estadı́sticos interesantes, que ratificaron el
buen desempeño del compilador. Al mismo tiempo, al contar con más de un millar de
soluciones, se afinaron las funciones de formateo logrando el buen comportamiento
de este módulo hasta en situaciones atı́picas (crucigramas extremadamente grandes,
claves con caracteres extraños, etc).

Se distribuyó una serie de crucigramas terminados entre personas aficionadas a la


resolución de estos pasatiempos. La mayorı́a logró resolver los crucigramas comple-
tamente o en al menos un 95 %. La mayor parte de las personas que participaron de
estas pruebas, coinciden en que la inclusión de algunas palabras de uso poco común
elevan la complejidad de los crucigramas considerablemente. Sin embargo, la posi-

74
Evolución hacia la solución
100

80
Porcentaje solucionado

60

40

20

0
0 200 400 600 800 1000 1200
Número de backtrack

Figura 5.10: La figura representa la evolución hacia la solución en el proceso de construcción


de un crucigrama utilizando la cuadrı́cula 43. Se observa que el compilador realizó más de 400
backtracks al tratar de sortear un conflicto encontrado cuando más de la mitad de las variables
tenı́an valores asignados

bilidad de utilizar claves mejor elaboradas, hecho que deriva del formato utilizado
(Americano), compensa en cierta manera el uso de palabras complejas. Esto debido a
que en algunos casos las claves pueden ser más descriptivas. Unos pocos observaron
que resolver crucigramas con este formato resulta algo más incómodo que resover
crucigramas como los que circulan en nuestro medio. En especial cuando existen un
gran número de claves.

En general la respuesta fue positiva. Incluso el nivel de complejidad de algunos


crucigramas, aparentemente alto, estimuló a las personas a superar el reto.

A su vez, el hecho de que los crucigramas fuesen obtenidos casi sin intervención
humana causó cierta sorpresa e interés en el tema.

Antes de la culminación de este capı́tulo, vale la pena realizar un análisis de

75
Evolución hacia la solución
100

80
Porcentaje solucionado

60

40

20

0
0 200 400 600 800 1000 1200 1400 1600 1800 2000
Número de backtrack

Figura 5.11: La figura representa la evolución hacia la solución en el proceso de construcción


de un crucigrama utilizando la cuadrı́cula 61. En este caso el compilador logró construir más
de un 80 % del crucigrama casi sin inconvenientes, para luego estancarse en la resolución de
un conflicto por un tiempo considerable.

algunos gráficos obtenidos a partir de los resultados, que reflejan caracterı́sticas im-
portantes del proyecto.

Las figuras 5.10 y 5.11 representan la extensión iterativa de soluciones parciales


hacia la solución final en dos muestras que corresponden a las cuadrı́culas 43 y 61. Los
gráficos muestran el comportamiento del compilador al intentar realizar el total de
asignaciones a las variables del problema. Se puede observar que existen sectores que
permanecen durante mucho tiempo sin mostrar una evolución significativa hacia la
solución. Estos sectores, identificables en cada gráfico, corresponden a la asignación
de las variables que restringen el problema en mayor medida. Si se observa la entrada
correspondiente a las cuadrı́culas en cuestión en el Anexo B, se puede observar las
redes de restricciones y tener una idea de cuales son los nodos clave que causan
mayor conflicto en cada problema.

76
450
Curva de aproximación
Muestra vs Backtracks
400

350

300
Backtracks necesarios

250

200

150

100

50

0
0 1 2 3 4 5 6 7 8 9
Número de muestra

Figura 5.12: Gráfico de desempeño correspondiente a la cuadrı́cula 43. Se observa que la mayor
parte de las veces el compilador requirió menos de 300 backtracks para resolver la cuadrı́cula.

A su vez, si se observan las figuras 5.10 y 5.11 se puede comprobar el desempeño


de las cuadrı́culas 43 y 69 a lo largo de las muestras tomadas por el sistema. Los
gráficos de desempeño permiten verificar si el compilador resuelve la mayor parte de
los crucigramas asociados a una cuadrı́cula de manera estable. Es decir utilizando
un número dado de backtracks que se encuentra encasillado en un rango aceptable.
Por ejemplo, si en la figura 5.10 se tuviesen muestras en las que se han utilizado
más de mil backtracks cuando en la mayor parte de los casos se utilizaron menos de
trescientos, se podrı́a sospechar que el compilador está teniendo un comportamiento
errático. De manera contraria, si se realizasen ajustes al compilador que incrementen
significativamente la eficacia del mismo, estos cambios deberı́an verse reflejados en
los gráficos de desempeño. Claro está que a medida que el compilador resuelva más
y más muestras, los gráficos serán cada vez más valuables para la optimización de
este.

77
200
Curva de Aproximación
Muestra vs Backtracks

150
Backtracks necesarios

100

50

0
0 1 2 3 4 5 6 7 8 9
Número de muestra

Figura 5.13: Gráfico de desempeño correspondiente a la cuadrı́cula 69. Refleja la tendencia


que tiene el compilador para resolver crucigramas sobre esta cuadrı́cula.

78
CONCLUSIONES Y RECOMENDACIONES

En el presente trabajo se ha estudiado de manera teórica el problema de la cons-


trucción de crucigramas y se han puesto en práctica los conceptos recolectados para la
implementación del sistema generador de crucigramas. Los resultados obtenidos han
sido positivos, y se ha cumplido con los objetivos planteados al inicio del proyecto.

El compilador de crucigramas, considerado desde un principio como el factor


crı́tico de éxito del proyecto, ha concentrado la mayor parte del trabajo de investi-
gación realizado y ha obtenido resultados satisfactorios. El estudiar el problema de
la construcción de crucigramas utilizando como enfoque el marco teórico correspon-
diente a las problemas sujetos a la satisfacción de restricciones (CSP’s), ha sido muy
beneficioso, en el sentido que se ha tenido acceso a una gran cantidad de informa-
ción referente a investigaciones realizadas en dicha área. Se ha comprobado que la
utilización del algoritmo backtracking dinámico, propuesto por Ginsberg, junto con
heurı́sticas que guı́en la búsqueda de manera inteligente, ha servido para la obtención
de un compilador robusto y eficaz. De igual manera, la selección de estructuras de
datos apropiadas, tanto para la adaptación de backtracking dinámico al problema de
la construcción de crucigramas como para la implementación de librerı́as adicionales,
ha sido crucial, logrando aumentar la eficiencia del compilador y reduciendo mucho
los recursos necesarios para su apropiado funcionamiento.

En el capı́tulo 4 se ha propuesto un indicador de complejidad basado en las


caracterı́sticas de una cuadrı́cula dada. Los resultados experimentales han compro-
bado el buen comportamiento de este indicador por lo que podrı́a ser utilizado para
la clasificación de cuadrı́culas en tratables o intratables.

Se ha comprobado que el compilador de crucigramas requiere, para cuadrı́culas


de complejidad promedio, un diccionario lo suficientemente grande como para en-
contrar una solución al problema según las restricciones planteadas. Esto genera la
inconveniencia de no poder ofrecer crucigramas totalmente personalizados, ya que

79
la elección de temas y complejidad reducirı́a notablemente la cardinalidad del dic-
cionario y el problema podrı́a tornarse intratable. Por esto, se ha visto conveniente
combinar las entradas de diccionario personalizadas con otros elementos (que tal vez
no corresponden a las caracterı́sticas propuestas por el usuario) con el fin de man-
tener la cardinalidad del diccionario dentro de los márgenes que aseguren resultados
exitosos.

Se ha encontrado en LATEX una solución ideal al formateo de crucigramas. La


flexibilidad del paquete y la calidad de los resultados obtenidos (ver anexos) ha
complementado de buena manera los resultados obtenidos por el compilador.

Por último, se debe recordar que si bien el sistema cumple con los objetivos
planteados, la calidad de los crucigramas generados dependerá, ahora por completo,
de la calidad de los datos. Si la base de datos es mantenida por usuarios expertos,
que se dedican a diversificar e introducir elementos cuidadosamente seleccionados,
entonces, en combinación con el sistema, se podrán producir crucigramas de muy
alta calidad competitivos con aquellos publicados por medios prestigiosos.

Trabajo futuro

El marco de los problemas sujetos a la satisfacción de restricciones y los problemas


NP-Completos, define un área de investigación vigente que puede ser aplicada a
muchos problemas de interés actual. Se ha visto que el problema de la construcción de
crucigramas es, por muchos motivos, un problema ideal para prototipaje de nuevos
algoritmos orientados a resolver CSP’s. El compilador de crucigramas podrı́a ser
fácilmente adaptado para contribuir a estos fines.

Se conoce de otros algoritmos que han obtenido muy buenos resultados en la


resolución de CSP’s. Por ejemplo el algoritmo backtracking dinámico de orden parcial,
que tiene la caracterı́stica de reponerse a la anomalı́a del error temprano. Estos
algoritmos podrı́an contribuir a mejorar el desempeño del compilador de crucigramas.
Vale la pena también estudiar otros enfoques distintos como el uso de algoritmos

80
genéticos en el modelo de instanciación por letra.

Durante el desarrollo del presente trabajo se utilizaron herramientas de software


abierto solamente, todas ellas de muy alta calidad y que contribuyeron en todas las
etapas del proyecto. Se ha considerado la posibilidad de sacar una versión del sistema
generador de crucigramas que sea gratuita y con código abierto. Esto posibilitarı́a
la participación de otros desarrolladores y la calidad del sistema aumentarı́a consi-
derablemente. A la fecha de entrega de este documento, se ha visto que esta es la
opción más conveniente. El sistema será sujeto a un proceso de revisión y documen-
tación luego del cual se procederá a publicarlo abierto bajo la licencia que sea más
adecuada.

81
BIBLIOGRAFÍA

[BAK95] BAKER, Andrew


1995 Intelligent Backtracking on Constraint Satisfaction Problems: Ex-
perimental and Theorical Results. Tesis Doctoral, Universidad de Oregon

[COR90] CORMEN, Thomas; LEISERSON, Charles y RIVEST, Ronald


1990 Introduction to Algorithms. The MIT electrical engineering and
computer science series. MIT Press, vigésima tercera edición

[Cru02] Cruciverb.com
2002. Basic Rules of Crossword Construction. Sitio Web

[DEC92] DECHTER, Rina


1992 Constraint Networks. En Encyclopedia of Artificial Intelligence,
págs. 276–285

[GAR79] GAREY, Michael y JOHNSON, David


1979 Computers and Intractability: A Guide to the Theory of NP Com-
pleteness. Freeman and Company

[GIN90] GINSBERG, Mathew et al.


1990 Search Lessons Learned from Crossword Puzzles. En Artificial
Intelligence

[GIN93] GINSBERG, Matthew


1993 Dynamic Backtracking. En Artificial Intelligence Research, págs.
25–46

[GIN96] GINSBERG, Matthew; CRAWFORD, James y David, ETHERINGTON


1996 Dynamic Backtracking. Informe Técnico, Universidad de Oregon

[GRI98] GRIMALDI, Ralph


1998 Matemáticas Discreta y Combinatoria. Addison-Wesley

82
[HAL98a] HALPIN, Terry
1998 Data modeling in UML and ORM revisited. En EMMSAD

[HAL98b] HALPIN, Terry


1998 Object Role Modeling: An Overview . Informe Técnico, Visio Cor-
poration

[HAL01] HALPIN, Terry


2001 Information Modeling and Relational Databases: From Conceptual
Analysis to Logical Design. Morgan Kaufmann

[JEN97] JENSEN, Sik Cambon


1997 Crossword Compilation, Design and Implementation. Tesis de
Maestrı́a, Universidad de Dinamarca

[KUM92] KUMAR, Vipin


1992 Algorithms for Constraint Satisfaction Problems: A Survey. En
AI Magazine, tomo 13 págs. 32–44

[MAZ76] MAZLACK, Lawrence


1976 Computer Construction of Crossword Puzzles Using Precedence
Relationships. En Artificial Intelligence, tomo 7(1) págs. 1–19

[MEE97] MEEHAN, Gary y GRAY, Peter


1997 Constructing Crossword Grids: Use of Heuristics vs Constraints.
En Artificial Intelligence

[PEA97] PEARSON, Justin y JEAVONS, Peter


1997 A Survey of Tractable Constraint Satisfaction Problems. En AI
Magazine

[PM98] PEÑA MARÍ, Ricardo


1998 Diseño de Programas, formalismo y abstracción. Prentice-Hall,
segunda edición

83
[RUS95] RUSSELL, Stuart y NORVIG, Peter
1995 Artificial Intelligence, A Modern Aproach. Prentice Hall

[SIL00] SILLITO, Jonathan


2000 Arc Consistency for General Constraint Satisfaction Problems and
Estimating the Cost of Solving Constraint Satisfaction Problems. Tesis
de Maestrı́a, Universidad de Alberta

84
ANEXO A
MODELOS ORM

1
ANEXO B
CUADRÍCULAS

10
Cuadrı́cula 51

Dimensiones: 15x15
Densidad: 76.44%
Número de Palabras: 84
PLP: 4.09
Indicador de Complejidad: 419.25

1 2 3 4 5 6 7 8 9 10 11

12 13 14 15

16 17 18

19 20 21 22

23 24 25 26

27 28 29 30 31 32 33 34

35 36 37 38

39 40

41 42 43 44 45 46 47

48 49 50 51

52 53 54

55 56 57 58 59 60 61

62 63 64 65 66

67 68 69

70 71 72

11
Grafo de Restricciones: Cuadrı́cula 51

72h 9h

60v 9v
66v 61v 10v 11v

69h 59h 22h 15h


65h 32h 18h
51h
40h

54v 47v 22v 15v

46v 33v 32v 26v


34v
53h 25h
45h 37h
50h 38v 31h

45v 7v

64v 6v
68h 14h
71h 21h 8v
63v 57h 4h
63h 17h
58v 4v

44v 5v

49h 36v 30h


52h 41h 35h
23h
28v
43v 27v
29v 24v

52v 13v
42v 20v
39h

62h 27h
48h 16h
67h 55h 19h 12h

62v 56v 3v 1v
55v 2v

70h 1h

12
Cuadrı́cula 55

Dimensiones: 15x15
Densidad: 81.78%
Número de Palabras: 84
PLP: 4.38
Indicador de Complejidad: 479.83

1 2 3 4 5 6 7 8 9 10 11 12 13

14 15 16

17 18 19

20 21 22 23

24 25 26 27 28 29 30

31 32 33 34

35 36 37

38 39 40 41 42 43

44 45 46

47 48 49 50 51

52 53 54 55

56 57 58 59

60 61 62 63 64 65 66 67

68 69 70

71 72 73

13
Grafo de Restricciones: Cuadrı́cula 55

68h
56h 62v

58v
71h
53v
47v
48v 38h
60h
61h
49v 69h72h 35h
57h
52h

47h 25v24v 31h


26v 2v
39v

27v 1v
44v 39h 14h

24h 5v 1h 3v
17h
44h 6v
21v 20h 4v

36v
45v 50h
28v
46h 32h
43v 37v
41h 41v 33v
42v 36h
46v 54h

51h
59h 40h

51v 10v 18h


30v
55v 7h
15h 7v
22h
73h
64v 70h 8v
63h
34h 29h 9v
67v

65v
66v
12v
11v 13v

11h
23h 19h
16h

14
Cuadrı́cula 57

Dimensiones: 15x15
Densidad: 81.33%
Número de Palabras: 80
PLP: 4.57
Indicador de Complejidad: 523.24

1 2 3 4 5 6 7 8 9 10 11 12 13

14 15 16

17 18 19

20 21 22 23

24 25 26

27 28 29 30 31 32 33 34 35

36 37 38 39

40 41 42 43 44

45 46 47 48 49

50 51 52 53

54 55 56

57 58 59 60 61 62 63

64 65 66 67 68

69 70 71

72 73 74

15
Grafo de Restricciones: Cuadrı́cula 57

1v

2v
3v

1h 17h 14h

20h

36h
40h 4v
41v

28v 21v
45h
27v 24h
29v 10h
5v
50h 27h 13v
11v 19h
25v 7v
12v
54h 46v
5h 16h
6v 10v
37h 18h
51v 22h
15h
8v
42h 30v
55v
65h 9v
57h 47h
57v 73h
64h 38v
70h 26h
23v
58v
43v
72h 60v
59v
64v 52h 31h
66v 34v
69h 56h 35v
48v 39h
33v

32v
53v 44h
49h

61h

71h
74h 67h

62v
63v

68v

16
Cuadrı́cula 74

Dimensiones: 15x15
Densidad: 74.67%
Número de Palabras: 80
PLP: 4.20
Indicador de Complejidad: 441.02

1 2 3 4 5 6 7 8 9 10 11

12 13 14 15

16 17 18

19 20 21

22 23 24 25

26 27 28 29 30

31 32 33 34

35 36 37 38 39 40

41 42 43 44

45 46 47 48

49 50 51 52

53 54 55 56 57 58

59 60 61 62 63 64

65 66 67

68 69 70

17
Grafo de Restricciones: Cuadrı́cula 74

30v

35v

52v

28h 34h 51v


40h
64h 58v
41h
45h
35h 57h
50h
67h
70h
28v29v
1v
12h 32v 44v
26h 31v
16h 39v 48h
2v 38v
1h
4v 42h
3v 23v 6v
37h
19h 31h
22h 24v
17h 5v 5h
14v 13h
36h 7v
43v
33v 25v

66h
27h
63v 60h 21v
25h
49h 20h
62v 46h

61v 10v
69h 53h
47v 11v
15v 9v

8v
46v 8h

18h
56v 54v 55v
53v 15h

65h 59h
68h

18
Cuadrı́cula 75

Dimensiones: 15x15
Densidad: 79.11%
Número de Palabras: 84
PLP: 4.23
Indicador de Complejidad: 449.03

1 2 3 4 5 6 7 8 9

10 11 12 13 14

15 16 17

18 19 20 21

22 23 24

25 26 27 28 29 30 31 32 33

34 35 36 37 38

39 40 41 42 43 44

45 46 47 48 49 50

51 52 53 54 55

56 57 58 59

60 61 62 63 64 65 66 67

68 69 70 71

72 73 74

75 76 77

19
Grafo de Restricciones: Cuadrı́cula 75

39h

72h
68h 45h
25v
75h 62v 51h 26v
46v
27v 10h
61v
25h 1h
60v 15h
52v

34h 1v

60h 2v
56h 11v 3v

19v
35v
18h

57v 40h
63v 22h
41v
12v
47h
4v
69h
73h 53h 23v
70v 76h 4h 5v
28h
48v 12h16h
54v
29v
59v
36h
58h 6v
42h 13v

64h
43v 37v

65v 50v 24h


66v 20h

67v 49h

21v 8v
74h 55h
77h
71h 7v
33v
14v
31v 30h 9v
7h
32v
38h 14h
17h

44h

20
Cuadrı́cula 82

Dimensiones: 15x15
Densidad: 78.67%
Número de Palabras: 86
PLP: 4.12
Indicador de Complejidad: 423.61

1 2 3 4 5 6 7 8 9 10 11 12

13 14 15 16

17 18 19

20 21 22 23 24

25 26 27

28 29 30

31 32 33 34 35 36 37 38 39

40 41 42

43 44 45 46 47

48 49 50 51

52 53 54 55 56 57 58

59 60 61 62 63

64 65 66 67 68

69 70 71

72 73 74 75

21
Grafo de Restricciones: Cuadrı́cula 82

42h

39v 37v

38v
16h
71h 36h 19h
47h
68h
10h
12v
75h 58v 11v
56v 10v
24v
57v 47v
23h
63h
27h
55h

30h 7h
50h
74h 9v
27v
51v 46v
30v
8v
7v
67v
62v
41h 14h 15v 22h
34h 18h
65h 45h
60h 61v 70h
35v 6v
5v
60v
66v
29v
26v 4v
49v 45v 4h
73h 28h
48h

25h
52h
20h
59h
21v 2v
44v
52v 1v
54v 3v 17h
53v
64h
13h
43h 31h
69h 1h
72h
33v

31v 32v

40h

22
Cuadrı́cula 83

Dimensiones: 15x15
Densidad: 82.22%
Número de Palabras: 78
PLP: 4.74
Indicador de Complejidad: 562.53

1 2 3 4 5 6 7 8 9 10 11 12 13

14 15 16

17 18 19

20 21 22 23

24 25 26

27 28 29 30 31 32 33

34 35 36

37 38 39

40 41 42 43 44

45 46 47

48 49

50 51 52 53 54 55 56

57 58 59 60 61

62 63 64

65 66 67

23
Grafo de Restricciones: Cuadrı́cula 83

52v
62h 51v

65h 50v
57h

50h 59v
40h 60v
37h 41v

46v
66h
29v 58h
27h 28v 53v
38v 63h
27v
34h 48h 49v
45h
1h
4v
14h 17h 53h 54v
21v 42h
49h 56v 55v
38h 30v
25v
26v
1v 3v 24h
35h 43v 61h 64h
2v 20h
44v
67h

5v 30h 43h
25h 31v
5h 9v
6v 33v 47h
15h 32v
18h
23v

7v 10v 39h
22h 36h
8v

16h
19h
11v13v
10h
12v

24
Cuadrı́cula 84

Dimensiones: 15x15
Densidad: 84%
Número de Palabras: 78
PLP: 4.85
Indicador de Complejidad: 587.13

1 2 3 4 5 6 7 8 9 10 11 12 13

14 15 16

17 18 19

20 21 22

23 24 25

26 27 28 29 30 31

32 33 34 35

36 37 38 39 40

41 42 43 44 45

46 47 48

49 50 51 52

53 54 55 56 57 58

59 60 61

62 63 64

65 66 67

25
Grafo de Restricciones: Cuadrı́cula 84

59h
65h
62h 55v
53v
54v

49h 56v
57v
42v

47v
41h 53h
63h
60h
36h 66h
33v 38v
32v 46h 50v
34v
48v 43h
4v 17h
20h 3v
1h 39v
37h 34h
14h 32h
27v

26h
2v 50h 28v
48h 5h
1v 45v 23h 21v
18h
5v 9v
24v 15h
44h 6v 7v

27h 8v
52v 51v
21h
29v
25h
30v 31v 22v
67h 58h
61h 10v 12v
11v
64h 13v
35h
40h

10h
61v
16h 19h

26
Cuadrı́cula 85

Dimensiones: 15x15
Densidad: 85.78%
Número de Palabras: 70
PLP: 5.51
Indicador de Complejidad: 760.20

1 2 3 4 5 6 7 8 9 10 11

12 13 14

15 16

17 18 19 20

21 22 23

24 25 26

27 28 29

30 31

32 33 34 35 36 37 38

39 40 41

42 43 44

45 46 47

48 49 50 51

52 53

54 55

27
Grafo de Restricciones: Cuadrı́cula 85

8v

20h
6h
14h
16h
9v
10v11v
6v 45h
7v
14v
42h 34v
23h
26h 29h 33v
39h 32v

32h
18h 22h

25h 48h
23v 26v 40v
29v 22v 52h 54h 49v
40h 25v 28v
30h 43v
43h

35h 19v 46v


13v 46h
41h
38v 27h
31v
36v
37v
44h

53h
50h 12v
47h
15h 1v
12h
2v
24h
55h 44v

47v 21h
51v
3v 17h
5v 4v
1h

28
Cuadrı́cula 86

Dimensiones: 15x15
Densidad: 83.11%
Número de Palabras: 78
PLP: 4.79
Indicador de Complejidad: 574.76

1 2 3 4 5 6 7 8 9 10 11 12 13

14 15 16

17 18 19

20 21 22

23 24 25 26

27 28 29 30 31

32 33 34 35 36 37

38 39 40 41 42 43

44 45 46 47 48

49 50 51 52

53 54 55 56 57

58 59 60 61 62

63 64 65 66 67

68 69 70

71 72 73

29
Grafo de Restricciones: Cuadrı́cula 86

66v 2v
67v
1v

65h 1h
70h 73h 32h 17h
14h

71h 38h
53h
53v 68h
48h 23h
55v 44h 23v
63h 43h 3v 18h
52v 24v 4v
54v
35v
59v 39v 6v
45v 31v
7v 15h
58h 8v
57h 37v 27h 22v 5v
34h 20h
49h 36v 5h
60v 50v 21v
61v
62v 30v 9v 25h
47v
51v
56h 29v 10v 12v
64h 28v 13v
72h 41v 46h 11v
33h 9h
69h 42v
40h 16h19h
26h

30
Cuadrı́cula 88

Dimensiones: 15x15
Densidad: 86.67%
Número de Palabras: 72
PLP: 5.42
Indicador de Complejidad: 733.53

1 2 3 4 5 6 7 8 9 10 11 12 13 14

15 16

17 18

19 20 21 22

23 24 25 26

27 28 29 30 31

32 33 34 35 36

37 38 39 40

41 42

43 44 45 46 47 48

49 50 51 52 53 54 55

56 57 58 59

60 61 62 63

64 65

66 67

31
Grafo de Restricciones: Cuadrı́cula 88

63v

67h 59h
65h62h

58v

52v 48v
53v 54v 47v 46v

57h 55h
51h
57v
45h

61v

34v 66h
40v 60h64h
44h
29h 26v
42h

33v 50v
32h
37v
30v 39v
38v
35v 37h 56h
25h 21v
49h 43h
28v
26h 41h

6v 24v

5v 8v 20h
13v 12v
14v
7v 27h
36h

15h 22h
23h
1h
1v 9h 31h
17h
3v 16h18h 11v
4v 2v 9v

19h 10v

32
Cuadrı́cula 89

Dimensiones: 15x15
Densidad: 81.33%
Número de Palabras: 82
PLP: 4.46
Indicador de Complejidad: 498.03

1 2 3 4 5 6 7 8 9 10 11 12 13

14 15 16

17 18 19

20 21 22 23 24

25 26 27 28

29 30 31 32 33 34

35 36 37 38 39

40 41 42 43

44 45 46 47

48 49 50

51 52 53 54 55 56

57 58 59 60 61 62 63

64 65 66 67 68

69 70 71

72 73 74

33
Grafo de Restricciones: Cuadrı́cula 89

1v

1h
14h
17h 3v
20h 2v

58v
4v 21v
57h 35h
57v 40h 25h

69h
35v
72h 36v
29h
65v
64h 37v
26v 10v
44h 30v
48h
38h 19h
45v
28v 13v
31v 10h
46h 32h
51h 16h
41h 12v
41v 39h
11v
23v 34v
39v 24h
53v
42v 27h 33v
52v 43h
59h 49h
73h
47h
70h

66h 60v 22h


54h 8v
67v 47v 9v
61v 50v

7v 15h
62h
18h
56v 74h 6v
68h 5h
55v 71h

5v

63v

34
Cuadrı́cula 90

Dimensiones: 15x15
Densidad: 84.89%
Número de Palabras: 70
PLP: 5.46
Indicador de Complejidad: 744.52

1 2 3 4 5 6 7 8 9 10 11 12 13 14

15 16

17 18

19 20 21

22 23 24 25 26

27 28 29

30 31 32 33 34 35 36

37 38 39

40 41 42

43 44 45

46 47 48 49 50 51

52 53 54 55 56

57 58 59 60

61 62

63 64

35
Grafo de Restricciones: Cuadrı́cula 90

27h
27v 22h

19h
30h 4v
40h 3v
2v 5v
37h
1v
63h
57h
61h 7v
1h
31v 17h
15h
46v 6v 8v
47v
48v
46h
44v
52h
23h
43h 9v

32v 53v 60v


59v
24v
25v

38h 64h 55v


29v 49h 62h
32h 58h 56v
41h
50v
20h 51v
28h
21v
54h
35v
34v
10v 11v
12v 13v 33h 51h
14v
26h 42h39h

45h
10h 16h 18h

36v

36
Cuadrı́cula 92

Dimensiones: 15x15
Densidad: 80.44%
Número de Palabras: 70
PLP: 4.41
Indicador de Complejidad: 487.20

1 2 3 4 5 6 7 8 9 10 11 12 13

14 15 16

17 18 19

20 21 22 23 24

25 26

27 28 29 30 31 32 33

34 35 36 37

38 39 40 41

42 43 44

45 46 47 48

49 50

51 52 53 54 55 56 57

58 59 60 61 62

63 64 65

66 67 68

37
Grafo de Restricciones: Cuadrı́cula 92

20h

3v
1v

2v

1h
14h 4v
27v
17h

63h 42h
53v 66h 34h 5v
38h
51v 58h
27h 25v
52v
29v
46v 28v 22v 25h
51h 21h
47v
49h
45h

6v
43v
35v 7v
60v
64h
59h 43h
67h 30v 15h
39h 35h 6h
18h
8v
54v
31v 9v
50v

30h
26h
24v
54h 23h
50h 48v 33v 10v
32v
12v
41v 48h
19h 11v
40h
40v 44h 10h 13v
36h 16h

65h
37v
62v 68h
61h

57v

55v
56v

55h

38
Cuadrı́cula 87

Dimensiones: 15x15
Densidad: 82.22%
Número de Palabras: 54
PLP: 6.85
Indicador de Complejidad: 1173.66

1 2 3 4 5 6 7 8 9 10 11

12 13 14

15 16

17 18

19 20

21 22

23 24

25

26 27 28 29 30 31 32 33 34

35 36 37

38 39 40

41 42

43 44

45 46

47 48

39
Grafo de Restricciones: Cuadrı́cula 87

11v
10v 40v

7h 18h 39h
16h 20h 42h 46h
14h
22h 44h 48h

8v 37h 34v
7v 9v 16v 32v 33v
14v
31v 30v

24v
23h
26h
25h

4v 3v
5v 29v 27v
2v 13v
6v 21h 26v28v

1h 19h15h 41h 45h


17h 12h 43h 38h
35h 47h

1v 35v
36v

40
ANEXO C
CRUCIGRAMAS

41

Вам также может понравиться