domingo, septiembre 24, 2023

Ruinas Antiguas e Inteligencia Artificial: Cómo revivir el juego 'Nine Men's Morris' (Juego del Molino) en Python con ChatGPT

Desde la más lejana antigüedad y en todas las culturas, los juegos de mesa han sido una constante en la historia humana. Estos juegos, más allá de ser simples pasatiempos, son unos complejos retos de estrategia, táctica y resolución de problemas. A lo largo de los años, juegos como el "Senet", el "Go" y el "Chaturanga" (el que se supone que es el antecesor del ajedrez moderno) han desafiado a las mentes de sus jugadores. Otro de los juegos más estudiados es el Juego real de Ur, que data del 2600 a.c..  Precisamente de este juego y la mentalidad hacker creativa, hablamos en nuestro libro de "Microhistorias: anécdotas y curiosidades de la historia de la informática (y los hackers)"

Figura 1: Ruinas Antiguas e Inteligencia Artificial: Cómo revivir el juego
'Nine Men's Morris' (Juego del Molino) en Python con ChatGPT 

Y es que la relación entre los juegos de mesa y la informática ha crecido en las últimas décadas. La creación de máquinas y programas capaces de competir (y a menudo superar) a campeones humanos en juegos como el ajedrez o el Go (donde las máquinas ya son las campeonas indiscutibles como AlphaGo) son la prueba de cómo los principios de estos antiguos juegos han sido incorporados y emulados en el mundo digital como base de aprendizaje al razonamiento. 
Estos logros no solo demuestran el poder y la capacidad de la informática moderna, sino que también es un homenaje a la rica tradición y complejidad de los juegos de mesa que han acompañado a la humanidad durante miles de años. Pero en este caso, vamos a utilizar la informática moderna (en concreto la Inteligencia Artificial) para traer al mundo real (en este caso digital) un juego también de la antigüedad.

Historia del juego "Nine Men's Morris" a.k.a. "Mill"

Pero vamos a centrarnos en esta historia. Hace unos 500 años, durante la construcción del Castillo Ćmielów en Polonia, se talló un tablero de juego en una losa del suelo de arenisca (pieza recientemente encontrada en las ruinas del castillo) Aunque la razón exacta de su existencia no está clara si fue creado por los obreros o los habitantes del castillo por ejemplo - ¡gamers, gamers, gamers everywhere! -, este descubrimiento nos conecta con la historia de los juegos de mesa que se han jugado en diferentes culturas a lo largo de los milenios, como antes hemos comentado. 

El juego del que hablamos se llama "Nine Men's Morris", también conocido como "Mill" (Juego del Molino), es un juego de estrategia para dos jugadores con orígenes que se remontan a la más lejana antigüedad.


El juego se lleva a cabo en un tablero con 24 puntos interconectados por líneas como el que se observa en la siguiente figura:


El objetivo principal del juego es formar "molinos", es decir, una línea recta de tres piezas ya sea horizontal o verticalmente al estilo tres en raya. Cada jugador comienza el juego con 9 piezas. Siempre que se forma un molino, el jugador puede eliminar una de las piezas del oponente del tablero.
El objetivo final es reducir las piezas del oponente a dos o bloquearlas por completo, impidiéndoles realizar cualquier movimiento. El juego termina cuando uno de los jugadores queda con solo dos piezas (y por lo tanto no puede formar molinos) o cuando un jugador no puede realizar un movimiento legal. El otro jugador es declarado ganador. En el vídeo de arriba puedes ver en detalle las reglas y un ejemplo de juego.

Fases del juego

a) Fase de movimiento:
  • Una vez que se han colocado todas las piezas en el tablero (por turnos), los jugadores comienzan a mover sus piezas.
  • En su turno, un jugador mueve una de sus piezas a un punto adyacente vacío.
  • Si un jugador forma un molino durante esta fase, puede eliminar una pieza del oponente siguiendo las mismas reglas que en la fase de colocación.
