360 Xodd Problems

360 Xodd Problems book cover

Xodd es un juego de mesa abstracto de Luis Bolaños. En este mismo blog ya se habló en su día de Yodd, el hermano mayor de Xodd, con el que comparte sus reglas pero no su tablero, así que no hay mucho más que comentar al respecto. En realidad, como diría Umbral, ¡hoy he venido aquí a hablar de mi libro!

Una idea tonta, una idea no tan tonta y el resultado de ambas.

Xodd es uno de esos juegos que ofrecen más de lo que su reglamento parece indicar en un primer momento. Las reglas (¡y apenas hay 2!) se combinan para dar lugar a situaciones interesantes que dichas reglas no explicitan a priori. Es, llamémoslo así, complejidad emergente y los mejores juegos abstractos están llenos de ella.

J. M. Thompson, en el ya clásico Defining the abstract da la que para mí es la mejor definición de “juego abstracto” hasta el momento:

playing an abstract strategy game is an exercise in logical thought. There is an intimate relationship between such games and puzzles: every board position presents the player with the puzzle, What is the best move?, which in theory could be solved by logic alone. A good abstract game can therefore be thought of as a “family” of potentially interesting logic puzzles, and the play consists of each player posing such a puzzle to the other. Good players are the ones who find the most difficult puzzles to present to their opponents.

The design of a good abstract game must therefore allow an inexhaustible supply of interesting puzzles to be discovered in the possible positions of its board. Equally important, these puzzles must be discoverable and to some degree solvable by the players. Anthropologists from another planet who wanted to study the way human beings think would do well to study our abstract strategy games.

Movido por la convicción de que Xodd sería un buen generador de puzzles decidí ponerme a explorar posiciones legales generadas aleatoriamente. Xodd es un juego especialmente adecuado para ello: el único requisito para que una jugada sea “legal” es que tenga un número impar de grupos (en la imagen que encabeza este artículo puede verse un ejemplo de posición legal con 5 grupos negros y 6 blancos). Pedirle a Python que genere cuadrículas aleatorias que cumplan dicha condición es bastante sencillo así que simplemente lo hice.

El resultado no estaba mal, pero tampoco estaba bien. El problema era que las posiciones resultaban poco realistas y difícilmente podrían alcanzarse en el curso de una partida. Tocaba sofisticar el generador aleatorio. Una de las modificaciones más sencillas y efectivas fue pedirle que el tablero resultante no sólo tuviese un número impar de grupos sino que además mostrase una situación lo más empatada posible (es decir, que el número de grupos de un color y de otro fuesen casi iguales).

Con esa modificación, y alguna otra del mismo estilo, ya pude empezar a ver posiciones realistas y no sólo legales. Llegados a este punto, mi primera idea (tonta) de generar posiciones aleatorias a ver qué pasa… había tocado techo y dio paso a una idea (no tan tonta): generar posiciones interesantes.

El primer problema estaba claro: no tenía ni idea de cómo concretar el concepto interesante.

Parecía razonable programar una búsqueda minimax que me permitiese resolver de manera óptima una posición dada y eso fue lo primero que hice. No fue sencillo, Xodd tiene un factor de ramificación elevado (del orden de jugadas válidas para un tablero con N huecos) así que resolver posiciones con más de 12 huecos era prohibitivamente lento. Eso significa resolver un juego a 6 jugadas del final (aproximadamente), lo cual no es maravilloso pero tampoco está mal y seguramente sería suficiente para generar buenos puzzles (en el sentido de Thompson).

Con mi nuevo juguete conseguí resolver tableros de pequeño tamaño:

Tablero  1×…  2×…  3×…  4×…  5×…  6×…  7×…  8×…  9×…  10×…  11×…  12×…  13×…  14×…  15×…  16×…
…×1
…×2
…×3
…×4
…×5

Pero los resultados no tenían aplicación directa (Xodd se suele jugar en tablero cuadrados mucho mayores, generalmente entre 9×9 y 14×14) y la carencia de regularidad en los resultados no permitía inferir una regla sencilla que permita determinar el ganador de una partida de tamaño (N×M).

Mi búsqueda de posiciones interesantes dio ciertos rodeos hasta llegar a la idea que ha dado lugar a este artículo: encontrar posiciones en las que uno de los jugadores tiene tan sólo una jugada legal ganadora (asumiendo que ambos jugadores no comentan ningún error hasta el final de la partida). El típico problema de “Negras juegan y ganan” de toda la vida, vamos.

Generar este tipo de problemas de manera sistemática no es sencillo. De hecho aún hoy no tengo ni idea de cómo hacerlo. Afortunadamente las herramientas que tenía a mano (un generador de posiciones casi-empatadas y un solucionador de problemas) eran todo lo que necesitaba. Se generan posiciones aleatorias y se filtran todas aquellas que no tienen una solución única (de media tan sólo 1 de cada 10 posiciones generadas era válida). Y luego, ya que todo se hace de manera automática y el ordenador no se queja por hacer horas extras, dejas el programa trabajando un buen montón de horas y haces que te escriba los problemas en un formato que LaTeX pueda entender y compilar.

El resultado es un libro con 360 problemas (¡prácticamente uno para cada día del año!) y sus respectivas soluciones. El tamaño de las páginas se escogió para que pudiese ser leído en un tablet o un lector de ebooks pero es un libro bastante printer-friendly y nada impide imprimirlo en A4 a razón de 4 páginas por cara (por ejemplo). Luis, al que le he dado la tabarra durante los meses que he estado desarrollando este proyecto, ha tenido la amabilidad de permitirme incluir las reglas de Xodd, de manera que alguien que jamas haya oído hablar del mismo pueda aprender a jugar sobre la marcha.

Así pues, lo que empezó como una idea más bien tonta ha acabado siendo un libro bastante útil. Conclusión: Python hace milagros.

BOLAEXTRA: Si has llegado hasta aquí (¡felicidades, era un tocho!) estarás buscando el link para descargar el libro. Puedes hacerlo desde la BGG (si estás registrado allí) o usando este otro link. En cualquier caso, pero especialmente si haces uso del segundo link, te agradecería que dejases un breve comentario en esta entrada explicando cómo has llegado hasta aquí y qué te parece el libro (si es que ya lo has leído). Considéralo el esfuerzo de dejar ese comentario como un donativo a cambio del libro (a ti te va a costar 1 minuto y a mí me va a ser muy útil).

Por otra parte, recuerda que el libro tiene una licencia Creative Commons – Atribución – No Comercial – Compartir Igual bastante permisiva. Tanto Luis como yo te invitamos a aprovecharla al máximo.

Escrito en 13/06/13 10:17 por Carlos Luna en las categorías:

Comentarios

Gravatar.com se ha roto

Es genial, Carlos. Impresiona bastante ver cómo la solución única incrementa la dificultad de los problemas y hace que incluso aquellos con menos huecos libres sean bastante menos obvios de lo que uno podría esperar. Y todo generado automáticamente. ¡Bravo!

Luis Bolaños Mures | 13/06/13 18:03 | #

Deja un Comentario

Quizás quieras usar textile para dar formato a tu comentario.

"linktext":http://       _em_       *strong*       -strike-       ^sup^       ~sub~
bq. Blockquote       # Lista numerada       * Lista no-numerada       ==html crudo, sin textile==

(no será mostrado) (http://...)