Tuesday, September 13, 2011

Reflexiones sobre el "Chess Query Language"


¿Qué es lo que hace de una posición de ajedrez un patrón en particular? ¿qué elementos son los que hacen que se pueda describir un patrón como ganador -digamos- en una posición particular? Por ejemplo, consideremos la siguiente:

Juegan las blancas
(Patrón 1)

Quien sepa algunas cosas sobre el ajedrez sabrá que las blancas pueden dar mate en cuatro jugadas con 1.Axh7+ Rh8 2.Ag6+! (evitando que la dama negra capture a la blanca), 2. ... Rg8 3. Dh7+ Rf8 4.Df7#. De hecho, no importa dónde esté el alfil blanco siempre y cuando se mantenga en la diagonal b1-h7:

Juegan las blancas
(Patrón 2)

En este ejemplo podríamos caracterizar la posición como un alfil que corre sin interrupción desde b1 hasta h7, con la dama blanca en h6 y el rey negro en g8. Pero... ¿es esto suficiente? Aparentemente sí. Pero consideremos ahora la siguiente posición:

Juegan las blancas
(Patrón 3)

Este patrón parece ser el mismo que en la posición anterior, pero he aquí que cambia totalmente todo el asunto, porque ahora la torre negra de a7 defiende el punto del mate en f7. Aquí, por ejemplo, las blancas no tienen más que tablas: 1.Axh7+ Rh8 2.Ag6+ Rg8 3.Ah7+ y tablas por repetición. Las blancas no tienen mejor opción que esto.

La pregunta aquí es ¿cómo definir los elementos del patrón que hacen que el patrón 1 sea ganador, Mientras que en el patrón 3 el hecho de tener la torre negra en a7 hace imposible que el patrón de mate se dé? Yo quisiera hallar un lenguaje que describiera los patrones, algo así como una geometría analítica para el tablero de ajedrez. Déjenme ponerles un ejemplo:

Considérese la ecuación de la parábola:

Gráfica 1

y=x^2. Sin vemos la expresión, podemos hacer el dibujo que genera la imagen de la parábola, porque la expresión algebraica representa ni más ni menos a la gráfica 1. En este sentido, la expresión algebraica define y caracteriza la parábola mencionada. ¿Podría haber una especie de "lenguaje algebraico" para caracterizar sin errores cualquier posición de ajedrez? Llevo ya un par de años atorado en esta problemática. No veo cómo hacer un lenguaje que caracterice las posiciones del tablero.


Más de uno se preguntará como para qué quiero algo así. Es fácil: imaginen que tengo la siguiente posición, la cual se dio en la siguiente partida:

Paulsen - Schwarz
Lepzig 1879 (match)
3er juego

1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Nc6 5. Nf3 Qb6 6. a3 Bd7 7. b4 cxd4 8. cxd4 Nge7 9. Nc3 Nf5 10. Na4 Qc7 11. Bb2 Be7 12. Rc1 a6 13. Nc5 Bxc5 14. Rxc5 O-O 15. Bd3 Nfe7?





 
Paulsen-Schwarz
Leipzig 1897 (match)
3er partida
Juegan las blancas 
(Patrón 4)

16. Bxh7+! el clásico "regalo griego". El esquema está dado: el rey negro enrocado. El caballo negro que normalmente está en f6, defendiendo h7 ya no está. El alfil blanco apunta a h7, el caballo en f3 brincará a g5 y la dama blanca entonces se incorporará al ataque.

Si tuviese una manera de describir esta posición vía este "mágico lenguaje" entonces podría hacer búsquedas sobre todas las posiciones en donde este esquema se diese en una base de datos, por ejemplo la megabase 2010. Así, por ejemplo, hallar todas las posiciones con el patrón 4 me permitiría hacer incluso un catálogo o libro con este esquema, y así practicarlo hasta que fuese parte de mi acervo ajedrecístico. Vaya, que escribir libros de ejercicios de combinación sería algo ridículamente simple, pues como autor no tendría que hurgar literalmente en las posiciones, sino que podría pedirle al sistema que hallara el patrón buscado y listo, colección de posiciones para estudiar.

Por ello mismo, el Chess Query Language - CQL, del cual ya hablé aquí antes, es quizás la herramienta que podría solventar las dificultades. Curiosamente el CQL me permite buscar todas las posiciones en un archivo PGN, en donde se dio el regalo griego. Entonces me pregunto: ¿Necesito realmente un lenguaje que describa las posiciones en ajedrez para crear patrones? o bien ¿un lenguaje de consultas en una base de datos es la sustitución natural de este potencial lenguaje y es más que suficiente? Dicho de otra manera, ¿para qué quiero describir posiciones si el CQL me permite crear una búsqueda de un patrón determinado? ¿Será esto equivalente a lo que busco? 

