INTELIGENCIA EN REDES DE COMUNICACIONES

INTELIGENCIA EN REDES DE COMUNICACIONES Trabajos de la asignatura Curso 12-13 Departamento de Ingeniería Telemática Universidad Carlos III de Madrid ...
5 downloads 0 Views 8MB Size
INTELIGENCIA EN REDES DE COMUNICACIONES Trabajos de la asignatura Curso 12-13

Departamento de Ingeniería Telemática Universidad Carlos III de Madrid

INTELIGENCIA EN REDES DE COMUNICACIONES Trabajos de la asignatura Curso 12-13 Julio Villena Román Departamento de Ingeniería Telemática Universidad Carlos III de Madrid [email protected]

ÍNDICE 1.

Sudoku ...................................................................................... 1 Daniel de la Casa Riballo, M .ª del Rocío Casco Muga El juego del Sudoku se presenta como un problema de optimización que tiene una única solución. Se estudiarán sus orígenes y sus características, además de la aplicación de diversas técnicas de resolución de problemas y optimización. Palabras clave: Sudoku, Optimización, Resolución de Problemas, Java.

2.

Sistema Experto en Actividades de Ocio .................................. 10 Sherezade Fraile Paniagua Se ha diseñado un sistema basado en el conocimiento (SBC) en lenguaje CLIPS, que sugiera posibles planes de ocio según gustos. Básicamente se trata de un programa, que previo almacenamiento de un conjunto de actividades (en el programa como tal puede ya estar cargado), interactúa con el usuario para adquirir las características básicas de las actividades que le gustan. Tras ello, el programa realizará una búsqueda dentro del conjunto de actividades, para seleccionar aquellas que se ajustan a la información obtenida del usuario y mostrarla por pantalla.. Palabras clave: Sistemas expertos (SE), reglas, actividades de ocio, búsqueda.

-i-

3.

Project Glass: Realidad aumentada, reconocimiento de imágenes y reconocimiento de voz. .......................................... 18 Lucas García, Paloma Jimeno, Leticia Manso Después de la presentación del Project Glass de Google sobre sus gafas de realidad aumentada nos planteamos las tecnologías necesarias para el desarrollo de este dispositivo. Este es el objetivo del siguiente escrito, profundizar en las tecnologías de reconocimiento de voz y de imágenes y de su integración y utilización para un dispositivo de Realidad Aumentada. Tras una breve introducción a cerca de las gafas de Google, se explicarán conceptos sobre realidad aumentada relacionándolas con el proyecto, sobre reconocimiento de imágenes y voz. Por último se hará una mención sobre redes neuronales, base de las dos tecnologías de reconocimiento explicadas.. Palabras clave: Realidad aumentada, imagen virtual, GPS, marcadores, pantalla transparente, HDM, patrón, sensor, clasificador, OSR, biometría, RGB, entrenamiento, modelo oculto de Markov, aprendizaje inductivo, Redes Neuronales, Perceptrón Multicapa (MLP), Backpropagation.

4.

Diseño e implementación de jugador virtual de Mentiroso ...... 33 David Sandoval, Juan Antonio Fernández de Alba En este documento se detalla el diseño y la implementación de un jugador virtual del conocido juego de cartas “Mentiroso”. Se analizará en detalle las técnicas y algoritmos utilizados en dicho diseño para dotar de capacidad de aprendizaje y decisión al jugador virtual. Palabras clave: Partida, ronda, jugador virtual, jugador humano, levantar cartas, echar cartas, credibilidad, mentir, cartas verdaderas y cartas falsas.

5.

Juego Mancala con algoritmo Minimax realizado con interfaz gráfica en java .........................................................................42 Lucia Ruiz Ruiz, Artem Motsarenko, José Ángel León Calvo En este documento vamos a realizar un juego basado en Mancala usando como algoritmo Minimax con poda alfa-beta y dos niveles de búsqueda. Estará realizado con lenguaje de programación Java y una interfaz gráfica para que el usuario pueda jugar contra un usuario programado. Palabras clave: Mancala, Minimax, Java, GUI, poda alfa-beta, Juegos de mesa.

6.