b) Fase de salto:
  • Cuando un jugador se queda con solo 3 piezas, entra en la fase de salto o vuelo.
  • En esta fase, el jugador puede mover una de sus piezas a cualquier punto vacío del tablero, no solo a un punto adyacente.
  • Si forma un molino, puede eliminar una pieza del oponente.

Reviviendo Mills en Pyhton con ChatGPT

Vamos a hacer un sencillo experimento. Utilizando ChatGPT en su versión GPT-4 (también funciona en GPT 3.5), vamos a pedirle que genere el juego en Python para dos jugadores (humano vs humano), una versión más sencilla sólo para comprobar las reglas en los movimientos. Si queremos una versión en la que juegue la máquina la cosa se complica un poco, pero sería factible. 

Figura 7: Libros de Python para Pentesters y Hacking con Python
de Daniel Echeverri publicados en 0xWord.

Vamos a intentar crearlo sin modificación alguna por nuestra parte, sólo comprobaremos el funcionamiento y si no es correcto, le volvemos a decir a ChatGPT que lo compruebe y nos genere un nuevo código. Esta implementación debe de tener todas las reglas en cuenta, los posibles movimientos tanto legales como ilegales, molinos, salto, etc. Como prompt de base he utilizado este sencillo, sin pensar ninguna técnica especial en prompting:

“Necesito crear un programa en python que simule un tablero y las reglas de juego de Mills o Molinos. El código debe de ser totalmente funcional permitiendo una partida de dos jugadores con todas las reglas implementadas, así como el análisis de todos los posibles movimientos para que la máquina compruebe si es o no legal. El tablero quiero implementarlo en modo texto y utiliza emojis para las fichas.”

Para conseguir un resultado final decente y jugable, he tenido que darle algunas vueltas al código generado ya que había algunos errores. A la primera no ha funcionado correctamente la lógica del juego, pero después de algunas iteraciones hemos conseguido una versión más o menos funcional (y con emojis y todo):

Figura 8 Momento de la partida del juego generado por ChatGPY
y optimizado en una primera fase donde es jugable.

Estamos lejos aún de una versión perfecto, sólo quedarían afinar algunos temas de la lógica, depuración de errores, etcétera, pero el código final es lo bastante decente como para afinarlo y llegar a una implementación interesante del juego. 

Figura 9: Solicitando el mismo Prompt a ChatGPT 3.5

Ya sabes, ChatGPT es una magnífica herramienta, pero requiere siempre de tu supervisión final como ser humano, así que si quieres aprender, te dejo el siguiente reto. Aquí tienes el mismo ejemplo en ChatGPT 3.5, pero sin terminar, para que lo acabes tú.

Figura 10: Respuesta de ChatGPT 3.5 a la petición

Y éste es el código que nos ha generado en Python para resolver el juego. ¿Funciona¿ ¿Es correcto? ¿Hay que tocarlo?

Figura 11: Código en Python para el juego del molino generado por ChatGPT 3.5

Ahora tú tienes que resolver el problema completo. O bien por medio de Prompt Engineering, o bien por medio de tocar el código en Python, hasta dejarlo resuelto.

Conclusiones

La “resurrección” de un juego ancestral como "Nine Men's Morris" o “Molinos” (o cualquier otro) mediante la inteligencia artificial nos muestra la capacidad de la tecnología para preservar y simular su funcionamiento, sino que también nos puede servir para aplicarlo a otras áreas. La habilidad de la IA para descifrar, aprender y adaptarse a estructuras complejas, como las reglas de un juego, abre enormes posibilidades en campos como la medicina, la investigación científica y la ingeniería. 

Esta fusión de lo antiguo con la tecnología moderna puede abrir puertas a innovaciones inesperadas y realmente fantásticas, desde la simulación de escenarios históricos hasta la predicción y solución de problemas contemporáneos pasando por la decodificación de idiomas o acertijos ancestrales.

Happy Hacking Hackers!!! 

AutorFran Ramírez, es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps", también de "Machine Learning aplicado a la Ciberseguridad” además del blog CyberHades. Puedes contactar con Fran Ramirez en MyPublicInbox.

 Contactar con Fran Ramírez en MyPublicInbox

No hay comentarios:

Publicar un comentario