Professional Documents
Culture Documents
CUAUHTÉMOC
INTELIGENCIA ARTIFICIAL I
EJERCICIO PRÁ CTICO
*
Introducción.....................................................................................................................................................1
1 El juego del Sudoku..................................................................................................................................2
1.1 Características del juego...........................................................................................................................2
.................... 2 Características del Sudoku como un problema a resolver mediante técnicas de búsqueda y
satisfacción
de restricciones........................................................................................................................................3
2.1 Representación estándar del tablero.........................................................................................................3
2.2 Planteamiento como un problema de propagación de restricciones.........................................................4
2.3 Planteamiento como un problema de búsqueda sin información.............................................................5
2.4 Planteamiento como un problema de búsqueda heurística.......................................................................5
2.5 Utilización de otras técnicas de búsqueda y heurísticas...........................................................................6
3 Trabajo a realizar.............................................................................................................................................6
3.1 Requisitos del programa...........................................................................................................................6
3.2 Requisitos de la documentación...............................................................................................................7
3.3 Entrega del material de la práctica............................................................................................................7
4 Evaluación.......................................................................................................................................................7
5 Más información..............................................................................................................................................8
Introducción
Esta práctica consistirá en la implementación de un programa que utilice de forma conjunta algunas de las técnicas
de búsqueda y satisfacción de restricciones, explicadas en teoría, poniéndolas en práctica para la resolución de
Sudokus-X (una variante del Sudoku que se explicará más abajo). La evaluación de los programas entregados por
los alumnos se basará en una competición cuyas reglas se explican más adelante. Por esta razón, este guión debe
interpretarse como una serie de consideraciones básicas para resolver Sudokus (válidas también para Sudokus-X) y
se anima a los alumnos a tratar de mejorar las técnicas descritas a continuación para obtener una buena clasificación
en la competición (la nota de la práctica dependerá de la posición obtenida en la clasificación).
Entrega de la práctica
Fecha
Modo Presencial.
Las reglas de este juego son muy simples: hay que ir ocupando las casillas vacías con los dígitos del 1 a 9, de modo
que ninguno aparezca repetido en una misma fila, en una misma columna ni en un mismo recuadro.
Estas son las reglas del “Sudoku Clásico”. En esta práctica se considerará una variante del Sudoku, denominado
Sudoku-X. Esta variante consiste en añadir la restricción adicional de que los dígitos de las diagonales
principales también deben ser distintos.
En general, la solución de un Sudoku-X es única, pero pueden existir Sudokus-X con más de una solución; en
cualquier caso, el programa entregado se considerará válido si encuentra una de las posibles soluciones a un
Sudoku-X (en caso de que tenga varias).
Es importante tener en cuenta que ninguna regla aritmética ayudará a resolverlo: las celdas o casillas podrían estar
ocupadas por nueve símbolos cualesquiera (no numéricos). No se trata, por tanto, de un juego aritmético, sino
combinatorio, y para resolverlo basta y sobra con aplicar "reglas lógicas" sistemáticamente y, para un humano, una
gran tenacidad.
Hay escritos varios programas que tratan de seguir de cerca los métodos que utilizamos los humanos. Estos
programas que siguen razonamientos humanos son útiles para graduar la dificultad de las plantillas propuestas y,
La eficiencia puede mejorarse utilizando técnicas de satisfacción y propagación de restricciones de manera que, cada
vez que se coloque una cifra, el programa actualizará una tabla de posibilidades restantes para cada casilla vacía y
no considerará nuevas cifras que no aparezcan en las posibilidades. A continuación se describirá, en primer lugar,
cómo plantear la resolución de un Sudoku como un problema de satisfacción de restricciones simple y, en segundo
lugar, cómo emplear técnicas de búsqueda heurística para mejorar aun más el rendimiento del algoritmo.
Hay una notación estándar para Sudoku que denomina las filas con letras (A..I) y las columnas con números
(1..9). Cada celda o casilla estará representada entonces por una combinación de letra y número (A1, por
ejemplo), además, es usual denominar unidad a una columna, fila o recuadro y pares de una celda al resto de
celdas que la "acompañan" en una unidad.
Por ejemplo, {A1, A2, A3, B1, B2, B3, C1, C2, C3} forman un recuadro (que es una unidad) y, {B1, C1, D1, E1,
F1, G1, H1, I1} son los pares de A1 en la columna 1.
El objetivo en este caso consiste en obtener un sudoku donde cada celda de la matriz tenga un único dígito. Para
ello podemos considerar dos procedimientos básicos:
· Cada vez que se detecte una celda Xi con un sólo dígito, d, debe eliminarse d como posibilidad para
todos los valores de los pares de la celda (e.d. los "compañeros" de la celda en una columna, fila o
recuadro). Si durante la eliminación de d en los pares de Xi nos encontramos una nueva celda Yj con un
único valor, d2, habrá que eliminar éste para los pares de Yj más los pares que quedan por comprobar de
Xj, y así sucesivamente. Este es un proceso recursivo básico de propagación de restricciones : establecer
una restricción en una celda puede ocasionar el estableciento de restricciones adicionales en otras celdas
relacionadas.
· Existe otra restricción que es conveniente considerar, a parte de la eliminación de valores en pares. Esta
consiste en la asignación de un único valor a una celda. Pongamos por caso que, durante el proceso de
eliminación, se detecta que se ha eliminado el valor 6 de la celda A1 y que, además, se están explorando los
pares de A1 en la columna número 1. Imaginemos que de todos los pares de A1 en ésta columna, sólo C1
tiene como posible valor 6: entonces podemos asignar 6 como único valor de C1 y continuar con la
propagación de restricciones.
· Estos procedimientos deberán comprobar además que no se producen errores por tratar de asignar un valor
que no es consistente con las regas del Sudoku o por tratar de eliminar un valor de una celda que ya tenga
un único valor asignado.
Finalmente, siguiendo estas recomendaciones podremos implementar un proceso muy simple, no retroactivo,
de propagación de restricciones para solucionar un buen conjunto de Sudokus "fáciles" (pero, ojo, no cualquier
Sudoku). En resumen, el proceso "dispararía" la propagación de restricciones arriba descrita sólo para las
celdas de la plantilla inicial que tengan asignado un único valor. En la URL
http://mathschallenge.net/project/sudoku.txt pueden encontrarse sudokus clásicos de este nivel para comprobarlo.
En la URL http://www.sudocue.net/sudoku-x-12-7193.sdm pueden encontrarse Sudokus-X (sin clasificar) para
validar estas técnicas adaptadas a Sudokus-X.
Hay que tener en cuenta que este proceso basado en simple propagación de restricciones sin búsqueda es
rápido pero no es completo, es decir, existen sudokus que tienen solución y que no pueden ser resueltos sólo
mediante la combinación de los procesos de asignación y eliminación arriba descritos. Podemos encontrar otras
técnicas para satisfacer y propagar restricciones que complementan y mejoran las descritas, pero que no pueden
garantizar la completitud, aunque sí resolver una gran cantidad de Sudokus (estas estrategias pueden
consultarse en http://www.krazydad.com/blog/2005/09/29/an-index-of-sudoku- strategies/).
No obstante hay técnicas que si garantizan la completitud de un algoritmo para la solución de cualquier sudoku y
que incorporan técnicas de búsqueda, permitiendo construir programas para resolver Sudokus más eficientes.
Este algoritmo puede implementarse como una estrategia retroactiva o bien como una búsqueda primero en
profundidad en la que se mantenga un grafo de búsqueda con ramas de búsqueda independientes, (es decir, un
espacio de búsqueda en el que el nodo inicial será la plantilla inicial del sudoku y el resto de nodos se generan
por cada uno de los posibles valores de la celda escogida).
Una correcta implementación de este algoritmo resolverá cualquier sudoku porque, en el peor de los casos,
realizará una exploración exhaustiva de todas las posibilidades para cada una de las celdas del sudoku.
Finalmente, siguiendo estas recomendaciones podremos implementar un proceso de búsqueda informado que,
junto a la propagación de restricciones, podrá solucionar un buen conjunto de Sudokus "difíciles".
En la URL http://magictour.free.fr/top95 pueden encontrarse sudokus clásicos de este nivel para comprobar las
técnicas implementadas (
3 Trabajo a realizar
La práctica consistirá en la implementación de un programa que utilice a la vez técnicas de búsqueda heurística y
satisfacción de restricciones para resolver un Sudoku. Habrá que entregar también una documentación de la
práctica, como se indica a continuación.
IMPORTANTE:
Tanto el trabajo a realizar como el material a entregar para la evaluación de la práctica tienen que respetar
escrupulosamente las instrucciones que siguen a continuación, en caso contrario no se calificará la práctica.
Cada carácter de la cadena de entrada o salida que representa un Sudoku podrá ser:
· Un dígito del 1 al 9, para representar que una celda tiene ya asignado un dígito en la plantilla inicial
· Un punto '.', o un cero '0', o un guión, '-', para representar una celda vacía
· Los caracteres "blanco", "fin de línea" u otros especiales son ignorados.
Por ejemplo, el Sudoku ilustrado en la primera sección de este guión se corresponderá con la siguiente cadena:
97.3.4.65.2.25.6.8............58.29....2.4.3....87.51............6.2.8.3.84.1.9.27
La siguiente cadena también debe considerarse válida para representar la misma plantilla inicial de Sudoku:
970304065
020506080
000000000
005802900
002040300
008705100
000000000
060208030
840109027
La utilización de varios posibles caracteres para representar celdas en blanco se debe a que no hay un estándar
aceptado ampliamente para representar Sudokus mediante cadenas de caracteres; de hecho, en la URL
http://mathschallenge.net/project/sudoku.txt (Sudokus Clásicos fáciles) se utiliza el '0' para la casilla vacía y en
http://magictour.free.fr/top95 (Sudokus Clásicos difíciles), se utiliza el '.' .
La práctica se entregará como un programa comprimido (formato zip) con el siguiente contenido:
· El programa fuente, denominado obligatoriamente "sudoku".
· Un archivo con la documentación de la práctica.
El nombre del fichero .zip se corresponderá con la plantilla
<Apellido1>_<Apellido2>_<Nombre>.zip
y se entregará en un CD al catedrático .
4 Evaluación
El proceso de evaluación se basará en un sistema de competición con las siguientes reglas:
· El programa entregado será ejecutado para comprobar su funcionamiento con varios sudokus-X.
· La calificación final de la práctica dependerá de la posición en una clasificación de los programas entregados que
se construirá atendiendo al tiempo invertido por cada programa en resolver 80 sudokus-X. El tiempo se calculará
sumando los tiempos individuales en resolver cada sudoku, ejecutando el programa 80 veces recibiendo como
entrada en cada iteración una cadena conteniendo un sudoku-X distinto. Las prácticas que resuelvan 80
sudokus-X en menos de 2 minutos, tendrán una calificación entre 7 y 9, atendiendo a la posición que tengan en
la clasificación.
· Si durante la comprobación se sobrepasaran los 2 minutos de tiempo, se considerará entonces la cantidad de
sudokus resueltos en ese tiempo para decidir la calificación entre 5 y 7.
· Si no se resuelve ningún sudoku la práctica se considerará suspensa.
· La calificación de 10 se reservará a las prácticas excepcionales, debidamente documentadas.
5 Más información
http://es.wikipedia.org/wiki/Sudoku Definición de Sudoku en Wikipedia
http://www.microsiervos.com/archivo/puzzles-y-rubik/resolver-sudokus-1.html Un blog (en castellano) sobre consejos
acerca de cómo resolver Sudokus a mano
http://platea.pntic.mec.es/~ablanco/gi/tecnicasudoku.htm Una recopilación, obtenida del blog anterior, de técnicas y
estrategias para resolver Sudokus de cualquier nivel de dificultad.
Los siguientes enlaces pueden ser fuentes interesantes para introducir nuevas estrategias para acelerar la
propagación de restricciones o definir heurísticas que aceleren el proceso de búsqueda:
· http://www.scanraid.com/Sudoku.htm Un resolutor (en inglés) de Sudokus interactivo, muy ilustrativo sobre las
distintas estrategias para la resolución de Sudokus.
· http://www.sadmansoftware.com/sudoku/techniques.htm Un índice (en inglés) de estrategias para Sudokus
Repositorios de Sudokus:
http://mathschallenge.net/project/sudoku.txt Sudokus clásicos de nivel fácil
· http://magictour.free.fr/top95 Sudokus clásicos de nivel difícil
· http://www.sudocue.net/sudoku-x-12-7193.sdm Sudokus-X sin clasificar.