Domótica ................................................................................ 50 Javier García Martín, Eva Mansilla López La Inteligencia artificial también comprende lo que se conoce como la Domótica la cual estudia la inteligencia de las casas. Sistemas que

- ii -

realicen que las luces del pasillo se activen al pasar sin pulsar ningún interruptor, encender la calefacción mediante una simple llamada de teléfono, generar alarmas por la entrada de intrusos cuando no estamos en casa, persianas a través de la televisión con un mando a distancia, desde cualquier teléfono y esto sin requerir mayor esfuerzo sino simplemente por una maquina quien es capaz de recibir órdenes y actuar sin protestar, ni quejas. Palabras clave: Domótica, sostenibilidad, vivienda energética, confort, seguridad, ahorro, aprendizaje. 7.

inteligente,

Técnicas para exploración de bases de datos ........................... 59 Daniel Aceituno Gómez, Miguel Alcolea Sánchez El objetivo del trabajo es conseguir las imágenes más parecidas a una dada dentro de una base de datos de 6600. Para ello se utilizarán dos técnicas de búsqueda, una de ellas basada en agrupamiento (k-medias) y otra según el criterio de mínima distancia (distancia Euclídea). La base de datos proporcionada está formada por siluetas de animales marinos. El código Matlab desarrollado debe ser capaz de encontrar los contornos más parecidos al de muestra, independientemente de la rotación, posicionamiento y escalado de éste. Palabras clave: Clustering, exploración de bases de datos.

8.

Matlab,

algoritmos

de

búsqueda,

Sistemas expertos: MAGERIT .................................................. 67 Adrián García Diéguez, Jesús García Jiménez En este documento vamos a explicar el significado de lo que es un Sistema Experto mediante el análisis de sus principales componentes y características. En concreto analizaremos el sistema experto MAGERIT basado en el análisis y gestión de riesgos de los sistemas de información de las administraciones públicas. Palabras clave: Sistemas expertos (SE), gestión del riesgo, seguridad, activos, dominio.

9.

Aplicaciones de la Minería de datos en las empresas ............... 77 Silvia Briones Herranz En este trabajo veremos la importancia de apoyarse en la minería de datos a la hora de la toma de decisiones en una empresa, basándose en el descubrimiento de información útil en las bases de datos para fundamentar mejor sus decisiones. Además analizaremos mediante dicha técnica un ejemplo ficticio de las ventas de consolas con el fin de encontrar las preferencias de los clientes y así conseguir hacer a las empresas más competitivas.

- iii -

Palabras clave: Minería de datos, base de datos, algoritmia, datos extraños. 10. Implementación de un agente autónomo en Super Mario ........85 Pablo González Fernández, Alberto Chicharro Sobrino En este documento se explica cómo se podría utilizar la teoría de resolución de problemas en un entorno controlado como es el mundo de Super Mario. La solución propuesta consta de un árbol de decisión, que en función de las variables de entrada que se le pasen por parámetro decidirá cuál es la mejor acción a llevar a cabo. Para la implementación de este agente inteligente se utilizan las librerías proporcionadas en [1]. Palabras clave: Mario Bros, agente inteligente, enemigos, escenario, algoritmo. 11.

Inteligencia artificial aplicada a personas con discapacidad ... 94 Alejandro E. Reyes Bascuñana, Javier Santofimia Ruiz En este documento se intentara dar un vistazo general a las distintas formas en las que la Inteligencia Artificial puede ayudar a la integración, facilidad de acceso a la información y en general a la mejora de la calidad de vida de personas que sufren una discapacidad física o psíquica.. Palabras clave: Deficiencia, discapacidad, minusvalía, ASIBOT, RAH, OCR, acceso, alternativo, aumentativo, movilidad, ambiental, virtual, BCI, P300.

- iv -

SUDOKU Daniel de la Casa Riballo

M .ª del Rocío Casco Muga

Estudiante Ing. Telecomunicación Universidad Carlos III de Madrid Avda. De la Universidad, 30 28911, Leganés (Madrid-España)

Estudiante Ing. Telecomunicación Universidad Carlos III de Madrid Avda. De la Universidad, 30 28911, Leganés (Madrid-España)

[email protected]

[email protected]

RESUMEN El objetivo del Sudoku en su versión clásica, y más popular, es rellenar una cuadrícula de 81 casillas, en 9 filas y 9 columnas, divididas en cajas de 3x3, con los números del 1 al 9. Al rellenar el Sudoku debemos conseguir que no se repita ningún número en las filas, columnas y tampoco en las cajas de 3x3. Un Sudoku estará bien planteado si su solución es única.

El juego del Sudoku se presenta como un problema de optimización que tiene una única solución. Se estudiarán sus orígenes y sus características, además de la aplicación de diversas técnicas de resolución de problemas y optimización.

Categorías y Descriptores de Temas

Sin embargo, también podemos encontrar otras versiones de Sudokus con diferentes restricciones, variantes respecto a la colocación de los bloques, e incluso utilizando conjuntos de elementos que no sean exclusivamente numéricos.

[Java] Lenguaje de programación.

Términos Generales Backtracking, Método Humano, Búsqueda Aleatoria, Exact Cover, Búsqueda Tabú, Algoritmos Genéticos.

Palabras Clave Sudoku, Optimización, Resolución de Problemas, Java.

1. INTRODUCCIÓN El Sudoku es un juego que consiste en un tablero de R x C casillas, donde R nota el número de filas y C el número de columnas. El tablero está dividido en un número k de bloques de tamaño r x c (con r = √𝑅 y c = √C ) en los que colocaremos r x c elementos diferentes.

Figura 2 : Sudoku 9x9 en blanco, con bloques de 9 casillas asimétricos. Hay que tener en cuenta que los Sudokus vienen con un conjunto de valores numéricos ya incluidos, denominados pistas. Las pistas no son colocadas en orden aleatorio. El número de pistas incluidas inicialmente en el Sudoku nos determinará su nivel de dificultad. Aunque la dificultad también está relacionada con el tiempo que toma encontrar la solución. Figura 1 : Sudoku 9x9 en blanco, remarcando las 9 casillas que forman un bloque.

-1-

El concepto de cuadrados latinos se conoce desde los tiempos medievales, aparecieron con manuscritos árabes del siglo XIII. Dicho cuadrado contiene celdas en el cual cada fila y cada columna tiene el mismo conjunto de símbolos, a diferencia del cuadrado mágico, en el cual no hay repetición.

1.1 Historia El juego del Sudoku tiene sus orígenes en civilizaciones antiguas como la china o la árabe. En estas civilizaciones existían unos juegos denominados “cuadrados mágicos” a los que se les atribuía propiedades especiales, siendo utilizados en los campos de la Astrología y el Esoterismo.

En 1776 Euler mostraba como construir cuadrados mágicos con un cierto número de celdas, en particular 9, 16, 25 y 36. Euler puso en una rejilla letras en latín y lo llamó cuadrado latino. Más tarde añadió letras griegas y de ahí que surgiera el cuadrado greco-latino.

El origen más antiguo de los cuadrados mágicos se encuentra en una leyenda china, datada del año 2200 a.C., la cual se denominaba “Lo Shu”. Dicho nombre significa “hoja de río”, y la leyenda cuenta que el emperador chino vio salir una gran tortuga del río Amarillo. La historia tenía que ver con un sacrificio al dios del río, ya que el rio se desbordaba e inundaba los campos sembrados, perjudicando la economía del país.

En sus últimos años Euler encontró el problema de combinar dos conjuntos de n símbolos de manera que en ninguna fila o columna se repitieran una pareja de símbolos. Otro ejemplo en el cual se muestra un cuadrado mágico de orden 4 es en la fachada de la Pasión del Templo Expiatorio de la Sagrada Familia en Barcelona, diseñada por el escultor Josep María Subirachs. La constante mágica del cuadrado es 33, la edad de Jesucristo en la Pasión. Estructuralmente dos de los números del cuadrado (el 12 y el 16) están disminuidos en dos unidades (10 y 14) con lo que aparecen repeticiones. Esto permite rebajar la constante mágica en 1.

Figura 3: Representación del caparazón de la tortuga y la equivalencia de cada uno de los números que forman el cuadrado mágico. La tortuga en su caparazón tenía pintados en forma de cuadrado los números del 1 al 9. Lo sorprendente era que el resultado de la suma tanto en horizontal como en vertical era siempre el mismo. En ese momento el emperador le dio una interpretación mística y sagrada a la tortuga, la consideraba como un presagio para su país, ya que simbolizaba la longevidad y la protección. Debido a este presagio el emperador empezó a levantar palacios con una distribución en cuadrícula semejante a la encontrada en el caparazón de la tortuga sagrada. La suma de los números coincidía con el número de días que tiene cada uno de los 24 ciclos lunares del año chino. La idea del cuadrado mágico fue transmitida a los árabes por los chinos. En la Enciclopedia del año 990 realizada por un grupo de eruditos árabes muestra una lista de cuadrados de todos los órdenes desde 3 a 9. En 1225 Ahmed al-Buni mostró como construir cuadrados mágicos mediante una técnica de bordeado.

Figura 4: Cuadrado mágico en la fachada de la Sagrada Familia en Barcelona. El Sudoku es en realidad un caso especial de los cuadrados latinos. El Sudoku impone la restricción adicional de que los subgrupos de 3*3 deben contener también los dígitos del 1 al 9. Este tipo de rompecabezas se publicó por primera vez a finales de las décadas de los 70 en la revista “Math Puzzles and Logic Problems” de Dell Magazines. El nombre que dio Dell a este rompecabezas fue “Number Place”. Dell tomó el concepto de Euler de cuadrado latino y lo aplicó a una rejilla de 9*9 con la adición de 9 cajas, cada una de ellas contiene los números del 1 al 9.

La primera aparición del cuadrado mágico en la literatura islámica se da en el Jabirean Corpus. Este libro recomendaba los cuadrados mágicos como hechizos para facilitar el nacimiento de los niños. Dichos cuadrados consistían en 9 celdas con los números del 1 al 9 ordenados con 5 en el centro de forma que el contenido de cada fila, columna y las dos diagonales sumaran 15. Los cuadrados mágicos pudieron ser introducidos en Europa a través de España durante el siglo XII.

-2-

en el teletexto del Canal 4. La BBC Radio comenzó a leer los números en voz alta en la primera versión radiofónica del Sudoku.

En 1984, Nikoli, la compañía líder en creación de puzles de Japón descubrió el “Number place” y decidió mostrarlo a los fans japoneses de los rompecabezas. En 1986, después de añadir varias mejoras, sobretodo creando patrones simétricos y reduciendo el número de pistas dadas, el Sudoku se convirtió en uno de los rompecabezas más vendidos en Japón.

La revista “Teachers”, financiada por el gobierno, recomienda el Sudoku como un ejercicio mental en las clases y se ha insinuado que la resolución de Sudokus puede ayudar a frenar la progresión de enfermedades como el Alzheimer.

Cuando se dieron cuenta de que uno de los principales problemas era el nombre tan largo que tenía inicialmente Suuji Wa Dokushin Ni Kagiru (los números deben existir sólo una vez), el presidente de Nikoli, lo abrevió a Sudoku (Su = número; Doku = único, soltero).

El sudoku completó el círculo volviendo a Manhattan como un elemento habitual del New York Post. La moda del Sudoku a otras partes de EEUU cuando tanto el “The Daily News” como el “USA today” lanzaron Sudokus el mismo día.

Dos años después, los japoneses introducen dos innovaciones que lleva el juego a una mayor popularidad en el país del Sol Naciente, el número de las cifras no puede pasar de 30 y las cuadrículas se hacen simétricas, es decir, que las cifras están distribuidas de forma rotatoria y simétrica en las casillas, lo que concede al conjunto un aspecto más estético.

Hoy en día hay clubes de Sudoku, chats, libros de estrategia, vídeos, juegos para móviles, juegos de cartas, competiciones e incluso un programa de televisión. El Sudoku ha aparecido en los periódicos de todo el mundo y se le describe en los medios de todo el mundo como “el cubo Rubik” del siglo XXI y como el “rompecabezas” que más rápido ha crecido del mundo.

En 1997 Wayne Gould, juez neozelandés, durante una visita a Hong Kong lo descubrió y preparó algunos Sudokus para el diario británico “The Times”.

