Sudoku-Solucionario Gaaa PDF
Sudoku-Solucionario Gaaa PDF
Sudoku-Solucionario Gaaa PDF
Diseño e implementación de un
procesador específico para la resolución
de Sudokus
Resumen ….…………………………………………………………………………. 5
1. Introducción …………………………………………………………………….. 6
1.1. Qué es un Sudoku ………………………………………………………. 6
………………………………………………………………………….
1.2. Qué es una FPGA 7
………………………………………………………………………….
1.3. Especificaciones del FPT ’09 7
………………………………………………………………………….
2. Versión inicial: Procesador basado en la técnica de ramificación y poda 8
………………………………………………………………………….
2.1.Motivación 8
………………………………………………………………………….
2.2.Diseño del procesador 9
………………………………………………………………………….
2.3.Detalles de implementación 10
2.3.1. Requisitos de memoria………………………………………… 10
2.3.2. Implementación de la memoria ………………………………. 10
………………………………………………………………………….
2.3.3. Implementación del evaluador de la función de poda 12
………………………………………………………………………….
2.4.Depuración 13
………………………………………………………………………….
2.4.1. Resultados de la fase de depuración 13
………………………………………………………………………….
2.5.Resultados 15
……………………………………………………………………
3. Versión final: Procesador basado en la técnica de ramificación y poda con
funciones heurísticas para acotar el espacio de búsqueda ……………………….. 17
………………………………………………………………………….
3.1.Motivación 17
………………………………………………………………………….
3.2.Descripción de las heurísticas 17
………………………………………………………………………….
3.3.Elección del conjunto de heurísticas a implementar 19
………………………………………………………………………….
3.4.Diseño del procesador 20
………………………………………………………………………….
3.4.1. Estrategia global 21
………………………………………………………………………….
3.5.Detalles de implementación 22
………………………………………………………………………….
3.5.1. Requisitos de memoria 22
………………………………………………………………………….
3.5.2. Implementación de la memoria 23
………………………………………………………………………….
3.5.3. Implementación de las heurísticas seleccionadas 24
………………………………………………………………………….
3.6.Resultados 27
…………………………………………………………………………. 29
4. Conclusiones
5. Planificación ……………………………………………………………………… 32
2
Índice de figuras
Figura 1: Memoria capaz de suministrar una columna y una caja en un solo ciclo de
….………………………………………………………………………….
reloj, y una fila, columna y caja en dos ciclos de reloj 9
…………………………………….
Figura 3: Ruta de datos simplificada del algoritmo de ramificación y poda 11
………………………………………………………………………….
Figura 7: Candidato único 17
………………………………………………………………………….
………………………………………………………………………….
Figura 8: Candidato único oculto 17
………………………………………………………………………….
………………………………………………………………………….
Figura 9: Pares escondidos 18
………………………………………………………………………….
………………………………………………………………………….
Figura 10: Pares pelados 18
………………………………………………………………………….
………………………………………………………………………….
Figura 11: Líneas de candidatos 18
…………………………………….………………………………………
Figura 12: Líneas dobles 19
………………………
Figura 13: Algoritmo de resolución mediante heurísticas y backtracking utilizado
en ………………………………………………………………………….
la versión HW 22
………………………………………………………………………….
………………………………………………………………………….
Figura 14: Esquema hardware del evaluador que implementa la heurística
………………………………………………………………………….
“candidatos únicos” 24
………………………………………………………………………….
………………………………………………………………………….
Figura 15: Esquema de la implementación hardware de la heurística “candidato
………………………………………………………………………….
único oculto” 25
………………………………………………………………………….
………………………………………………………………………….
Figura 16: Esquema de la implementación hardware de la heurística “Pares
………………………………………………………………………….
escondidos” 26
……………………………………………………………………………
Figura 17: Diagrama de Gantt de la planificación inicial del proyecto 32
3
Índice de tablas
…………………………………….………………………………………
………………………
………………………………………………………………………….
………………………………………………………………………….
………………………………………………………………………….
………………………………………………………………………….
………………………………………………………………………….
………………………………………………………………………….
………………………………………………………………………….
………………………………………………………………………….
………………………………………………………………………….
………………………………………………………………………….
……………………………………………………………………
……………………………………………………………………………
4
Diseño e implementación de un procesador específico para la
resolución de Sudokus
Resumen
Los resultados obtenidos con este diseño nos permitieron lograr el primer premio
del FPT '09 Design Competition. Además el diseño fue elegido para su
presentación en el congreso y una descripción del mismo fue publicada en sus
actas, siendo accesible a toda la comunidad científica a través del IEEE Xplorer.
5
1. Introducción
El proyecto surgió como propuesta de participación en el FPT 2009 Design
Competition (en adelante, concurso), concurso internacional de diseño hardware.
El objetivo del proyecto consistía en el diseño e implementación de un procesador
específico para la resolución de Sudokus.
Además, la realización del proyecto conlleva varios objetivos:
- Aprender diseño hardware avanzado
- Familiarización con un entorno de descripción hardware (Xilinx ISE) y el
lenguaje de descripción hardware VHDL
- Comparación de soluciones Hardware / Software para un problema
dado
6
números del 1 al N2 siguiendo las mismas restricciones que las anteriormente
mencionadas para el tamaño estándar.
Un sudoku correctamente planteado posee solución única.
7
Siendo d[r,c] el valor de la casilla situada en la fila r y la columna c.
8
2.2 Diseño del procesador
El diseño del procesador se debe ajustar tanto a las especificaciones del
concurso, como a las limitaciones que presenta la FPGA.
Son destacables dos decisiones de diseño:
a) Diseño de la memoria:
Decidimos almacenar en memoria el Sudoku de tres formas
distintas. Esto triplica el espacio necesario en memoria con respecto
a almacenarlo de un único modo, pero simplifica enormemente el
acceso a la información necesaria en cada instante. Además
diseñamos una memoria capaz de proporcionar tanto una fila, como
una columna y una caja en único ciclo de reloj (ver figura 1).
9
Fig. 2. Módulo 8-comparador. Sea c7c6c5c4c3c2c1c0 la codificación
en binario de la entrada candidato, se compara la entrada DFyC
con los candidatos {c7c6c5c4c3000 ... c7c6c5c4c3111}.
11
Fig. 4. Diagrama de flujo de las operaciones de memoria
necesarias en la ejecución del algoritmo de backtracking sobre
el Sudoku. La bifurcación “NO” se toma con mayor frecuencia.
12
comparador de 5 bits para los 5 bits más significativos, 8 comparadores de
3 bits para los 3 bits menos significativos, y un codificador con prioridad que
selecciona el candidato que proceda en caso de varios éxitos en las
comparaciones (ver figura 5).
2.4 Depuración
Una vez implementado el diseño, se pudo comprobar que solo era capaz de
resolver a tiempo los Sudokus 3a, 3b, 4a, 6a, 7a y 8a.
En este momento del proyecto desconocíamos las diferencias entre los Sudokus
de tipo a y de tipo b de los benchmarks, por lo que el hecho de que nuestro diseño
fuese capaz de resolver un Sudoku de orden 8 (8a) de manera prácticamente
instantánea y no fuese capaz de resolver uno de orden 4 (4b) en varias horas, nos
hizo pensar que nos encontrábamos ante un fallo en el diseño.
Para localizar el hipotético fallo decidimos desarrollar una versión SW equivalente
que generase una traza de la ejecución del algoritmo de backtracking, y modificar
la versión HW para que generase del mismo modo dicha traza.
La comparación de ambas nos permitiría hallar dónde fallaba nuestro diseño.
13
Estábamos depurando algo que funcionaba correctamente
La complejidad de un Sudoku depende fuertemente, no solo de su tamaño,
sino también de la cantidad de casillas fijadas inicialmente y de su
disposición.
35 30.000
30 25.000
Candidatos promedio
25
20.000
Candidatos promedio A
20
15.000 Candidatos promedio B
15 Casillas libres A
10.000 Casillas libres B
10
5 5.000
0 0
3 4 5 6 7 8 9 10 11 12 13 14 15
Orden
14
2.5 Resultados
Los resultados de esta primera versión demuestran una alta ineficacia
resolviendo Sudokus de tipo B – tan sólo es capaz de resolver a tiempo el de
orden 3 -. Para los de tipo A los resultados son mejores, siendo capaz de resolver
a tiempo 5 de ellos (ver tabla 1). El descenso de candidatos promedio para los
Sudokus 6a, 7a y 8a (ver figura 6) explica que este diseño sea capaz de resolver
los benchmarks 6a, 7a y 8a, pero no el 5a. En general son unos resultados pobres
que manifiestan una necesidad de mejora del diseño que permita resolver un
mayor número de Sudokus eficientemente.
5 4,6875 -
Baja
6-15 1,2-3147 ∞ ∞ -
15
Versión BRAMs Slices
Evaluación 1
107 (78%) 9.471 (69%)
candidato/ciclo
Evaluación 2
107 (78%) 9.716 (70%)
candidatos/ciclo
Evaluación 4
107 (78%) 10.699 (78%)
candidatos/ciclo
Evaluación 8
107 (78%) 12.227 (89%)
candidatos/ciclo
16
3. Versión final: Procesador basado en la técnica de
ramificación y poda con funciones heurísticas para acotar
el espacio de búsqueda
3.1 Motivación
Anteriormente hemos probado que nos enfrentamos a un problema de
búsqueda de solución en un espacio de búsqueda extremadamente amplio. La
literatura sobre Sudokus ofrece una colección de técnicas de eliminación de
candidatos que permiten reducir el espacio de búsqueda. Es nuestro objetivo pues
conocer dichas técnicas y decidir qué conjunto de ellas implementar y cómo
hacerlo para poder tratar con Sudokus no abordables hasta el momento.
Candidato único oculto: Dada una fila, columna o caja (en adelante, región), si un
candidato dado aparece en una única casilla, podemos fijar dicho candidato como
número de dicha casilla.
Pares escondidos: Dada una región, si existe una dupla de candidatos que solo
pueden ir en dos casillas de dicha región, y dichas casillas son las mismas para
ambos candidatos, podemos asegurar que esas dos casillas estarán ocupadas por
la dupla de candidatos en cuestión, y por lo tanto eliminar el resto de candidatos
de ambas casillas.
17
Fig. 9. Pares escondidos. El 1 y el 9 forman un par escondido en las casillas 4 y
7. Podemos eliminar el resto de candidatos de dichas casillas.
Pares pelados: Si existen dos casillas en una región ambas con solo dos
candidatos, y dichos candidatos son los mismos en las dos casillas, podemos
eliminar ambos candidatos del resto de casillas de la región.
18
Líneas dobles: Dadas dos cajas ubicadas en la misma “línea de cajas”, si existe
algún candidato que solo puede ubicarse en dos filas/columnas en ambas cajas, y
dichas filas/columnas son las mismas para las dos cajas, entonces podemos
eliminar dicho candidato del resto de casillas de tales filas/columnas.
Fig. 12. Líneas dobles. En las cajas central y derecha el 2 aparece como
candidato únicamente en las filas superior e inferior. Podemos eliminar el 2
como candidato en la casilla 1 de la fila superior y las casillas 1 y 2 de la fila
inferior.
19
en la versión SW y determinar experimentalmente qué heurísticas consiguen
mejores resultados sobre los Sudokus de los benchmarks y precisan de recursos,
tanto a nivel de lógica como de memoria necesarias, que no excedan los
disponibles en la FPGA.
La evaluación de las heurísticas sobre la versión SW reveló la extrema eficacia de
las heurísticas "Candidatos únicos" y "Candidatos únicos ocultos". Además, estas
heurísticas destacan por ser las que poseen una complejidad computacional más
baja y por tener un coste de implementación bajo. Todo esto motivó su
implementación en la versión HW.
La siguiente heurística elegida, siguiendo los mismos criterios, fue "Pares
escondidos". Finalmente añadimos "Tríos escondidos" y "Cuartetos escondidos"
por sus buenos resultados en Sudokus de gran tamaño y alta dificultad y,
fundamentalmente, debido a que reutilizan hardware de la implementación de
"Pares escondidos", siendo así su coste de implementación menor que otras
heurísticas de similar eficacia.
20
3.4.1 Estrategia global
(3) Para las técnicas N-escondidos se vuelve a "Candidato único oculto" ya que la aplicación de N- 21
escondidos nunca tendrá como resultado inmediato nuevos candidatos únicos
1. Aplicar Candidato único
Si se ha fijado algún número entonces
Ir a 1;
Si no
Ir a 2;
2. Aplicar Candidato único oculto
Si se ha fijado algún número entonces
Ir a 1;
Si no
Ir a 3;
3. Aplicar Pares escondidos
Si se ha eliminado algún candidato entonces
Ir a 2;
Si no
Ir a 4;
4. Aplicar Tríos escondidos
Si se ha eliminado algún candidato entonces
Ir a 2;
Si no
Ir a 5;
5. Aplicar Cuartetos escondidos
Si se ha eliminado algún candidato entonces
Ir a 2;
Si no
Ir a 6;
6. Aplicar backtracking
22
Coste Coste Coste
Orden
almacenamiento almacenamiento almacenamiento
Sudoku
candidatos Sudoku total
15 11.390.625 455.625 11.846.250
14 7.529.536 345.744 7.875.280
13 4.826.809 266.904 5.093.713
12 2.985.984 186.624 3.172.608
11 1.771.561 117.128 1.888.689
23
3.5.3 Implementación de las heurísticas seleccionadas
Candidato único:
Para cada casilla, el evaluador examina su lista de candidatos en busca de
casillas con un solo candidato. El evaluador determina que existe solo un
candidato en caso de que el primer y el último candidato para la casilla coincidan.
24
Fig. 15. Esquema de la implementación hardware de la heurística
“candidato único oculto”.
Par escondido:
Para cada región del Sudoku, se examina el número de ocurrencias de
cada candidato almacenándolas en contadores dispuestos para cada candidato.
Se almacenan también las dos últimas posiciones en las cuales aparece cada
candidato en los registros de posición.
Posteriormente se comparan todas las duplas de candidatos en busca de aquellas
cuyo número de apariciones para los dos candidatos sea dos y las posiciones de
los dos candidatos sean las mismas. Aquellas casillas que cumplan estas
condiciones contienen un par escondido.
25
Fig. 16. Esquema de la implementación hardware de la heurística “Pares
escondidos”.
26
2) Un contador de número de posiciones de log 2 𝐺 + 1 bits.
Verifica la condición ii de un G-escondido.
3.6 Resultados
La tabla 5 muestra los recursos (memoria y lógica) utilizados por el diseño
final en función de qué heurísticas se implementen.
La tabla 6 muestra los tiempos de resolución de los benchmarks de la versión
presentada al concurso.
Esta versión es muy eficiente resolviendo Sudokus de tipo A, si bien aun no es
capaz de tratar satisfactoriamente con los de tipo B.
27
Versión Versión Speedup Versión Speedup
Orden tmax
HW SW 1 HW-SW1 SW 2 HW-SW2
3 0,2187 0,008600 <0,001 0,116 0,03 3,49
4 1,2288 0,024761 0,01 0,404 0,010 0,40
5 4,6875 0,060281 0,03 0,498 0,038 0,63
6 13,9968 0,117894 0,01 0,085 0,024 0,20
7 35,2947 0,224523 0,02 0,089 0,522 2,30
Dificultad
4 1,2288 ∞ ∞ - 1,810 -
alta
5 4,6875 ∞ ∞ - 56,133 -
6-15 14-3.417 ∞ ∞ - ∞ -
28
4. Conclusiones
Los distintos resultados obtenidos y la experiencia adquirida durante el
desarrollo de los diseños expuestos en este trabajo permiten extraer las siguientes
conclusiones:
29
La principal desventaja que presenta el diseño hardware en comparación
con el desarrollo software es la mayor complejidad del primero y la necesidad de
un mayor tiempo de depuración. La versatilidad y facilidad de uso de recursos de
los desarrollos software es también un punto a favor de los mismos.
Es importante también considerar que el mayor beneficio que obtiene un diseño
hardware específico reside en la explotación del paralelismo del problema que se
trate. Cabe destacar que el problema al que nos hemos enfrentado en este trabajo
no destaca precisamente por su alto grado de paralelismo, dado que el valor de
una casilla influencia sobre el resto, debiendo tratarse de manera secuencial.
Estrategia híbrida:
En determinados casos, aplicar tantas heurísticas como sean necesarias
para resolver el Sudoku sin necesidad de backtracking resulta perjudicial en
términos de tiempo de resolución con respecto a una estrategia híbrida
consistente en la aplicación de un menor número de heurísticas y backtracking
(ver tabla 6, columnas SW1 y SW2).
Mejoras futuras:
El objetivo ideal sería un diseño capaz de resolver a tiempo todo el abanico
de Sudokus de los benchmarks. Para ello son precisas una serie de mejoras
encaminadas a dos objetivos:
1) Tratar con Sudokus de hasta orden 15
Se contemplan dos posibilidades para tratar con Sudokus de hasta
orden 15. La primera sería utilizar la DDR SDRAM de la FPGA sobre la que
hemos implementado el diseño, cuyo módulo de memoria dispone de
suficiente memoria para cumplir con los requisitos detallados en la tabla 4.
Llevar esto a cabo implica implementar un controlador de memoria para
dicha placa.
La segunda posibilidad sería utilizar una placa con mayores
prestaciones, en concreto, con suficiente memoria SRAM para albergar las
estructuras necesarias para Sudokus de orden 15 (ver tabla 4), si bien esta
opción no hubiese sido válida para el concurso, ya que el conjunto de
placas sobre las que se podía implementar el diseño (ver sección 1.3) se
caracterizaban por ser de similares características. Ninguna de ellas poseía
suficiente memoria para tratar con Sudokus de orden 12 o superiores
mediante las estrategias discutidas en la versión final.
30
la adición de las heurísticas descritas en la sección 3.2, así como otras
adicionales, previo estudio de la eficacia de las mismas en la versión SW.
Además, la implementación de una función (obtenida experimentalmente),
que determine cuando es más conveniente aplicar backtracking en
detrimento de la aplicación de sucesivas heurísticas, conduciría a un diseño
mucho más eficiente en la resolución de Sudokus, tanto de dificultad alta
como baja. Para ello sería necesario realizar un análisis similar al explicado
en la figura 6 en tiempo de ejecución.
Experiencia personal:
31
5. Planificación
32
La dedicación en este periodo fue prácticamente completa con un total de
760 horas dedicadas al desarrollo de este proyecto.
Como se puede ver en las figuras 17 y 18, pudimos cumplir el plazo final
marcado en la planificación, el cual era imprescindible para participar en el
concurso. También se puede observar como una de las tareas que inicialmente
debería durar 2 semanas, acabó durando 10, debido a los problemas que
encontramos durante la etapa de diseño, que eran imprevisibles a la hora de
planificar.
33