Me llama la atención que el problema de generar un lenguaje descriptor de posiciones sea lo mismo (o al menos equivalente, para hablar con propiedad), que el tener un lenguaje de consultas sobre una base de datos, que finalmente tiene un origen en búsquedas de cadenas. ¿Qué opina lector/a, sobre esto en particular?

6 comments:

Armando Estrada said...

Hola Morsa,

Estoy en una busqueda muy parecida a la tuya, pero mi objetivo es crear un programa que juege posiciones, resolviendolas como problemas de optimizacion.

Para representar el tablero de forma matematica, puedes usar multiples bitboards.
Esto permite hacer busquedas similares a las que te permite el chess query language, el limite es tu imaginacion.

Hay un libro que se llama "Chess skill in Man and Machine" Editado por Peter W. Frey que explica este tipo de representacion. capitulo 3(paginas 54 a 59). Se publico en 1977.

Saludos,

Morsa said...

Gracias, Armando. Creo que lo tengo en PDF. Buscaré lo que me dices. También sé que el programa Nimzo tiene un lenguaje para capturar información ajederecística (chess knowledge), como le llama su autor. Voy a escanear el artículo que tengo. Igualmente, veré en el manual de Nimzo este asunto.

saludos
Manuel

Mau said...

Que sabroso post!

Entrenador de Ajedrez said...

Realmente excelente blog con una amalgama de diferentes temas todos descritos de una forma super interesante.
Te invito a ti y a tus seguidores que visites mi blog donde encontraras recursos para el Ajedrez.
http://www.ajedrezdesdematamoros.blogsppot.com
Saludos

Morsa said...

Eentrenador,

ya vi tu blog. Estupendo. Podría mandarte algunos de los programas que he hecho para ajedrez... pero no sé a qué dirección mandártelos. Escríbeme con tus datos (que prometo no poner en los comentarios del blog).

saludos
Manuel

Alberto Fuentes said...

muy interesante. Hace algun tiempo me preguntaba lo mismo. Ademas de la finalidad de poder enseñar en la escuela normal de educacion, matematicas mediante el ajedrez. Sería la forma final de incentivar a todos a jugar ajedrez.

Lo importante de esto es que si a todos los niños les enseñaran a jugar ajedrez, cuando crezcan se podrian analizar los biorritmos mentales en los cuales andan en el dia. COn una partida rapida de ajedrez, por ejemplo, se podria saber si un medico esta ese dia o no en un nivel optimo para por ejemplo operar a alguien.

Hay dias que jugamos bien y otros en que andamos bajisimos (uno no ve nada), y eso es solamente por el biorritmo mental, elc ual si se pudiese graficar seria como una curva de un terremoto. Seria interesante que incluso se pudiese tomar mediante un electroencefalograma de manera que pudiese verse como es el biorritmo del ajedrecista, graficarlo en una ecuacion grafica y llevarlo a un sistema de matrices para descubrir que sistema o apertura podria ser mejor jugar.

No solo eso sino que podria servir mucho para enfermos de parkinson (olvido de cosas), y tambien poder reinterpretar el juego hacia combinaciones posicionales que generen un servicio a la sociedad.

Referente en forma directa a la entrada, sería bueno poder dar un dato, que no se si el autor lo ha tomado en cuenta. No solo las piezas son lo importante sino que las casillas. Es como que si la pieza de ajedrez le agrega (suma o multiplica) un valor al valor intrinseco de ella. Por lo cual quizas la ecuacion podria andar en una relacion con el sistema algebraico que ya incorpora el tablero. Para graficarlo es como se ha visto la explicacion grafica de la teoria de la relatividad: un planeta afecta la rectitud de la linea de luz, debido a la fuerza de gravedad. Aun cuando la luz sigue viajando en forma recta en la masa del continuo, esta masa se deforma por la presencia de gravedad de un planeta por ejemplo. Si tomamos la Dama, sería la pieza mas pesada del sistema, y mediante su movilidad puede afectar fuertemente el sistema "tablero", por lo que si bien su linealidad de desplazamiento pareciese ser una recta, en realidad se transformaria ADEMAS en una curva por la potencia fisica de atraccion de gravedad que tiene sobre piezas y casillas con las que se relaciona.