2. RESOLUCIÓN DEL SUDOKU MEDIANTE ALGORITMOS El Sudoku tiene asociado dos problemas básicos: la generación de tableros válidos y la búsqueda de una solución que lo solucione. Respecto a la generación de un tablero válido, se dice que existen dos alternativas, una de las cuales es mantener almacenados en una base de datos un conjunto de tableros que se conocen de antemano como válidos y realizar una carga aleatoria de los mismos. La segunda forma es desarrollar un algoritmo capaz de generar los tableros por sí mismos. Pero en esta sección nos vamos a centrar a la búsqueda de una solución, dicha solución está demostrado que se trata de un problema NP-completo, con lo cual no se ha descubierto hasta hoy un algoritmo que le de solución en un tiempo polinomial. Sin embargo, el Sudoku se ha convertido en uno de los problemas principales de estudio de los programadores, los cuales siguen desarrollando formas de resolución cada vez más eficientes. A continuación explicaremos los más conocidos.

Figura 5: Muestra de la fiebre del Sudoku que se vivió a partir del año 2005.

2.1 Técnica Backtracking El algoritmo implementado con esta técnica se denomina en realidad “Branch -&- Bound” o ramificación y poda, es uno de los más elogiados por los programadores debido a la velocidad con la que encuentra la respuesta. Sin embargo, para los investigadores se trata del menos útil a causa de su ineficiencia.

Gould que creó un programa de ordenador que generaba Sudokus de diferentes niveles de dificultad, no pedía dinero por los rompecabezas. El Times decidió darle una oportunidad y publicó en 2004 su primer Sudoku. La publicación de un Sudoku en el “London Times” fue solo el principio de un enorme fenómeno que rápidamente se extendió por toda Gran Bretaña y países como Australia y Nueva Zelanda. Tres días después, el “Daily Mail” empezó a publicar Sudokus. El Daily Telegraph de Sydney los siguió en 2005.

Dicha técnica se basa en un algoritmo de búsqueda en el cual se explora un árbol de soluciones en anchura o profundidad. Una de las alternativas de esta técnica es la de emplearlo en su forma más primitiva, que es la de un algoritmo de fuerza bruta. En este caso el algoritmo se encargará de probar en cada casilla, y a partir de una casilla inicial, cada uno de los valores disponibles, analizando inmediatamente la validez de la decisión tomada. Si la

A finales de 2005 el rompecabezas se publicaba de forma regular en varios periódicos. Además el Sudoku fue incluido diariamente

-3-

solución parcial no satisface las condiciones de la Regla Única, el algoritmo retrocederá (backtrack) al nivel de búsqueda anterior y generará otro tablero, con el siguiente valor disponible ubicado en la posición última de análisis. Este proceso se repetirá hasta concretar el análisis de la última casilla, con lo cual el costo computacional será de 𝑛(𝑅×𝐶)−𝑝 , con “n” igual al número de valores posibles, “R” el número de filas, “C” el número de columnas y “p” el número de casillas con pista. A este costo se debe agregar, también, el de cada consulta de validez con lo cual el número es extremamente grande.

Si tenemos en cuenta que el conjunto de colores será el de los valores que se utilizan para completar el Sudoku, el quid de esta relación radica en hallar una forma para representar el tablero Sudoku con un grafo tal que cumpla las condiciones del problema de coloreo. Sea “V” el conjunto de vértices de nuestro grafo. Si consideramos 𝑉 = {(𝑖, 𝑗), 0 ≤ 𝑗, 𝑖 ≤ 9} (es decir, tomamos cada casilla del tablero como un vértice del grafo), podemos construir “E” (el conjunto de aristas o arcos) de acuerdo al siguiente criterio: “dos vértices u y v están unidos por un arco no dirigido (u,v) sí y solo sí u y v comparten la misma fila, columna o bloque”. En la siguiente figura se observa, para el Sudoku del ejemplo anterior, cómo queda conformado el subgrafo de vértices adyacentes para la casilla siguiendo el criterio enunciado.

Para determinados tableros, entonces, el algoritmo tardará mucho tiempo, aún con el hardware actual. La ventaja, sin embargo, radica en que el algoritmo devolverá, tarde o temprano, la solución esperada. En la siguiente figura mostramos el espacio de soluciones para un pequeño Sudoku de ejemplo de 22 × 22 casillas, con 𝑁 = {1,2,3,4} .

Figura 7: Subgrafo creado a partir de las casillas relacionadas con la (1,1). Se omitieron los vínculos entre todos los demás vértices por cuestiones de prolijidad. Luego, dicho algoritmo debe solo recorrer el grafo obtenido coloreando de forma válida cada uno de los vértices, a partir del conjunto “N” de colores o de cifras del sudoku. En nuestro caso no tendremos que encontrar el conjunto mínimo de colores, sino buscar un coloreo válido para el grafo. Como todo tablero Sudoku debe admitir una y sólo una posible solución, queda asegurado que si el tablero es válido, el algoritmo devolverá un resultado satisfactorio en un tiempo exponencial, cuya expresión es una función de la cantidad de vértices que restan por colorear (cantidad de casillas vacías) y de la cantidad de colores disponibles (cantidad de valores con los que puede completarse una casilla).

Figura 6: Espacio de soluciones (acotado) para un tablero sudoku de 4 x 4 de ejemplo. Obsérvese que el algoritmo de backtracking no expande los nodos que no son válidos, y corta la búsqueda al encontrar la solución.

2.2 Método Humano

Otro de los algoritmos basados en backtracking consiste en relacionar la búsqueda de una solución a un tablero Sudoku con el cásico problema de coloreo de grafos. Un grafo G = 〈V, E〉 es una estructura formada por un conjunto de vértices “V” y un conjunto de aristas o arcos “E” que los unen. El problema de coloreo de grafos es un problema NP, y consiste en hallar la cantidad mínima de colores necesarios para colorear cada vértice del grafo, teniendo en cuenta que dos vértices adyacentes (unidos entre sí por un arco) no pueden ser coloreados de la misma forma.

Este método de resolución es muy interesante para utilizarse algorítmicamente, ya que permite deducir cómo el usuario podría resolver un Sudoku por su cuenta. En la revista “NAW” se publicaron siete reglas básicas para el desarrollo del análisis humano. Entre ellas, una de las más simples y utilizadas “baby steps” que dice que cuando se conocen ocho cifras de una misma fila, columna o bloque, el dígito restante es el que ocupa la última casilla libre. Otra de las reglas es “singles” la

-4-

La relación entre la resolución de Sudokus y el problema de “Exact Cover” se basa en definiciones de conjuntos y en términos matemáticos.

cual expresa que cuando hay un solo lugar por elementos dado en una columna, fila o bloque, o cuando hay solo un dígito que puede ir en un bloque dado, escribirlo allí. Por último otra de las reglas es “pair markup” que dice que si en una casilla pueden ir dos o más valores posibles, escribirlos como subíndices de tal forma que puedan realizarse los análisis correspondientes en el resto del Sudoku, si se produce una contradicción al considerar uno de los dígitos, entonces se detendrá el análisis de ese y probar con alguno de los restantes.

2.5 Búsqueda Tabú La Búsqueda Tabú es una técnica de optimización combinatoria que utiliza conceptos de memoria adaptativa y exploración sensible. La exploración sensible de Búsqueda Tabú se basa en la idea de que una mala decisión tomada por una estrategia produce más información que una buena selección realizada de forma aleatoria. Implementa una estrategia de búsqueda local para explorar de forma eficiente el espacio entorno una configuración. Cada solución tiene asociado un conjunto de vecinos. Con esta estructura se permite pasar a la mejor opción vecina, o si ya estamos en la mejor vamos a la menos peor, donde se aplica de nuevo búsqueda local sobre la nueva vecindad en busca del óptimo. En cada paso deben analizarse todos los vecinos (al menos un conjunto grande de ellos), por lo que es un método de alto coste computacional.

Esta demostrado que siguiendo estos tres pasos más los otros cuatro de una complejidad mayor puede encontrarse la solución a cualquier Sudoku. La dificultad que presenta este algoritmo es que su complejidad temporal es muy difícil de calcular con exactitud, puesto que los pasos deben ejecutarse en un orden lineal y, cuando se utiliza el método de nivel inferior, deben repetirse todos los anteriores. Por este motivo la solución de algunos tableros se alcanza en tiempos mínimos, mientras que para otros el análisis puede ser mucho más largo. Por último podemos afirmar que la eficiencia del algoritmo dependerá de la estrategia utilizada para la codificación de los pasos. Este método se utiliza para calcular la dificultad de los Sudokus que se publican en libros y revistas para su resolución a mano.

