Friday, February 18, 2011

Lenguaje de búsquedas para posiciones de ajedrez


Cuando Boris Spassky iba a defender su título de Campeón del Mundo frente al estadounidense Bobby Fischer, se sabe que los soviéticos tardaron unos cuatro meses en transcribir todas las partidas que hallaron sobre el retador. El asunto era muy importante, porque no se jugaba solamente un título mundial de ajedrez, sino que se ponía en jaque, literalmente, el liderazgo de los soviéticos en el ajedrez, juego que representaba un símbolo nacional y que el comunismo soviético había abanderado como parte de su revolución cultural.

Hoy día, no se necesita un grupo de ajedrecistas que compilen las partidas de un rival en particular. Gracias a las bases de datos de partidas, de los manejadores de éstas, como Chessbase o Chess Assistant, se puede tener la colección más grande de partidas de ajedrez que se pueda uno imaginar, la cual ya oscila entre los 5 y 6 millones de encuentros ajedrecísticos. Por supuesto que esta información prácticamente condensa todas las partidas de ajedrez jugadas desde que éste se practica como lo conocemos (alrededor de 1525).

Pues bien, en algún momento -ya lo he dicho- tuve un momento que considero de verdadera iluminación. Por un instante sentí que entendía cómo comprender el ajedrez y para ello me di a la tarea de trabajar en posibles herramientas que me ayudaran a demostrar que iba por el camino correcto. Por ello nació el programa que analiza los patrones de las posiciones, el cual pretende, de alguna manera, crear un lenguaje de descripción de posiciones, pero que de alguna manera tome en cuenta los patrones de posiciones arquetípicas, las cuales pueden mostrar una combinación ganadora, en donde los elementos se repiten (a eso me refiero con patrones). En estos dos enlaces, éste y éste otro, hablé de estas ideas.

Por algún tiempo, que ya se antoja largo, he buscado cómo representar los patrones de ajedrez más típicos. La razón de esto es que así se podría hacer búsquedas de patrones en partidas de ajedrez y así sacar la información relevante que se hubiese dado con un patrón determinado. Algún alumno en la UNAM me dijo que quizás sería bueno hablar con algún matemático, que él pensaba que esto era una tarea para un especialista de esta naturaleza. Pero entre que no sé quién podría ocuparse de un lenguaje de descripción como el que creo necesitar, y entre la poca información que sobre este tema puede hallarse en la red, lo he estado dejando para un mejor momento.

Pero he aquí que encuentro el Chess Query Language (CQL), un sistema para hacer búsqueda de temas en posiciones de ajedrez. Aunque esto no es estrictamente los patrones en los que estoy interesado, es evidente que tiene una fuerte correlación y que, probablemente, sea el camino correcto para desarrollar este lenguaje descriptivo del que hablo.

El Chess Query Language fue diseñado para permitir a investigadores, autores y jugadores, a buscar temas en partidas, problemas y estudios. Hay que especificar el tema que se busca y la base de datos (partidas en PGN) en donde queremos buscar. Cuando se corre la consulta (usando cql.exe), el sistema crea un nuevo archivo PGN con los partidos de ajedrez que coinciden con el tema que se busca.

Como en todos los manejadores de bases de datos, CQL especifica un conjunto pequeño, pero poderoso, de primitivas para ser usadas en los temas de ajedrez. CQL puede encontrar mucho más información relevante que cualquier otro programa de ajedrez. Los usuarios pueden buscar en temas como ahogado, clavadas múltiples, juegos en donde ocurre la misma posición pero en donde en el lado ganador falta una pieza, los temas Grimshaw y Novotny, juegos con cierto número de capturas en una sola casilla, juegos con cierta cantidad de peones pasados, blancos o negros, etc. Las posibilidades se antojan infinitas.


Una ventaja obvia de usar CQL es que se le puede programar la búsqueda de, por ejemplo, el regalo griego (el sacrificio en h7 con jaque con un alfil), y el sistema dará todas las partidas que encuentre en la base de datos de referencia que pongamos. Imaginen para qué puede servir esto: crear libros de táctica en base a temas específicos, en donde el autor del libro no tiene que buscar "a mano" cada posición, sino que puede ayudarse de esta herramienta para así encontrar las mejores posiciones sobre el tema particular que se busque.

Por ejemplo, veamos una interesante búsqueda que hace Tim Krabbé en su excelente página de ajedrez, en donde por cierto, hallé por primera vez referencias al CQL. Dice Krabbé que en alguna ocasión soñó con una combinación. He aquí la posición de interés:

Tim Krabbé
Juegan las negras

La solución es sencilla: 1. ... Dh3!! 2.Rxh3 Cf4+ 3.Rg3 Cxe2+ seguido de 4. ... Cxc3 ganando. 0-1.

Muy sencilla pero... ¿se habría dado esta posición antes? ¿o este tema (no necesariamente las piezas estrictamente en las posiciones del diagrama). Con CQL Krabbé halló dos estudios, el primero de 1954:



P. Okonkowski 
Juegan las blancas y ganan
Schach, 1954

