UNIVERSIDAD DE ANTIOQUIA, FACULTAD DE INGENIERÌA, TÉCNICAS DE OPTIMIZACIÓN
1
Aplicación de meta heurísticas a la solución del Sudoku 1
Gustavo Adolfo Jerez Tous, 2Johny Alejandro Ocampo Aguirre, 3Saider Antonio Lagares Ballesta
Resumen— Se exponen los resultados de la aplicación de
diferentes técnicas meta heurísticas a la solución del conocido problema del Sudoku. Partiendo de una descripción somera de la lógica del problema, se presenta solo la formulación propuesta por cada técnica para su resolución.
Palabras Clave— Meta heurística, NP-Completo, Optimización combinatoria, Sudoku
I.
INTRODUCCIÓN
El presente artículo pretende hacer una exposición somera de la solución del popular problema del Sudoku mediante la aplicación de varias técnicas de optimización. El Sudoku es un juego de rompecabezas que organiza números. A diferencia de otros juegos de rompecabezas, este puede ser modelado como un problema NP-Completo y consecuentemente ser resuelto mediante alguna de las meta heurísticas desarrolladas para tal fin. El sudoku fue inventado en 1979 por Howard Garns y que se popularizó en 1986 en Japón, tiempo durante el cual se renombro “Sudoku” que quiere decir “número único”. Hasta el día de hoy, Sudoku es uno de los juegos de rompecabezas más populares del mundo publicándose en los principales periódicos del mundo y siendo objeto de exhaustivas investigaciones que pretenden hallar una forma de solución general de este problema. Incluso, se le ha llegado a conocer como el “Cubo de Rubik del siglo XXI”. Se han realizado un gran volumen de investigaciones que intentan derivar métodos generales para la resolución del problema del Sudoku. Inicialmente, se desarrollaron métodos de fuerza bruta pero la evolución y popularización del rompecabezas, trajeron consigo métodos más elaborados que hacen uso de las diferentes técnicas de optimización 1 J. A. Ocampo, esta con la facultad de ingeniería de la Universidad de Antioquia, Ciudad Universitaria, Calle 67 #53-108 Medellín, Colombia (e-mail:
[email protected]). 2 G. A. Jerez, esta con la facultad de ingeniería de la Universidad de Antioquia, Ciudad Universitaria, Calle 67 #53-108 Medellín, Colombia (e-mail:
[email protected]). 3 S. A. Lagares, esta con la facultad de ingeniería de la Universidad de Antioquia, Ciudad Universitaria, Calle 67 #53-108 Medellín, Colombia (e-mail:
[email protected]).
tales como recocido simulado, búsqueda tabú, optimización de colonia de hormigas y abejas, entre otros. Es evidente dada esta aproximación, que los Sudokus no son resolubles de forma trivial. La investigación presentada en este artículo expone los resultados y aproximaciones logradas mediante la aplicación del conjunto de meta heurísticas arriba listados para resolver Sudokus. Estas meta heurísticas son esencialmente movimientos predeterminados aplicados a un problema de Sudoku y que incorporan experiencias humanas para la toma de decisiones que optimicen la solución. Una descripción del rompecabezas Sudoku, así como una formulación general del problema y los lineamientos necesarios para saber que se ha resuelto correctamente, son presentados en la sección II. En la sección III se introducen las meta heurísticas y las metodologías implementadas para evaluar sus aproximaciones a la solución del Sudoku. Finalmente, un resumen de los avances más relevantes y conclusiones para una futura investigación son presentadas en la sección IV.
II. PROBLEMA DEL SUDOKU En el caso de nuestra exposición resulta útil entender cómo funciona un sudoku y cuáles son los objetivos de su resolución. Un Sudoku consta de una cuadricula de tamaño n x n que está compuesta de n columnas, n filas y n x n celda. Al entero n se le llama el orden del Sudoku. Por ejemplo, para un Sudoku de 3x3, la intersección de cada fila por cada columna forma una celda la cual contiene un número cualquiera entre el 1 y el 9. Cada fila y columna contiene tres bloques. En la figura 1, los bordes de estos bloques son resaltados, siendo así, cada bloque se componen de 3 filas y 3 columnas. El objetivo entonces, es rellenar la cuadricula ubicando los números enteros del 1 a n2 en cada celda de acuerdo con las siguientes reglas: 1. Las celdas de cada uno de los renglones deben contener los enteros de 1 a n2 exactamente una vez.
UNIVERSIDAD DE ANTIOQUIA, FACULTAD DE INGENIERÌA, TÉCNICAS DE OPTIMIZACIÓN 2. Las celdas de cada una de las columnas deben contener los enteros de 1 a n2 exactamente una vez. 3. Cada una de las sub cuadrículas deben contener los enteros de 1 a n2 exactamente una vez.
2
Los resultados de la tabla 1 se obtienen mediante la expresión
𝑆 = 𝑛𝑛(𝑛+𝑠) Donde n es el número de filas o columnas, S la cantidad de soluciones posibles (incluidas las no factibles) y s el número de pistas iniciales; de la tabla se nota fácilmente que al aumentar los cuadros en blanco o variables de decisión las soluciones posibles aumentan, exigiendo así más recursos y tiempo para llegar a un resultado valido; esto se conoce como explosión combinatoria.
Figura 1. Sudoku
Al plantear un problema de Sudoku se debe tener en cuenta los siguientes hechos experimentales para su correcta elaboración:
Un sudoku bien planteado tiene solución única. En general se dejan ciertas celdas con números preestablecidos llamados pistas que ayudan a la solución del Sudoku. Más pistas iniciales no hacen más fácil de resolver un tablero de Sudoku. Un tablero con menos de 17 pistas iniciales tiene soluciones múltiples.
En una terminología más técnica este problema es de tipo NP-Completo, estos son problemas de optimización muy complejos y costosos de resolver. De hecho resolverlos de forma exacta no es viable en la mayoría de los casos por ello se recurre a algoritmos aproximados que probablemente no funcionan en todos los casos. El Sudoku como problema de optimización, consiste en la minimización de la cantidad de números repetidos entre 1 y n, en filas, columnas y celdas de una matriz (M) representadas, dichas repeticiones, como los elementos del conjunto A. Por lo tanto, el objetivo es minimizar la cantidad de elementos presentes en ese conjunto, cuya formulación está representada por:
Un buen indicador de que tan bueno es el planteamiento de un Sudoku es el conjunto de soluciones posibles y el tiempo que toma llegar a la solución correcta. Por ejemplo, para un Sudoku de orden 3 se tienen los siguientes espacios de soluciones los cuales se presentan en la tabla 1. III. APLICACIÓN DE META HEURÍSTICAS Las siguientes subsecciones proporcionan una idea general de los métodos usados por las diferentes metas heurísticas para resolver un Sudoku. A. Recocido simulado En general el recocido simulado es un proceso físico en el cual se busca convertir un sólido a su estado líquido por medio de una temperatura elevada, luego se va disminuyendo esta temperatura de forma muy cuidadosa en intervalos muy pequeños con el fin de que las partículas se reorganicen logrando una estructura cristalina sin defectos.
Tabla 1. Conjunto se soluciones según pistas iniciales para n=3.
Como método para resolver un problema de optimización combinatoria, parte de una solución factible inicial Xi y después escoge otra solución Xj dentro de un vecindario y se evalúa la calidad empleando una función de costo f(x). Teniendo en cuenta si la solución nueva es de mejora o no, se toman decisiones de acuerdo a:
UNIVERSIDAD DE ANTIOQUIA, FACULTAD DE INGENIERÌA, TÉCNICAS DE OPTIMIZACIÓN
Figura 2. Ecuación para recocido simulado
3
Para asignar un costo (o penalización) a cada solución factible observamos en la figura 3 que en cada fila y en cada columna faltan ciertos enteros del 1 al 9 dado que hay valores repetidos, por lo tanto haremos una penalización de un valor de 1 por cada entero faltante en filas y columnas, con esto tendremos costos en cada fila y en cada columna como se muestra en la tabla 2.
Donde el término 1 nos dice que se acepta la solución si es de mejora, en caso contrario, se selecciona de acuerdo a la probabilidad dada con la exponencial, donde Ck es la temperatura o variable de control y se toma lo suficiente grande para que cuando disminuya, la probabilidad de aceptar soluciones de mala calidad disminuya. Dentro de esta sección explicaremos cómo se implementa el algoritmo de recocido simulado a un Sudoku de orden 3, es decir, con 9x9 celdas y 9 sub cuadrículas de 3x3. Los tableros tienen ciertas celdas previamente llenas, en las cuales estos valores nunca cambiarán y por tanto serán valores fijos. En la figura 3 se alcanza a observar las celdas con valores fijos; por ejemplo la celda (1,1) tiene el valor fijo de 1 y la celda (2,7) tiene el valor fijo de 2. Ahora, como sabemos que necesitamos de una solución inicial para empezar nuestro algoritmo, llamaremos a una solución factible a un llenado del Sudoku que cumpla por lo menos las siguientes dos condiciones: 1. 2.
Los valores fijos que inicialmente se dan no se cambiarán a lo largo del desarrollo. Cada una de las 9 sub cuadrículas deben contener los enteros del 1 a 9 exactamente una vez.
Según lo anterior tanto en las filas como en las columnas se puede repetir valores, entonces para nuestra solución inicial factible se llenará cada una de las sub cuadrículas con los enteros faltantes, por ejemplo en la sub cuadrícula son faltantes los enteros 2, 3, 4, 5, 6, 7 y 9. Así se hará con el resto del tablero hasta llenarlo completamente como se muestra en la figura 3.
Tabla 2. Funciones de costos
Con lo anterior definiremos el costo total como la suma de todas las penalizaciones de la tabla 2 en este caso la suma es igual a 41, por tanto un costo total de cero nos dice que nuestro sudoku está resuelto dado que con esto se cumplirían las condiciones necesarias de éxito. Para obtener las soluciones vecinas, al azar se escoge una sub cuadrícula y luego dentro de ella dos celdas. Por ejemplo si intercambiamos dos valores que están en una misma fila dentro de una sub cuadrícula, la penalización de dicha fila no cambia, dado que estos valores ya hacían parte de ella, se revisa es el costo de las columnas. Lo mismo sucede si los valores intercambiados hacían parte de una misma columna. Después de hecho el intercambio entre dos celdas se obtiene las nuevas soluciones vecinas. Para la actualización del costo de la nueva solución se requiere minimizar la función de costo. Cuando nuestra función de costo f(x) llegue a cero quiere decir que el tablero ha sido resuelto; en caso contrario se debe empezar a cambiar la temperatura como se muestra en el algoritmo de la figura 4.
Figura 3. Sudoku completo Figura 4: Algoritmo de recocido simulado para sudoku
UNIVERSIDAD DE ANTIOQUIA, FACULTAD DE INGENIERÌA, TÉCNICAS DE OPTIMIZACIÓN
El número NOFIJA es el número de celdas no fijas y es lo suficiente grande y conveniente para el número de iteraciones. c0 = σf corresponde a un valor experimental de la desviación estándar donde f es un valor promedio de la función de costo en un número grande de iteraciones. En el caso que f(Xj) no sea igual a cero se empieza a hacer un enfriamiento de acuerdo a: ck+1 ← α × ck, k ← k + 1, donde α es un parámetro fijo y éste depende de la dificultad del sudoku. B. Búsqueda tabú Es un tipo de algoritmo de optimización combinatoria que permite resolver problemas de minimización de funciones objetivo lineales o no lineales donde sus variables de decisión pueden ser enteras, continuas o mixtas; se permiten memorias de corto y largo plazo para intensificar y diversificar respectivamente, se puede penalizar una operación muy repetida en el proceso de generación de soluciones aledañas e invalidar la restricción tabú bajo ciertas condiciones. C. Algoritmo de restricción AC3 Es un algoritmo utilizado en la solución de problemas CSP (constraint satisfaction problems) para eliminar valores inconsistentes de las variables del problema la figura 5 muestra cómo funciona, considerando que Xi son variables de decisión que toman 3 posibles valores sujetos a las restricciones de la parte inferior
Figura 5. AC3 Ejemplo
Se asume en este algoritmo que los valores que no cumplen las restricciones se pueden anular sin problema lo cual reduce el espacio de búsqueda. Es posible modelar el problema entonces como de minimización de los valores repetidos en las filas, columnas y cuadrículas. Para la búsqueda Tabú se considera una solución inicial completando una fila o columna, puede ser de forma aleatoria, a partir de esta se genera un banco de soluciones o valores para llenar la fila o columna contigua sin repetir valores en una misma fila o columna ósea se completa todo el tablero asegurándonos de que se cumpla la restricción de no repetición en todas las filas o columnas. Como lo que se realizará en cada fila, columna y cuadrícula será probar las combinaciones que mejor se adapten a las restricciones es conveniente usar un método de generación de soluciones vecinas Swap.
4
Además una vez que se escoja un vecino generado por swap lo hacemos “movimiento tabú” durante 3,4 o m iteraciones, bajo una condición donde un movimiento tabú genere el mejor valor de función objetivo que se haya visto este se puede tomar, esto será nuestro criterio de aspiración y por último penalizaremos los movimiento que se hayan repetido muchas veces esto es 5, 6…m evitando que se repitan durante un periodo de varias iteraciones sin importar que tanto mejoren la función objetivo. La búsqueda tabú por si sola es un algoritmo robusto para la solución de problemas porque se puede decir que bien implementada intensifica y diversifica muy bien, sin embargo, requiere tiempos y recursos considerables. Esto se podría mejorar si se reduce el tamaño del conjunto donde se debe explorar, justamente esto es lo que se logra con la aplicación del algoritmo AC3 que para esta implementación el particular viene a ser un filtro que limitara la cantidad de soluciones que deben ser visitadas por tabú. A modo de ejemplo observe en la figura 2 que la posición 1,1 es un valor inamovible (1 para este caso) por lo tanto los vecinos que impliquen el valor uno sobre la primera fila, columna o cuadrícula serán descartados por AC3 reduciendo así los costos de tabú. D. Optimización de Colonia de Hormigas
La optimización por colonia de hormigas es una heurística para resolver problemas de optimización que trata de emular el comportamiento natural de las hormigas. Estos animales expelen feromonas durante su recorrido, lo cual hace que las otras hormigas puedan percibir dicho olor y usualmente escogen el camino con la mayor cantidad de feromonas percibidas. Bajo esta conducta, debido a la alta cantidad de feromonas percibidas, más hormigas escogen dicho camino respecto al de bajas feromonas, intensificando así el tránsito y para nuestros fines, llegando a la solución óptima de un problema en menor tiempo. Esta heurística procede de la siguiente manera en la resolución del Sudoku, partiendo de la ecuación característica de este algoritmo: 𝑃(𝑡 + 1) = ∆[𝑃(𝑡) +
|𝑡𝑟𝑎𝑖𝑙(𝑡)| 𝑛2
]
Siendo P el nivel de feromonas después de una actualización del camino escogido, trail es la longitud de cierto camino, delta es la constante de decaimiento de las feromonas por cierto camino y n es el orden del Sudoku. Se implementa optimización por colonia de hormigas en conjunto con búsqueda tabú, ya que la búsqueda tabú acelera el proceso de encontrar una solución mediante el acotamiento del espacio de búsqueda. Cada columna y fila del tablero tiene su propia lista tabú que contiene todos los movimientos que no se pueden hacer, que son en este caso, los números de 1 hasta n que ya están presentes en alguna
UNIVERSIDAD DE ANTIOQUIA, FACULTAD DE INGENIERÌA, TÉCNICAS DE OPTIMIZACIÓN
5
fila o columna. De igual manera se establece un valor de referencia para el nivel de feromonas que puede tener cualquier celda del tablero de Sudoku, lo cual previene entrar en ciclos de repetición de números que ya han sido seleccionados para una determinada fila o columna. La cantidad de feromonas retorna a cero cuando se alcanza el valor de referencia haciendo de esta manera más eficiente la aplicación de esta heurística a la resolución del Sudoku.
Número de ciclos (n_iter): Número de iteraciones del algoritmo (también puede definirse un tiempo de ejecución). - Límite (n_ciclos): Número de ciclos que se explota una fuente de alimento (se mejora una solución) antes de ser abandonada. En general, el algoritmo de colonia de abejas está dado por los siguientes pasos:
A continuación se presenta el algoritmo que resuelve el problema:
Se comienza obteniendo un número “sol” de soluciones iniciales y evaluándolas. Cada una de estas soluciones iniciales representa una fuente de alimento en el modelo biológico.
1. 2.
3. 4.
5. 6. 7. 8.
Cargar el tablero con los datos de feromonas Llenar (tanto como sea posible) las celdas del rompecabezas al azar con conjuntos de hormigas sin romper las reglas de juego Utilizar listas tabú para reducir las opciones de los números Seleccionar esas hormigas que produjeron soluciones que tienen menores celdas vacías y permanecieron en el rompecabezas Implementar algunas celdas llenas utilizados como valor de referencia para las feromonas Permitir que estas hormigas con mejores soluciones puedan actualizar la tabla de feromonas Destruir todas las hormigas Mientras las iteraciones sean menores que el valor de preselección: - Producir nuevas hormigas. - Las hormigas generan diferentes soluciones al rompecabezas usando la tabla de feromonas como una herramienta de orientación (Una mayor secuencia de números tiene mayor probabilidad de seleccionar de nuevo). - Permitir a las hormigas actualizar posiciones seleccionadas en la tabla de feromonas. - Disminuir posiciones seleccionadas en la tabla de feromonas. - Si el valor de feromona para cualquier celda del tablero excede el umbral, restablecer a cero dichos valores - Evaluar la solución proporcionada por cada hormiga
Fin D. Optimización por colonia de abejas Hasta ahora se han aplicado varios algoritmos a la solución del problema del sudoku. Un algoritmo relativamente nuevo como es el de la colonia de abejas, se desarrolla a partir de la observación del comportamiento de las abejas en la búsqueda de alimento y el cual tiene aplicaciones principalmente a problemas de tipo NP-Completo. Una gran ventaja del algoritmo es el reducido número de parámetros. -
Número de soluciones (sol): El número de fuentes de alimento (soluciones iniciales factibles) para nuestro problema.
-
El siguiente paso es explotar las distintas fuentes de alimento, lo cual se traduce en realizar modificaciones a la solución inicial obteniendo nuevas soluciones. En función de lo prometedores que sean los resultados, se dedicará mayor o menor tiempo a explotar la fuente de alimento tal y como se comportan las abejas realizando su danza en la colmena y provocando que otras abejas (las abejas observadoras) exploten también esa fuente de alimento. Las nuevas soluciones se obtienen combinando las soluciones candidatas, utilizando la siguiente función:
v[i,g] = x[i,g] + Φ - (x[i,g] − x[k,g]) Donde v[i,g] representa la nueva solución obtenida, x[i,g] la solución en la que la abeja se encuentra en ese momento, x[k,g] una fuente de alimento (solución) diferente a la que se encuentra la abeja, Φ un número real aleatorio definido entre [-1,1] y “g” el número de ciclo por el que va el programa. Se puede observar que la nueva solución encontrada v[i,g] surge de combinar la solución inicial (x[i,g]) con el resto de soluciones de forma aleatoria (x[i,g]-x[k,g]). Tras un cierto número de ciclos (n_ciclos) sin mejorar la solución, se considera que la fuente de alimento se ha agotado, y se abandona guardando la mejor solución encontrada. Finalmente, las abejas empleadas en esa fuente de alimento, se convierten en abejas desempleadas, por lo que en el algoritmo, se buscarán nuevas soluciones y se intentarán explotar, repitiéndose durante el número de iteraciones definidas (n_iter). Para la aplicación de este algoritmo al Sudoku, durante la inicialización de la población a cada abeja empleada se le suministra una copia del tablero Sudoku a ser optimizado (la fuente de comida). La abeja entonces ubicará aleatoriamente dígitos de 1 hasta n en cada celda vacía. Después de esto, la población es evaluada y entra en un ciclo de evaluación hasta que se alcance un criterio de parada el cual usualmente puede darse de dos maneras: la primera, si se hacen todos los ciclos implica que no se pudo obtener una solución óptima luego se selecciona la mejor solución obtenida durante las iteraciones. La segunda forma
UNIVERSIDAD DE ANTIOQUIA, FACULTAD DE INGENIERÌA, TÉCNICAS DE OPTIMIZACIÓN se cumple cuando se encuentra una solución óptima en el ciclo.
6
REFERENCIAS [1]
Dada una solución factible inicial Xi y un conjunto de vecinos Xk, se escoge un número j aleatoriamente. Se crea una copia entonces de Xi llamada Vi, luego para encontrar el valor de una nueva celda se sigue la fórmula:
Solving Sudoku Puzzles using Improved Artificial Bee Colony Algorithm. Jaysonne A. Pacurib, Glaiza Mae M. Seno, John Paul T. Yusiong, University of Philipines, 2009.
[2]
Yusiong,J. P., Seno, G.M.: SudokuBee: An Artificial Bee Colony-based Approach in Solving Sudoku puzzles. International Journal of Advance Research in Computer Science. 1(13), (2010).
Vij = Xij + rand[0, 1] ∗ abs(Xij − Xkj)
[3]
Solución al acertijodel Sudoku con recocido simulado. [Online]. Available: http://www.izt.uam.mx/newpage/contactos/revista/84/pdfs/sudoku.pdf
[4]
Asif, M., Baig, R.: Solving NP-Complete Problem Using ACO Algorithm. 2009 International Conference on Emerging Technologies. (2009 ).
[5]
Yato, T. and T. Seta. (2003). ‘Complexity and Completeness of Finding Another Solution and Its Application to Puzzles’. IEICE Trans. Fundamentals, Vol. E86-A, No. 5, pp. 1052-1060.
Esta ecuación asegura que Vij no es una de las celdas proporcionadas como pistas. Las dos posibles soluciones Xi y Vi son evaluadas entonces usando la función arriba expuesta. La solución factible con el mayor valor de conveniencia es seleccionada y se guarda en la memoria de la abeja. El valor de conveniencia determina la calidad de un espacio de soluciones, y está dado por: 1 𝑓𝑖𝑡 = 1 + 𝑓𝑖 Siendo fit el valor de conveniencia de una solución factible proporcionada por la abeja i y fi representa el costo o penalización de cada solución factible. Entre más alto sea dicho valor mejor será la calidad de la comida en esa fuente. Un Sudoku con solución óptima tiene una penalización de 0 y un valor de conveniencia de 1. IV.
CONCLUSIONES
Las meta heurísticas ayudan a resolver diversos problemas que tienen una complejidad bastante superior, y requieren de procedimientos aproximados que constan de un gran número de iteraciones para llegar a una solución adecuada. La búsqueda tabú es un buen algoritmo para solucionar problemas NP-Completos, se tiene que probar en otros problemas pero al solucionar el que nos compete funciona bien. Este algoritmo se puede mejorar y reducir sus costos, esto se logra al aplicar técnicas de satisfacción de restricciones como la que mencionamos en este artículo. Los problemas NP-Completos como el sudoku se pueden reducir a problemas de tipo SAT (Problema de satis factibilidad booleana), porque se puede decir que la solución gira en torno a si un numero se ubica o no en una posición ósea la condición “ubicar número en” solo será “true” o “false” para todos los casos. Hasta el momento no existen algoritmos para resolver sudokus en tiempos polinomiales, solo existen algoritmos aproximados y heurísticas que brindan tiempos de solución aceptables. Sin embargo, para determinados problemas como por ejemplo de recocido simulado, se puede estimar un valor promedio de temperatura de acuerdo a la experiencia en la resolución de distintos problemas de optimización lo cual ayudaría a reducir el tiempo computacional.
M. Dorigo, G. D. Caro, and L. M. Gambardella, “Ant Algorithms for Discrete Optimization,” ACM Trans. Artificial Life, vol. 5, pp. 137–172, April 1999. [5] Aplicación de técnicas de optimización combinatoria a la solución del sudoku [Online]. Available: http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd= 2&cad=rja&uact=8&ved=0CCIQFjAB&url=http%3A%2F%2Fdialnet.u nirioja.es%2Fdescarga%2Farticulo%2F4783907.pdf&ei=1qWcVdWHB InmAH26bXoDQ&usg=AFQjCNEUZbkZeeDj_DHlboyjiW0Lp_qohQ &sig2=1SCZ_DJifenQXrsr0B77Tg&bvm=bv.96952980,d.cWw. [6] Luis R. Morera. “Solución de un Sudoku”. [Online]. Available: www.articuloweb.com/articles.php?art_id=331&start=1. [6]