La configuración inicial se genera rellenando cada columna con los números faltantes, de forma que no se repitan los números en ninguna columna. Esta configuración inicial no cumplirá normalmente con la condición de las filas y de los subcuadros.

2.3 Búsqueda Aleatoria La búsqueda aleatoria es otro de los métodos que pueden seguirse para encontrar el resultado de un Sudoku. La estrategia consiste en primero, comenzar aleatoriamente colocando números en las casillas vacías del tablero, y calcular luego el número de errores cometidos. Después de esto se intercambian los números insertados a lo largo del tablero hasta que la cantidad de errores se reduzca a cero. Cuando se llegue a esto, se habrá llegado a la solución.

El vecindario para una configuración se define según las siguientes estrategias: 1) 2) 3)

La ventaja de este método, es que el tablero no tiene que ser “soluble lógicamente” para que el algoritmo pueda resolverse. Es decir, que los tableros con los que se prueba el algoritmo no deben ser especialmente construidos de tal forma que se provean suficientes pistas al usuario como para completarlo usando lógica encadenada solamente. Dicho método es el menos usado, debido a que trata de una búsqueda nada sistemática y con bastante azar.

4) 5)

Cambiar un número repetido en una columna por un número que no esté en esa columna. Cambiar un número repetido en una fila por un número que no se encuentre en esa fila. Cambiar un número repetido en un subcuadrado por otro que no aparezca en ese subcuadro. Intercambiar en una misma columna los números de dos celdas. Intercambiar en una misma fila los números de dos celdas.

En lugar de evaluar la función objetivo recorriendo el cuadro completamente para analizar el número de repeticiones por filas, columnas o subcuadros, se realiza una estimación de la variación de la función objetivo para un vecino partiendo de la función objetivo de la configuración actual, ahorrando en tiempo computacional. La estimación de la función objetivo se realiza de acuerdo al tipo de variación hecha para llegar a la configuración vecina.

2.4 Exact Cover El Sudoku puede describirse en términos de un caso particular del problema de “Exact Cover”, o recubrimiento exacto. Este método es un problema NP completo que consiste en, dado un universo de elementos y una colección de subconjunto, hallar una subcolección tal que cada elemento esté exactamente en un conjunto.

2.6 Algoritmos Genéticos

Por tratarse de un problema que no se resuelve en un tiempo polinomial, pueden plantearse soluciones por aproximación o definirse un algoritmo de backtracking que le de respuesta. Como alternativa a estas dos opciones el Dr. Donald Knuth publicó un algoritmo que recibe el nombre de “Dancing Links” que resuelve el problema de “Exact Cover”, obviamente en un tiempo exponencial.

Los algoritmos genéticos son una técnica de búsqueda a través del espacio de soluciones del problema (configuraciones). Inicialmente fue idealizado usando los mecanismos de la evolución de la genética natural. Este algoritmo inicia con la selección de una población inicial. Después, realiza un proceso de selección entre las configuraciones para permitirles participar en la generación de nuevos

-5-

descendientes, para después formar parejas para ser sometidas a un proceso de recombinación. Finalmente se realiza un proceso de mutación que altera los elementos de algunas configuraciones. Este proceso tiene como finalidad generar diversidad en la población y está controlado por un parámetro llamado tasa de mutación que determina cuantos cambios se realizarán sobre la población. Tras finalizar este proceso obtenemos los elementos de la nueva generación.

4)

El buen desempeño del algoritmo depende de la selección adecuada de los parámetros de control (tamaño de la población inicial, tasa de recombinación y de mutación) y la forma en la que se realiza la selección, recombinación y mutación. El algoritmo aplicado a l Sudoku consta de las siguientes etapas:

5)

1) Codificación del problema: Cada configuración del problema es una matriz con números entre el 1 y 9. En nuestra representación, cada individuo o cromosoma se representa con un array de 9 genes de 9 elementos cada uno. Cada gen es una fila del tablero.

6)

Proceso de selección: Es proporcional y realizado mediante el método de la ruleta. Para ello se utiliza una función de adaptación que garantiza selectividad y transforma el valor de función objetivo original de minimización a maximización. ���0 ) ∙ 𝑘 − 𝐹0𝑖 𝐹𝑎𝑖 = max(𝐹 Donde: 𝐹𝑎𝑖 : Función de adaptación del individuo i-ésimo. ��� 𝐹0 : Vector función objetivo de los individuos. 𝑘: Tasa de adaptación (k>1).

Proceso de recombinación: Se realiza de tal manera que se conservan las mejores características de las soluciones anteriores. Como el proceso de la población se mantiene constante, cada pareja de padres tendrá dos hijos: el primero tendrá los mejores subcuadros de los dos progenitores (aquellos que tienen menos repeticiones) y el segundo tendrá las mejores filas o columnas de los dos, seleccionando aleatoriamente con la misma probabilidad de ocurrencia. Proceso de mutación: Se realiza para generar diversidad. La solución es única y debe explorarse adecuadamente el espacio de soluciones. Se pueden realizar cuatro tipos de mutaciones: intercambio de dos elementos en una fila, intercambio de dos elementos en una columna, intercambio de dos elementos en un subcuadro y reemplazo de un número de individuo por otro número generado de forma aleatoria entre 1 y 9.

Figura 8: Codificación del problema 2) Población inicial: Las posiciones fijas del tablero se mantienen como están, pero las posiciones vacías se representan como 0. Se genera de forma aleatoria para cada celda en blanco del problema un número entre 1 y 9 sin generar elementos repetidos dentro de una fila (gen). El proceso se repetirá para cada configuración de la población. 3) Cálculo de la función objetivo: Debe reflejar la cantidad de números que se repiten por fila, columna y subcuadro. Esto se realiza de forma más eficiente determinando qué números faltan en cada fila columna o subcuadro.

Figura 10: Ejemplo de mutaciones Además, para no perder el rastro de búsqueda, si en la población nueva no hay un individuo mejor o igual a la incumbente, se reemplaza el peor individuo de la población por la mejor solución encontrada. En caso de no encontrar solución, el proceso para cuando un número predefinido de iteraciones se alcanza.

3. ALGORITMO DE BACKTRACKING PARA EL SUDOKU EN JAVA Con el algoritmo backtracking implementamos una técnica de resolución de problemas mediante una búsqueda sistemática de soluciones. Figura 9: Números que faltan en cada fila, cada columna y cada subcuadro.

-6-

Para optimizar el backtracking se descompone cada tarea en tareas parciales y se prueba de manera sistemática cada una de estas subtareas.

if(esPosibleInsertar(tablero,i,j,k)){ tablero[i][j]=k;

Cuando al elegir una tarea comprobamos que no lleva a una solución, volvemos hacia atrás y probamos con una nueva.

boolean b=resolver(tablero); if(b){

El siguiente fragmento de código Java comprueba utilizando backtracking si a través de una serie de pistas podemos obtener una solución de un Sudoku, o si no existe solución para esas pistas.

return true; } tablero[i][j]=0; } } return false;

public class Sudoku {

} } System.out.println("Encontrada solución:"); imprimir(tablero); return true;

public static final int DIMENSION =9; public static void main(String[] args){ int[][] tablero= new int[][] { {0,7,0, 0,0,0, 0,8,0}, {0,5,0, 6,0,0, 0,0,1}, {0,0,3, 1,4,0, 0,0,0}, {9,0,6, 0,5,0, 3,0,0}, {0,0,0, 0,0,0, 0,0,0}, {0,0,5, 0,2,0, 1,0,7}, {0,0,0, 0,6,5, 7,0,0}, {3,0,0, 0,0,1, 9,2,0}, {0,4,0, 0,0,0, 0,1,0}, }; imprimir(tablero); if(!resolver(tablero)){ System.out.println("El Sudoku no tiene solución"); } }

} public static boolean esPosibleInsertar(int [][] tablero, int i, int j, int valor){ //Comprueba columna for(int a=0; a