La solución es 1.Tc6! Txc6 y ahora la combinación soñada por Krabbé:  2.Df5+ Rxf5 3.Cd4+ Re5 4.Cxc6+ Rd5 5.Cxa5 y las blancas ganan.

Sorprendente. Parece magia que algo como CQL pueda hallar este tema cuando las piezas están en situaciones por demás diferentes.

De acuerdo a Krabbé, y cosa que comparto, CQL es la respuesta también al viejo problema de la clasificación de estudios de ajedrea. La base de estudios de Van der Heijden no tiene clasificación por temas, porque entre otras cosas, el asignar y etiquetar un tema es, como en literatura, algo que tienen que ver con  gustos personales y además, la creación de nuevos temas, o el definir los ya existentes requeriría de tener que clasificar la base de estudios de nuevo.

Por ello, es quizás mejor definir primero una interpretación y luego entonces, buscar por estudios y partidas en donde se dé esta interpretación. Por ejemplo, tómese el tema que tanto le gusta a Krabbé, el de la guardia desguardada -un pieza da jaque y una pieza se interpone en una casilla no defendida. Esto ha pasado en muchas partidas y estudios, pero nunca se ha reconocido como un tema por sí mismo. En Chessbase, por ejemplo, es imposible definir esta búsqueda, pero en CQL esto se hace de manera sorprendentemente fácil:

:wtm
:check
:movefrom [QRBNP]
:moveto .d4
:attackcount A Ad4 0
:shift
:flipcolor


Esto dice que juegan las blancas (wtm - white to move) y están en jaque (check), y que moverán cualquier pieza (movefrom [QRBNP]), a excepción del Rey a la casilla vacía d4 (moveto .d4), la cual tiene cero ataques después de esto (attackcount A Ad4 0). Los eventos especificados pueden tener lugar en cualquier casilla (shift). Finalmente, la última instrucción (flipcolor) nos permite asegurar que se encuentren ejemplos con los colores cambiados. Se puede poner también ":moveto ?d4", para limitar la búsqueda a los casos en donde la pieza interpuesta es capturada.

He aquí uno de los resultados de esta consulta con CQL, que a Krabbé se le pasó por alto cuando se jugó esta partida:

Topalov - Judit Polgar
Novgorod 1996
Juegan las blancas

43.Tc7 un guarda indefenso es la justificación para esta aguda jugada. 43...Tb8 44.Txf7+ Rg8 45.e6 Dxe3+ 46.Dxe3 Tb1+ 47.Dc1 dejando libre e3 para impedir el mate. Por supuesto que Judit habrá visto, pero tal vez no, que después de 47...Txc1+ 48.Rf2, el final esta perdido, por ejemplo, 48...Tf1+ 49.Re3 Txf7 50.d7! En la partida, se siguió: 48...Tc6 49.Td7 Ab5 50.Re3 Tc2 51.Tc7 Te2+ 52.Rf4 Tf2+ 53.Rxe4 Te2+ 54.Rf5 Tf2+ 55.Re5 Te2+ 56.Rf6 Tf2+ 57.Re7 Te2 58.d7 Axd7 59.Rxd7 Td2+ 60.Re8 y las negras se rindieron. 1-0.

Aunque el CQL se desarrolló para ser usado con la base de estudios de Van der Heijden, la cual contiene más de 75,000 estudios, CQL puede ser usado también con partidas y con bases de datos mucho más grandes. Pero como el sistema genera archivos PGN, hay que convertir las bases de partidas (normalmente en formatos propietarios de Chessbase y/o Chess Assistant), al formato PGN (Portable Game Notation), Krabbé tuvo que convertir 1.9 millones de partidas a PGN. Después de unos 20 minutos, el holandés obtuvo 1.3 GBytes de partidas en un archivo PGN. Hacer búsquedas en estas enormes bases de datos puede tomar tiempo, muchas horas quizás. Se puede sin embargo hacer una consulta en CQL que sea muy amplia y así reducir la muestra a buscar. Por ejemplo, a Krabbé le tomó 15 minutos extraer 4000 partidas en donde ocurre la promoción de un peón, pero en cualquier pieza a excepción de la dama. Con esta nueva base de datos, se pudo buscar temas que involucren la sub-promoción, lo cual resulta hacerse en unas 500 veces más rápido.

Se puede descargar el Chess Query Language de forma gratuita. Viene con manual y muchos ejemplos (scripts .cql). Es un programa de línea de comandos, pero el compositor de estudios checoslovaco, Emil Vlasák, ofrece VisualCQL, una utilería que probablemente haga sentir más cómodo al usuario en un ambiente Windows.

CQL fue desarrollado por Gady Costeff y Lewis Stiller. Es gratuito (con los correspondientes Derechos de Autor 2003-2004). Utiliza una programa base de datos (partidas en este caso) del software libre llamado Scid, desarrollado por Shane Hudson. La versión de Windows usa las bibliotecas Cygwin. En el sitio http://rbnn.com/cql/ puede hallarse el sistema para descargar, instalar y se usar el CQL.

Crédito Foto (inicio del artículo): DavidR_ (http://www.flickr.com)


No comments: