Showing posts with label patrones de ajedrez. Show all posts
Showing posts with label patrones de ajedrez. Show all posts

Sunday, March 16, 2025

Los patrones tácticos son como los viejos amigos


Hoy, hace unos 20 minutos, jugué una partida de un minuto por jugador. Aunque en general jugar partidas a este ritmo no sirve para mejorar en ajedrez, probablemente tenga algún beneficio el jugar rápido cuando uno esté apurado de tiempo en una partida formal. No lo sé. Quizás se satanice mucho este asunto. Sólo diré que Faustino Oro es increíblemente rápido y certero en las partidas blitz y en Puzzle Racer, un sistema que va poniendo poblemas de mate uno tras otro y midiendo cuántos se pueden hacer en un tiempo determinado. Pero no me crean. Vean el siguiente video:


Fausti entrenando en Puzzle Racer. Nuevo Récord 110 !!!!!!


Regresando al tema, la partida que jugué a un minuto (yo con negras), es una defensa escandinava - variante portuguesa, siempre muy táctica. La partida puede verse directamente en lichess en este enlace (https://lichess.org/GD6BA8Ea)

Veamos cómo fue:

pinguin1980 - morsa

1. e4 d5 2. exd5 Nf6 3. c4 e6 4. dxe6 Bc5 5. exf7+ jugar esto requiere de valor por parte de las blancas, pues quedarán expuestas a un posible ataque y a la falta de desarrollo para hacerse de material.  5... Kxf7 6. Nf3 Nc6 7. a3 Re8+ 8. Be2 Nd4 9. Nxd4 Qxd4 10. O-O Bf5 11. b4?? pierde calidad el blanco y eso debe ser suficiente. Sin embargo, yo estaba enfocado a atacar al rey aunque aclaro, tomar la torre es suficiente para obtener ventaja ganadora. 11... Bd6 12. Nc3 Qh4! 13. g3 Qh3 14. Nd5? Ng4 Parece abrumadora 14. ... Te4, pero aquí pensé que Cg4 debería ser prácticamente ganadora. 15. Bxg4 Bxg4 16. Qb3?? Un error ilustrativo. Aquí hallé la imagen de mate y me dio mucho gusto. ¿Puede ver el remate el lector/lectora?


Pinguin1980 - morsa
Lichess.org, 16/03/2025
Juegan las negras

16... Qxf1+! 17. Kxf1 Bh3+ 18. Kg1 Re1# 0-1

Sacrificar la dama siempre es espectacular. Al recordar el patrón táctico, me doy cuenta que escomo cuando uno se encuentra un viejo amigo. Lo ves de pronto y lo recuerdas. No lo tienes presente en la memoria hasta que aparece. Este es el beneficio de hacer ejercicios de táctica.

Un remate lindo al final del día que me dio cierta felicidad básica.

Friday, October 02, 2020

Un increíble patrón en el que cayó Carlsen


En el Campeonato Mundial de Ajedrez de finales del 2016, entre Carlsen y Karjakin, en la última partida del match (ya en los desempates a ritmos rápidos), el noruego terminó el encuentro con un bonito sacrificio de dama para dar mate. Cuando hizo la jugada que decidía la partida, más de uno aplaudió el ingenio de Carlsen pues la combinación final es llamativa. 


Carlsen - Karjakin

Campeonato Mundial de Ajedrez 2016

Juegan las blancas

En esta posición las blancas jugaron 50. Dh6+!! y Karjakin revisó por un par de segundos la posición, notando que el mate es imposible de detener. Cabe decir que me queda claro que Carlsen vio la combinación, no la ejecutó probablemente mediante la idea de un patrón conocido.

Sin embargo, 37 años antes, Popov vs Novopashin, en el Campeonato de la URSS 1979, realizó una combinación similar, la cual resuelve la partida como en la partida Carlsen vs Karjakin. jugando 32. Dh6+!!, dando mate inevitable.


Popov - Novopashin

Campeonato de la URSS 1979

Juegan las blancas

Los que me conocen saben que he trabajado en los patrones de ajedrez por muchos años ya, y que además, he armado un lenguaje de descripción de configuraciones ganadoras (o ventajosas). Puede verse un resumen de este lenguaje aquí. Mi artículo se publicó aquí.

En este caso, el patrón de la partida de Carlsen-Karjakin, es este: 

D(h6), Tc8, T(f7), Ph5, rh7, pg7, taboo(g6) 1. Dh6+

y el patrón en la partida Popov-Novopashin es este:

D(h6), Tf8, T(b7), Ph4, rh7, pg7, taboo(g6), 1. Dh6+

Prácticamente es el mismo patrón y además se resuelve de la misma manera en ambos casos.

Pero curiosamente, he encontrado una posición muy interesante, de una partida entre Svidler (blancas) y Carlsen, de uno de los tantos torneos que ahora se hacen en línea por la pandemia. Esta es la posición:


Svidler - Carlsen

Torneo Steinitz 2020 (en línea)

Juegan las blancas

¿Qué debe jugar aquí el blanco? Svidler encontró el plan ganador, que en realidad es simplemente llegar al patrón que Carlsen ya conocía de su partida contra Karjakin.

Aquí Svidler jugó: 47. f4! c3 48. Rxh6+!! con mate imparable. Carlsen abandono.

El patrón podría ser este (después de 47. f4 c3): Tb8, Tg6, taboo (g5), taboo (g6) 1. Txh6+

Aunque no hay damas, el patrón se repite. Aquí la cuestión es ¿Cómo identificar un patrón similar? Porque se resuelve igual que en las partidas Carlsen-Karjakin y Popov-Novopashin pero tiene detalles que lo hacen diferente. ¿Cuál es la esencia del patrón? Quizás ésa es la pregunta que aún no sé cómo contestarla.

Aunque no hay damas, el patrón se repite. Aquí la cuestión es ¿Cómo identificar un patrón similar? Porque se resuelve igual que en las partidas Carlsen-Karjakin y Popov-Novopashin pero tiene detalles que lo hacen diferente. ¿Cuál es la esencia del patrón? Quizás ésa es la pregunta que aún no sé cómo contestarla.

Wednesday, May 27, 2020

35 veces más rápido



Para la tesis de doctorado he escrito un programa que busca los patrones ajedrecísticos de acuerdo al lenguaje de descripción que definimos en este trabajo, y del cual he hablado ya muchas veces. El software -escrito en Delphi- permite buscar un patrón por segundo en toda una partida, en promedio. Desde luego, si es una partida de 20 movimientos la búsqueda tarda incluso menos. Si es una partida larga, 60 o más movimientos, probablemente la búsqueda del patrón se haga en un par de segundos.

Por supuesto que esta velocidad de proceso es muy lenta en términos de la velocidad de la computadora, aunque para los seres humanos usar un segundo por partida es extremadamente rápido sin considerar siquiera una remota posibilidad de poderlo hacer. De hecho, esto fue uno de los puntos en donde los revisores de mi artículo pusieron algunos peros. Tal vez los convencí indicando que el programa escrito buscaba ser una prueba del concepto investigado, es decir, el uso de patrones, y entonces terminaron por conceder que era un argumento razonable.

Pero desde luego que tardar un segundo por partida para hallar un patrón es lento. Y de hecho, llevaba ya tiempo dándole vueltas al problema. Si vemos los manejadores de partidas, como Chessbase, pueden hacer búsquedas -de posiciones, no patrones- en tiempos notables, por ejemplo, buscar una posición determinada puede llevarle unos 3 minutos en un conjunto de 7 millones de partidas. Y la pregunta es ¿cómo lo hace? Para poder acceder a estas velocidades hay que crear bases de datos de las partidas y manejarlas así. Por ejemplo, Chessbase tiene una serie de archivos de índice para esta tarea y es una de las explicaciones por las cuales sus búsquedas son más rápidas.

¿Sería la única alternativa? Decidí investigar una idea que tiene que ver con las búsquedas regulares, que además, ya he planteado antes en el blog. Entonces me di a la tarea de hacer un programa que mostrara la bondad de usar búsquedas regulares. En este caso el asunto sería de la siguiente manera: El patrón sería una cadena de caracteres, una cadena Forsyth (ver el articulo al que hice referencia para entender de lo que hablo) y cada partida sería una colección de cadenas de caracteres (posiciones) en formato Forsyth. Lo que tendría que hacer es ir recorriendo mi listado de posiciones y ver si pudiesen coincidir con la posición que define el patrón.

En las búsquedas regulares se usan "wildcards", comodines, que indican diferentes conceptos de búsqueda. Por ejemplo, el "?" significa que podemos poner cualquier caracter o símbolo en esa posición. Otro muy usado es "*", que generaliza la búsqueda a muchos caracteres o símbolos, sin importar cuáles sean estos. Por ejemplo, puedo buscar la posición: "???????k" o bien "*k". En la primera, busco siete símbolos pero el octavo debe ser una "k". En el segundo caso, puede haber un número, el que sea, de símbolos, antes de la "k". Desde luego que debe usarse cada símbolo considerando lo que tengamos en mente.

rnbqkbnr
pppppppp
11111111
11111111

11111111
11111111
PPPPPPPP  = 

rnbqkbnrpppppppp/11111111/11111111/11111111/11111111/PPPPPPPP/RNBQKBNR1111111111111111PPPPPPPPRNBQKBNR

Podemos quitar los "/" y tendremos:

rnbqkbnrpppppppp11111111111111111111111111111111PPPPPPPPRNBQKBNR

Ahora bien, supongamos que tengo el patrón del sacrificio griego:



111111r1
111111pp
111111X1
1111PX11
1111X111
111A1C11
11111111
111D1111

Esto es equivalente a la cadena de símbolos:

111111r1111111pp111111X11111PX111111X111111A1C1111111111111D1111

Las X son casillas que no deben estar ocupadas por ninguna pieza o peón en el momento de definir el patrón.

Si yo quiero buscar esta posición, lo que debo poner es:

??????k???????pp??????1?????P1??????1??????B?N?????????????Q????

Donde los escaques vacíos se ponen con "1".

El siguiente paso es poner una partida, jugada a jugada, en formato Forsyth, es decir, en este formato en donde se ve la partida, movimiento con movimiento como una cadena de caracteres. Por ejemplo, esta es una partida de ajedrez completa en formato Forsyth:

rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1
rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2
rnbqkbnr/pp1ppppp/8/2p5/4P3/2P5/PP1P1PPP/RNBQKBNR b KQkq - 0 2
rnbqkbnr/pp1p1ppp/8/2p1p3/4P3/2P5/PP1P1PPP/RNBQKBNR w KQkq - 0 3
rnbqkbnr/pp1p1ppp/8/2p1p3/4PP2/2P5/PP1P2PP/RNBQKBNR b KQkq - 0 3
rnbqkbnr/pp3ppp/3p4/2p1p3/4PP2/2P5/PP1P2PP/RNBQKBNR w KQkq - 0 4
rnbqkbnr/pp3ppp/3p4/2p1p3/4PP2/2P2N2/PP1P2PP/RNBQKB1R b KQkq - 1 4
rnbqkbnr/pp3ppp/3p4/2p5/4Pp2/2P2N2/PP1P2PP/RNBQKB1R w KQkq - 0 5
rnbqkbnr/pp3ppp/3p4/2p5/3PPp2/2P2N2/PP4PP/RNBQKB1R b KQkq - 0 5
rnbqkb1r/pp3ppp/3p1n2/2p5/3PPp2/2P2N2/PP4PP/RNBQKB1R w KQkq - 1 6
rnbqkb1r/pp3ppp/3p1n2/2p5/3PPp2/2PB1N2/PP4PP/RNBQK2R b KQkq - 2 6
rnbqk2r/pp2bppp/3p1n2/2p5/3PPp2/2PB1N2/PP4PP/RNBQK2R w KQkq - 3 7
rnbqk2r/pp2bppp/3p1n2/2p5/3PPB2/2PB1N2/PP4PP/RN1QK2R b KQkq - 0 7
rnbq1rk1/pp2bppp/3p1n2/2p5/3PPB2/2PB1N2/PP4PP/RN1QK2R w KQ - 1 8
rnbq1rk1/pp2bppp/3p1n2/2p5/3PPB2/2PB1N2/PP1N2PP/R2QK2R b KQ - 2 8
r1bq1rk1/pp2bppp/2np1n2/2p5/3PPB2/2PB1N2/PP1N2PP/R2QK2R w KQ - 3 9
r1bq1rk1/pp2bppp/2np1n2/2p5/3PPB2/2PB1N2/PP1N2PP/R2Q1RK1 b - - 4 9
r2q1rk1/pp2bppp/2np1n2/2p5/3PPBb1/2PB1N2/PP1N2PP/R2Q1RK1 w - - 5 10
r2q1rk1/pp2bppp/2np1n2/2p1P3/3P1Bb1/2PB1N2/PP1N2PP/R2Q1RK1 b - - 0 10
r2q1rk1/pp2bppp/2n2n2/2p1p3/3P1Bb1/2PB1N2/PP1N2PP/R2Q1RK1 w - - 0 11
r2q1rk1/pp2bppp/2n2n2/2p1P3/5Bb1/2PB1N2/PP1N2PP/R2Q1RK1 b - - 0 11
r2q1rk1/pp2bppp/2n5/2p1P2n/5Bb1/2PB1N2/PP1N2PP/R2Q1RK1 w - - 1 12
r2q1rk1/pp2bppB/2n5/2p1P2n/5Bb1/2P2N2/PP1N2PP/R2Q1RK1 b - - 0 12
r2q1r2/pp2bppk/2n5/2p1P2n/5Bb1/2P2N2/PP1N2PP/R2Q1RK1 w - - 0 13
r2q1r2/pp2bppk/2n5/2p1P1Nn/5Bb1/2P5/PP1N2PP/R2Q1RK1 b - - 1 13
r2q1r2/pp3ppk/2n5/2p1P1bn/5Bb1/2P5/PP1N2PP/R2Q1RK1 w - - 0 14
r2q1r2/pp3ppk/2n5/2p1P1bn/5BQ1/2P5/PP1N2PP/R4RK1 b - - 0 14
r2q1r2/pp3ppk/2n5/2p1P1b1/5nQ1/2P5/PP1N2PP/R4RK1 w - - 0 15
r2q1r2/pp3ppk/2n5/2p1P1b1/4NnQ1/2P5/PP4PP/R4RK1 b - - 1 15
r2q1r2/pp3ppk/2n1n3/2p1P1b1/4N1Q1/2P5/PP4PP/R4RK1 w - - 2 16
r2q1r2/pp3ppk/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/R4RK1 b - - 3 16
r2q1rk1/pp3pp1/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/R4RK1 w - - 4 17
r2q1rk1/pp3pp1/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/3R1RK1 b - - 5 17
r4rk1/pp2qpp1/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/3R1RK1 w - - 6 18
r4rk1/pp1Rqpp1/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/5RK1 b - - 7 18
r4rk1/pp1q1pp1/2n1n3/2p1P1bQ/4N3/2P5/PP4PP/5RK1 w - - 0 19
r4rk1/pp1q1pp1/2n1nN2/2p1P1bQ/8/2P5/PP4PP/5RK1 b - - 1 19
r4rk1/pp1q1p2/2n1np2/2p1P1bQ/8/2P5/PP4PP/5RK1 w - - 0 20
r4rk1/pp1q1p2/2n1nR2/2p1P1bQ/8/2P5/PP4PP/6K1 b - - 0 20

Así, buscar posiciones se reduce a hacer una búsqueda regular en las cadenas de caracteres. La pregunta que me hacía es qué tan rápido sería.

Los programas de mi tesis están todos escritos en Delphi, porque tengo una serie dee bibliotecas que ya me hacen la tarea de dibujar los tableros de ajedrez gráficos, el movimiento de las piezas, etcétera. Entonces, lo que estaba necesitando era una biblioteca que hiciese búsquedas regulares. Hallé una rutina que usaba los comodines "*" y "?", la cual se discutía en este sitio. La copié y la implementé.



Entonces hice mi primera prueba y encontré que el software tardaba 32 segundos analizando 1030 partidas. Esto significó buscar el patrón en aproximadamente unas 32 partidas por segundo, lo que es equivalente a 32 veces más rápido que en el software de patrones original de patrones.

Pero recordé entonces que tenían en otro paquete una biblioteca de búsquedas llamada hyperstrings, la cual estaba escrita en buena parte en ensamblador, buscando ser muy rápida. Hurgué en mi respaldo (porque dicha biblioteca ya no está accesible ahora), y entonces la puse en mi sistema. En este caso el sistema tardó ¡19 segundos!, lo que significa 54 partidas analizadas por segundo, lo que ya me gusta más y que es casi el doble que con la primera rutina en Delphi.

Tomando en cuenta esto último, si el sistema puede buscar un patrón a una velocidad de 54 partidas por segundo, en 48 horas (dos días), podría hacer la búsqueda en unas 9 millones de partidas (la Megabase 2020 contiene menos de 8.5 millones de partidas). Originalmente había pensado que este análisis me llevaría entre 3 y 6 meses sin apagar la computadora.

Cabe señalar que para poder usar mi programa de búsqueda de patrones a través de posiciones Forsyth (FEN), se necesita pasar todas las partidas del archivo PGN (portable game notation) a Forsyth. GigaChess era mi esfuerzo en software para ello, pero hay dificultades, y esto tiene que ver con el sistema operativo, el cual por la propia interfaz gráfica es demasiado lento (véase https://la-morsa.blogspot.com/2019/08/un-misterio-sin-resolver.html).

Entonces se me ocurrió que ya alguien debía haber hecho esta tarea en Internet y sí, hallé este sitio: http://chessbrigade.com/pgnviewer/pgn2fen.html, pero solamente puede hacer la transformación de partida por partida. Sería interesante poder transformar todas las partidas en un archivo PGN. La solución la encontré aquí: https://queenalice.com/topic.php?id=18185, la cual transforma muy rápidamente un archivo de partidas en formato PGN a FEN (esto lo hace desde la consola porque es un programa de DOS). Cabe decir que acabo de hallar otro que aparentemente lo hace en Windows, pero no lo he revisado aún (https://www.bluechillies.com/details/8077.html).

En resumen, si se tiene ya un archivo PGN en formato FEN, mi software puede hacer la búsqueda de patrones unas 50 veces más rápidamente que con el programa original de patrones que había escrito. Y desde luego, para que sea útil, no solamente debe decirme que halló una o varias posiciones donde se da al patrón, si no que debe indicar en qué partidas ocurrió el patrón que estamos buscando. Ahora estoy trabajando sobre eso que ya me parece algo relativamente sencillo.

Seguiremos informando. Una vez que tenga todo funcionando, pondré mi software a disposición de quien le interese.

Sunday, June 04, 2017

¿Por qué funciona el lenguaje de patrones de ajedrez?



En este último par de años he trabajado intensivamente sobre la idea del lenguaje de patrones de ajedrez, del cual ya he hablado aquí en este blog. Lo que anima la idea en general es que la descripción es muy parecida a la que hacen los ajedrecistas en sus partidas.

Es común escuchar a un jugador, platicándonos de su partida, algo como esto: "Llevo blancas. Imagina que tengo un caballo atacando f7 pero además, que puedo dar jaque con la dama en a4". Estos datos son insuficientes en general para describir alguna posición, pero nos dice que la dama blanca probablemente está en d1, c2 o b3 aunque por la descripción del jugador no podemos asegurar esto. Sin embargo, cierta experiencia nos dice que en general, un jaque de una dama en a4 implica que la dama está en alguna de las casillas mencionadas.

Igualmente, decir que un caballo ataca la casilla f7 puede significar que el caballo en cuestión está en g5 o e5 o quizás (menos probable), en d6. Así, podemos imaginar más o menos la situación que nos está planteando este jugador. De nuevo, no tenemos certeza al respecto de la posición pero evidentemente hay muchos "tips" que nos pueden ayudarnos a hacernos una imagen mental.

Curiosamente, la idea de que los ajedrecistas poseen mente fotográfica y que recuerdan posiciones como si fuesen diapositivas o instantáneas en imágenes, ya fue descartada por Adrian de Groot, psicólogo holandés y fuerte jugador, que mostró que lo que realmente recuerdan los jugadores son las relaciones entre las piezas propias y enemigas más que en una posición específica como si fuese una foto.

Así, si le ponemos a alguien esta posición:



tal vez, después de algunas semanas, si le pedimos al ajedrecista que recuerde esta posición, probablemente no pueda hacerlo exactamente, pero quizás nos diga: no sé exactamente dónde estaba este alfil, pero podría haber estado en cualquier casilla de esta diagonal.


La descripción del patrón del alfil es simplemente A(ph7) (el alfil blanco ataca al peón negro en h7). ¿Dónde está el alfil realmente? Esto no es relevante. Lo que sí importa es qué casilla o peón ataca.

Y en ese sentido, el lenguaje de patrones funciona porque es equivalente a la descripción que hacemos los jugadores de nuestras posiciones en el tablero. Y aunque parece un lenguaje poco preciso, lo es sólo en apariencia. En realidad es muy preciso para describir patrones en general.

Por ejemplo, en la siguiente figura pueden verse tres tableros, cuyo patrón es equivalente en los tres. Me parece notable que el mismo patrón describa estas tres posiciones (y podría describir muchas otras más) de manera perfecta.



Por esto creo que el camino es el correcto, porque la representación es adecuada y funcional y además, porque es breve pero dice lo que tiene que decir. Realmente me tiene contento esta idea.

Tuesday, December 20, 2016

Más sobre patrones en ajedrez



En el pasado Campeonato Mundial de Ajedrez, Carlsen batió en las partidas rápidas a Sergey Karjakin, el retador, el cual no parecía en el papel tener muchas chances frente al noruego. Vamos, hasta Kasparov dijo que el match sería de un solo lado a favor de Carlsen, pero el ruso se ve que se preparó muy bien y de pronto hasta tuvo chances de ganar el título mundial.

La última partida de las primeras 12 pactadas a tiempos clásicos, ajedrez lento pues, fue para los espectadores una burla, pues los dos ajedrecistas jugaron una línea teórica y pactaron el empate sin que francamente hubiese lucha. Todo pues se decidiría en 4 partidas rápidas a 25 minutos y en caso de persistir el empate irían a partidas de 5 minutos. Pero no hubo necesidad: Carlsen ganó con autoridad 3-1 y mantuvo su cetro mundial. Lo interesante es que en la cuarta partida Magnus Carlsen liquidó al adversario con 50. Dh6+!! y Karjakin concedió que debía rendirse porque sería mate en la siguiente jugada no importando con qué pieza capturara la dama. La posición final fue entonces ésta:


Carlsen - Karjakin 
Campeonato Mundial, Nueva York 2016
Juegan las blancas

Como decíamos, en esta posición Magnus jugó 50. Dh6+!! y si 50. ... Rxh6 51. Th8#; a 50. ... gxh6 51. Txf7#

Magnus Carlsen terminó con este lindo sacrificio y la décima segunda partida del match tan criticada pasó al olvido. Ahora todos alababan el gran juego combinativo del campeón mundial y el haber hallado 50. Dh6+!!


Popov - Novopashin
Campeonato URSS 979
Juegan las blancas

Pero 37 años antes este tipo de combinación, este patrón, se jugó en la partida Popov - Novopashin, en el Campeonato de la URSS de 1979. En la siguiente posición (véase diagrama), las blancas culminaron la partida con 32. Dh6+!!, produciéndose una combinación igual: si 32. ... Rxh6 33. Th8# y si 32. ... gxh6 33. Txb7#.

La realidad es que ambas combinaciones se basan en el mismo patrón. Si usamos el lenguaje definido para patrones que estoy trabajando en mi tesis ahora (ver aquí  y aquí), podemos darnos cuenta que los elementos se cumplen:

Carlsen - Karjakin, Nueva York, 2016: D(h6), T(c8), T(f5), P(h5), r(h7), p(g7)

Popov - Novopashin, URSS, 1979: D(h6), T(f8), T(b7), P(h4), r(h7), p(g7)


Como puede verse, la similitud en ambos patrones muestra que se trata del mismo patrón genérico. Ahora estoy trabajando precisamente en esto. Peter W. Frey ha mencionado que para él hay tres tipos de patrones, A, B y C. (Peter W. Frey (1986). Fuzzy Production Rules in Chess. ICCA Journal, Vol. 9, No. 4). Indica Frey entonces que se pueden considerar patrones que van desde propiedades simples de escaques y piezas que se ocupan de las posiciones donde se encuentran y el control que tienen, hasta un conjunto de características que puede ser interrelacionado de manera más compleja. En el caso de los patrones tipo-A, todas las condiciones se deben cumplir, es decir, todas las características del patrón deben estar presentes. En los patrones de tipo-B, se representan las características que usualmente están presentes pero no siempre y los del tipo-C en donde las características se presentan ocasionalmente.

Monday, August 24, 2015

Un lenguaje para patrones en ajedrez


Hace unos meses escribí un artículo para un congreso que se llevaría a cabo en Holanda. Organizado por la ICCA (que es la Asociación Internacional de Juegos por Computadora), mi colaboración era un análisis de uno de los artículos más relevantes en lo que se refiere a la representación de las posiciones en ajedrez. El artículo, que salió originalmente en el Scientific American a principios de los años setenta del siglo pasado, hablaba de un programa (el US chess program), que jugaba a través del análisis de ciertas instancias, que formaban algo así como patrones.

En el artículo que escribí ponía cuatro posiciones, las cuales se veían diferentes pero las cuatro eran finalmente el mismo patrón. El artículo no fue aceptado pero incluso así, los revisores me mandaron los "peros" que hallaron al mismo. Uno de los argumentos era, ¿cómo puedes caracterizar las cuatro posiciones que identifican el mismo patrón? Buena pregunta. En el seminario del IIMAS, en donde hago el doctorado, presenté mis reflexiones sobre el artículo que escribí y los doctores Jorge Luis Ortega Arjona y Héctor Benítez volvieron a hacer la misma pregunta. Más aún, el Dr. Ortega iba un poco más allá cuando en alguna de nuestras sesiones semanales de avance de la tesis me preguntaba: ¿Cómo puedes generalizar estos patrones (y no sólo para el ajedrez, sino para los juegos de suma cero? De nuevo buena pregunta a la cual no tenía contestación.

Pues bien, me puse a tratar de entender cómo podía representar las posiciones en ajedrez y descubrí que quizás un lenguaje que inicia en los grafos podría ser la solución. La idea no es absolutamente mía y hay un par de referencias al respecto (ver bibliografía). Sin embargo, de pronto hallé que podía representar las posiciones que había puesto en mi artículo de forma tal que eran las cuatro identificables con el mismo patrón. Asombroso. Pero más aún el notar que la idea en realidad no es nada complicada. Funciona así.

Todo comienza con los elementos del ajedrez más básicos: el ataque y la defensa. Los ajedrecistas vemos cuando nos atacan una pieza o cuando nosotros defendemos alguna o incluso, cuando somos nosotros los que atacamos. En general, lo que decimos es que una pieza ataca a un peón, sin necesariamente decir en qué casilla está. Esto, curiosamente, es como los jugadores recuerdan posiciones. Ya De Groot halló que el ajedrecista no ve posiciones como si fuesen fotografías, sino que el cerebro las codifica como un conjunto de relaciones entre las piezas. Esta es la razón por la cual cuando De Groot puso posiciones -sin lógica ajedrecística- para que los jugadores de su experimento las recordaran, estos tuvieron las mismas dificultades que tenían los aficionados. Por una parte entonces, se elimina el mito de que el ajedrecista tiene una memoria fotográfica del tablero y por otro, se confirma que de alguna manera el jugador recuerda las relaciones que hay entre las piezas en una posición dada.

Por ejemplo, consideremos un alfil blanco en c2 que ataca un peón negro en h7 (véase diagrama). Un ajedrecista recordará esta posición no por la posición de las piezas en particular, sino por la relación que hay entre el alfil blanco y el ataque al peón negro en h7. De hecho, si le pedimos al ajedrecista que nos reproduzca la posición del diagrama (meses después de hacer el experimento), quizás el jugador simplemente se acuerde del ataque pero no pueda decidir si el alfil está en b1, c2 o d3, por ejemplo.


Un alfil blanco que ataca a un peón en h7

Así entonces, hablamos de relaciones entre las piezas y el único modelo al respecto, como ya dijimos, es ataque/defensa. Considerando esto, pensemos en definir que una pieza A ataca a una pieza B, Podemos representar eso como:

P1 P2

en donde P1 es la pieza 1 y P2 es la pieza 2. Si es un ataque es claro que P1 es de un color y P2 es del color contrario. Si son del mismo color hablamos de una defensa entre ambas piezas. Ahora consideremos la siguiente posición (ver siguiente diagrama):


La dama blanca ataca el peón negro de f7. 
La torre blanca en f1 ataca (con rayos X) el peón de f7

En este caso, tenemos que la Dama blanca (P1), ataca el peón de f7 (P2), pero también tenemos que la Torre en f1 (P3) ataca también el peón negro en f7. Podemos pensar que el ataque de la torre blanca es como en rayos X, pues pasa por sobre la dama, que se encuentra en f3. Si ponemos la dama blanca en h5, podemos ver con flechas los ataques de ambas piezas sin necesidad de pensar en este ataque como de rayos X.

En términos del lenguaje de patrones, podríamos poner una posición que bien podría ser equivalente:



Pero pensemos también que las piezas no atacan/defienden necesariamente a otras piezas. Podríamos pensar que las piezas atacan o defienden casillas. Por ejemplo, un peón blanco en h3 defiende la casilla g4. De esta manera podemos escribir:


P1C1

Donde P1 es la pieza 1 y C1 es una casilla en particular. En el caso del diagrama podría ponerse como P(h3)g4 o Ph3-g4, por ejemplo.

Así pues, en primera instancia estos son los bloques de un lenguaje de patrones para describir posiciones de ajedrez.

Con esto en mente, ¿Cómo podrían describirse las siguientes posiciones, en donde todas se comparte el mismo patrón? Veamos los siguientes ejemplos y saquemos al final conclusiones:

Posición 1:


Díaz Lombardo, I - López, M
Juegan las negras

La posición puede describirse (letras mayúsculas son piezas blancas, letras minúsculas son piezas negras): 

d(Pf2)
t(Pf2)
t(c1)

Posición 2:


McNab - Mullen
Juegan las blancas

D(pf7)
T(pf7)
T(a8)

Posición 3:


Atasik - Ruck
Juegan las blancas

D(pf7)
T(pf7)
T(h8)


Con estos tres primeros ejemplos basta. Todos se expresan de la misma manera. La Dama y la Torre (blancas o negras, sea el caso), atacan el peón de f7 (o f2) y la torre restante puede entrar en la octava fila del rival. En terminos generales debe estar claro que se trata de un patrón al menos similar, muy similar, a pesar de que no necesariamente las piezas están en los mismos lugares.

Pero observemos estos otros ejemplos:

Posición 4: 


Lasker-Bauer
Juegan las blancas

D(h5) //no importa si hay o no una pieza en esa casilla
A(ph7)
A(pg7)
T(f3)

Posición 5:


Polgar, Judit - Karpov, A
Juegan las blancas

D(h5)
A(ph7)
A(pg7)
T(h3)

Posición 6: 


Miles - Browne
Juegan las blancas

D(h5)
A(ph7)
A(pg7)
T(c3)

Posición 7:


Nimzowitsch - Tarrasch
Juegan las negras

d(h4)
a(Ph2)
a(Pg2)
t(d5)

Si se observa con cuidado, veremos que estamos hablando del mismo patrón. En esencia es prácticamente el mismo. 

Cabe decir que esta es una primera aproximación. Es claro que la descripción no es estrictamente la misma para las posiciones, pero las semejanzas y similitudes son evidentes para cualquier ajedrecista. Por ello, hay que señalar que estamos hablando de un lenguaje que debe lidiar (o al menos intentar hacerlo), con posiciones que no necesariamente son iguales, sino que son similares. En otras palabras, tienen un margen difuso.

Dentro de poco hablaré de cómo extender el lenguaje para que sea más dinámico. Por el momento, es claro que solamente estamos describiendo las posiciones estáticamente, pero evidentemente, debe haber un componente dinámico, es decir, las jugadas por hacer.

Bibliografía:

Learning to play chess selectively by acquiring move patterns
Lev Finkelstein and Shaul Markovitch
ICCA 1998

Adaptive Pattern Oriented Chess
Robert Levinson y Richard Snyder
AAAI-91 Proceedings 1991

Thursday, July 11, 2013

Miles de "amigos" en el ajedrez



Quien quiera mejorar en ajedrez tiene que estudiar. Hay muchas razones para ello, pero una primera razón es que no existe juego que tenga este antecedente que son las partidas antes jugadas. Podemos así ver qué hicieron los maestros del pasado y hallar en su ingenio jugadas que hoy en día diríamos que son rutinarias incluso. Pongamos, por ejemplo, una famosa partida de Lasker:

Lasker, Emanuel - Bauer, Johann Hermann
Amsterdam 1889

1. f4 d5 2. e3 Nf6 3. b3 e6 4. Bb2 Be7 5. Bd3 b6 6. Nf3 Bb7 7. Nc3 Nbd7 8. O-O O-O 9. Ne2 c5 10. Ng3 Qc7 11. Ne5 Nxe5 12. Bxe5 Qc6 13. Qe2 a6 14. Nh5 Nxh5 


Juegan las blancas

15. Bxh7+! Kxh7 16. Qxh5+ Kg8 17. Bxg7!! Kxg7 18. Qg4+ Kh7 19. Rf3 e5 20. Rh3+ Qh6 21. Rxh6+ Kxh6  22. Qd7! Bf6 23. Qxb7 Kg7 24. Rf1 Rab8 25. Qd7 Rfd8 26. Qg4+ Kf8 27. fxe5 Bg7 28. e6 Rb7 29. Qg6 f6 30. Rxf6+ Bxf6 31. Qxf6+ Ke8 32. Qh8+ Ke7 33. Qg7+ Kxe6 34. Qxb7 Rd6 35. Qxa6 d4 36. exd4 cxd4 37. h4 d3 38. Qxd3 1-0

Lasker demostró el poder de una interesante combinación que es ya un modelito que todo estudiante de ajedrez ha visto o debería haber visto. El excampeón del mundo halló la combinación en el tablero y con el tiempo la idea se volvió típica, lo que probablemente se habrá repetido decenas de veces a través de los años.

Pues bien, Judit Polgar le aplicó esta sencilla combinación a nada más y nada menos que a Anatoly Karpov, uno de los jugadores más fuertes del mundo (aunque desde luego, ya no en el 2003, cuando se jugó esta partida):

Polgar, Judit - Karpov, Anatoly
Hoogeveen Essent Crown

1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Be7 7. O-O Nc6 8. c4 Nb4 9. Be2 O-O 10. a3 Nc6 11. cxd5 Qxd5 12. Nc3 Nxc3 13. bxc3 Qd6 $146 14. Rb1 b6 15. Re1 Be6 16. Bd3 Rae8 17. Rb5! Na5 18. Rbe5 Nc6 19. R5e2 Bd7 20. d5 Na5 21. Ne5 Bf6 22. Bf4! Bxe5 23. Bxe5 Qxa3 24. Re3! Qc5??

Juegan las blancas

Obsérvese como Judit ejecuta la combinación y Karpov no espera a que le hagan toda la maniobra ganadora. Se rinde de inmediato: 25. Bxh7+! Kxh7 26. Qh5+ 1-0


El asunto es que cuando uno juega al ajedrez, muchas veces encuentra posiciones desconocidas y es por ello que en la mayoría de los casos hay que reflexionar sobre qué hacer. El ajedrecista debe valorar la posición: quién tiene ventaja, qué estructura de peones se ha dado en el tablero, quién está mejor, hay que defenderse o atacar, o quizás hacer una jugada de espera, etcétera. Los ajedrecistas pasan así muchos minutos de la partida cavilando sobre la posición para tratar de desentrañar su naturaleza y así hallar la mejor jugada.

Si uno estudia muchos ejercicios de táctica ajedrecística, de donde además, hay infinidad de libros de esta clase de ejercicios de juegan blancas y ganan, juegan negras y empatan, etcétera, poco a poco la mente del jugador irá armando una serie de patrones típicos, en donde el cerebro irá acomodando los elementos que generan una combinación determinada. Hacer muchos ejercicios de esta naturaleza sin duda tiene la gran virtud de que en caso de que aparezcan los elementos arquetípicos en el tablero, la combinación podrá ejecutarse.

Por ejemplo, en el caso de la partida entre Polgar y Karpov... ¿Alguien cree que Judit halló la combinación en el tablero? Desde luego que no. Judit conocía la partida Lasker-Bauer y entonces recordó los elementos. Vio que eran los mismos que en la partida que estaba jugando y entonces los aplicó, ganando fácilmente.

Para hacer una analogía, digamos que tenemos mil amigos, o diez mil amigos, y nos acordamos de ellos no a todo momento, sino cuando los vemos. Eso es lo que hace un ajedrecista muchas veces cuando hace una combinación: "recuerda la cara de su amigo y puede decirle como se llama", para seguir la analogía, lo que significa que "ve que los elementos en el tablero, la posición de las piezas, están de acuerdo para generar una combinación particular y entonces la ejecuta".

Se dice que un gran maestro poseé unos 50,000 patrones, posiciones típicas en donde le ayudan a orientarse en una partida. Son como sus amigos, que cuando los ve, sonrié y los saluda... ¿No está muy claro lo que hay que hacer entonces para mejorar?


Wednesday, July 11, 2012

La táctica, indispensable en el ajedrez


Quienes no tienen mucho contacto con el ajedrez muchas veces no entienden las dificultades que el juego tiene. Creen que si tuvieran un poco de tiempo podrían jugar un buen ajedrez y porqué no, competir en eventos internacionales. Desafortunadamente cuando se embarcan en el estudio del juego ciencia se dan cuenta que su percepción era simplista y al final de cuentas, totalmente absurda. El ajedrez es tan, pero tan difícil, que se necesitan muchos años, una vida quizás, para llegar más o menos a dominarlo. Por ello, estos jugadores novatos muchas veces se decepcionan. Y la razón es que –por una parte– no tienen idea de qué o cómo estudiar. El ajedrez es tan vasto que a veces es difícil saber por donde comenzar.

No obstante esto, con trabajo metódico se puede llegar a jugar bien. No será campeón mundial en un par de años, sin duda, pero es evidente que si se estudia el amplísimo y rico legado de la historia ajedrecística universal, podremos entender el juego ciencia y fascinarnos por su complejidad inimaginable.

Una primera manera de empezar es por los libros de táctica, aquellos que contienen cientos, a veces miles, de diagramas con posiciones al mejor estilo: “juegan as blancas y ganan”, “juegan las negras y empatan”, etcétera. En esas posiciones, casi siempre sacadas de partidas de torneo, el lector debe hallar la manera en como uno u otro bando resolvió la posición a su favor. Quizás el ejercicio a veces trate de encontrar un angustioso empate a través de un recurso muy escondido. La idea es pues, que el estudiante de ajedrez vaya haciendo un acervo mental de las posiciones donde se encuentran los elementos que dan vida a las jugadas brillantes, a las combinaciones que terminan en un resultado victorioso.

Cabe decir que el cerebro es un ente por demás particular: si se le entrena, éste responde. Aunque el juego ciencia es muy complejo, las combinaciones, los motivos tácticos pueden hallarse en muchísimas posiciones. Estos motivos incluso ya se han clasificado y muchos libros de ajedrez tiene posiciones de táctica categorizadas por temas, para así hacer incluso más fácil el aprendizaje. Por ello mismo, es importante que los ajedrecistas bisoños hagan muchos ejercicios tácticos, para alimentar con patrones de táctica determinados, una y otra vez, al cerebro. A la larga, cuando uno encuentre en las partidas propias una combinación, la verá como producto de haber ejercitado su cerebro con miles de posiciones y esto redituará en que hallará cómo ganar y hacerse de una victoria en el torneo que esté jugando.

Desde luego que esto no es lo único que debe hacerse. Hay que trabajar muy seriamente en finales, aperturas, análisis de las posiciones, los nervios, el ejercicio, etcétera. Todo ello más una actitud motivante para jugar al ajedrez lo pueden hacer de usted un buen jugador.

Es importante aclarar que esto no es una labor de una tarde, o de una semana, o de un año. Puede llevarle muchos años llegar a jugar “decentemente”. Como ejemplo, a mí me llevó unos 25 años convertirme en Maestro de la Federación Internacional de Ajedrez. Éste es el primer peldaño en el arduo camino a la gran maestría y por qué no, al campeonato mundial. A este último escalón llegan muy pocos, pero eso no significa que haya que decepcionarse. El ajedrez puede disfrutarse y mucho, sobre todo cuando se entiende, cuando se sabe qué está pasando en el tablero. Mientras más estudie, créame, mayor será el gozo.

Thursday, June 07, 2012

Nada nuevo bajo el sol


El ajedrez es un juego único y no sólo por su complejidad. Es probablemente el único juego de mesa que tiene tal cantidad gigantesca de bibliografía y en dodne además, se tienen registrados los encuentros y así se pueden generar referentes de las partidas. Por ello sabemos cuando una jugada nunca antes se había hecho, pues si no está consignada en las bases de aprtidas, en la bibliografía del ajedrez en el mundo, entonces asumimos que es una "novedad teórica", aunque muchas de ellas no resulten tan exitosas. Hoy en día hay tanta información que a veces las novedades teóricas empiezan más allá de la jugada 25. Es francamente notable cuanto se ha jugado el ajedrez y cuanto se ha analizado.

En lo que se refiere al medio juego, es evidente que las combinaciones en ajedrez se repiten. Ya los seres humanos nos hemos dado cuenta precisamente de que hay temas muy claros: clavadas, diversión, doble jaque, jaque al descubierto, jaque doble al descubierto, etcétera. Y tenemos libros de autores que han coleccionado posiciones donde los temas combinativos se repiten (por ejemplo, 1001 Combinaciones y Sacrificios Brillantes, de Fed Reinfeld, Ed. Bruguera), en el cual se ven posiciones desde las más simples hasta las más complejas. Este tipo de libros de ejercicios de táctica es una obligación para cualquier jugador que quiera progresar. No podemos pretender hallar por nosotros mismos todas las posibles combinaciones. Es como pensar que voy a llegar a definir por mí mismo la ley de la gravitaicón de Newton, o las leyes de la termodinámica. Si otros ya han pensado estas cosas, pues saquemos provecho de ellos, además de necesitar menos tiempo para comprender lo que en muchos casos llevo años de sesudos trabajos.

Y esto viene a cuento porque estuve viendo la partida entre Lasker vs Bauer, de 1889, en donde el que fuera Campeón Mundial de Ajedrez hiciese una maniobra que ahora resulta casi elemental de ejecutar -si los elementos en el tablero están planteados. Observémosla:


Lasker, Emanuel - Bauer, Johann Hermann
Amsterdam 1889

1. f4 d5 2. e3 Nf6 3. b3 e6 4. Bb2 Be7 5. Bd3 b6 6. Nf3 Bb7 7. Nc3 Nbd7 8. O-O O-O 9. Ne2 c5 10. Ng3 Qc7 11. Ne5 Nxe5 12. Bxe5 Qc6 13. Qe2 a6 Aquí Lasker juega 14. Nh5 Nxh5 

Lasker - Bauer
Amsterdam 1889
Juegan las blancas

15. Bxh7+! Sacrifica el alfil para romper las defensas del negro en el flanco rey 15. ... Kxh7 16. Qxh5+ Kg8 17. Bxg7! y ahora destruye ya totalmente el enroque enemigo. La combinación se puede dar porque si se observa, el negro tiene sus fuerzas lejos de la defensa del rey y entonces, no llegará a rescatar al monarca del furioso ataque concebido por Lasker 17. ... Kxg7 18. Qg4+ Kh7 19. Rf3 e5 única 20. Rh3+ Qh6 21. Rxh6+ Kxh6 22. Qd7! y las blancas capturarán un alfil. Es claro que esto es parte de la combinación, o mejor dicho, una secuela de las debilidades de la posición negra. Después de esto, Lasker gana con mucha facilidad. 22. ... Bf6 23. Qxb7 Kg7 24. Rf1 Rab8 25. Qd7 Rfd8 26. Qg4+ Kf8 27. fxe5 Bg7 28. e6 Rb7 29. Qg6 f6 30. Rxf6+ Bxf6 31. Qxf6+ Ke8 32. Qh8+ Ke7 33. Qg7+ Kxe6 34. Qxb7 Rd6 35. Qxa6 d4 36. exd4 cxd4 37. h4 d3 38. Qxd3 1-0
Esta combinación, conocida por primera vez gracias a esta partida, ya es un tema común en la táctica ajedrecística, y muchos jugadores probablemente habrán logrado ganar.

Observemos a Judit Polgar, por ejemplo, ejecutar la idea de la partida Lasker-Bauer, frente al excampeón mundial Anatoly Karpov.

Judit Polgar - Anatoli Karpov
7th Essent (Holanda) 2003

1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6 4. Nf3 Nxe4 5. d4 d5 6. Bd3 Be7 7. O-O Nc6 8. c4 Nb4 9. Be2 O-O 10. a3 Nc6 11. cxd5 Qxd5 12. Nc3 Nxc3 13. bxc3 Qd6 14. Rb1 b6 15. Re1 Be6 16. Bd3 Rae8 17. Rb5 Na5 18. Rbe5 Nc6 19. R5e2 Bd7 20. d5 Na5 21. Ne5 Bf6 22. Bf4 Bxe5 23. Bxe5 Qxa3 24. Re3 Qc5 y aquí Judit ve el mismo patrón que Lasker alcanzó a ver en su famosa partida:  

 Polgar, Judit - Karpov, A.
7th Essent (Holanda) 2003
Juegan las blancas

 25. Bxh7+! Kxh7 26. Qh5+ y las negras abandonan sin esperar 27. Bxg7 y mate de inmediato con la torre. 1-0. Hasta Karpov fue víctima de esta simple combinación.


Cabe decir que parte del éxito de la combinación es usar ambos alfiles para romper la defensa de peones del enroque enemigo y después maniobrar rápidamente con la torre para dar el mate en las columnas abiertas.

Una idea similar, aunque no la misma, me ocurrió en 1979, en un torneo en el desaperecido Club Pomona. He aquí la simpática partida:

López, Manuel - Guzmán, Marco
Torneo "Baden Baden" (Club Pomona), 1979

1. d4 Nf6 2. Nf3 d5 3. c4 e6 4. Nc3 c5 5. cxd5 exd5 6. dxc5 Bxc5 7. e3 Nc6 8. Be2 O-O 9. O-O Bf5 10. Qb3 Nb4 11. Nd4 Bxd4 12. Qxb4 Be5 13. Qxb7 Rb8 14. Qxa7 Ng4 15. g3? y aunque la combinación no es idéntica a las dos partidas anteriores, es claro que hay temas en común. 15. ... Nxh2! 16. Kxh2 Qh4+ 17. Kg1 Bxg3 18. fxg3 Qxg3+ 19. Kh1 

López, M - Guzmán, M.
Torneo "Baden Baden" (Club Pomona), 1979
Juegan las negras

19. ... Rb4 20. Rf4?? (única para intentar salvar la partida era 20. e4 Rxe4 21. Bf4 Rxf4 22. Rxf4 Qxf4 23. Rf1 Qh4+ 24. Kg1 d4 25. Rxf5 Qg3+ 26. Kh1 Qh3+ 27. Kg1 dxc3 y las negras tienen ventaja) 20... Bh3 y el mate es imparable. Las blancas abandonaron 0-1.

Así pues, si se estudia la táctica ajedrecística, si se hacen muchos ejercicios sobre las diferentes temáticas combinativas en ajedrez, hallaremos que no hay nada nuevo bajo el sol.

Monday, September 26, 2011

Codificación de conocimiento en ajedrez

En mi búsqueda por tener algo parecido a un lenguaje que describa posiciones e información de ajedrez, he hallado algunos interesantes esfuerzos. Uno de ellos es de Christian "Chrilly" Donninger, el autor del programa Nimzo y además, de Hydra, un monstruo de 32 procesadores que no ha perdido una sola partida oficial contra jugadores humanos. Información sobre este proyecto extraordinario (lamentablemente descontinuado), puede verse aquí.

Donninger escribió todo un lenguaje de programación para dotar a su programa "Nimzo", con conocimiento posicional. Dicho lenguaje se llama Che (hay rumores de una comunidad que le ha agregado funcionalidad y que ahora se llama por ello "Che++") y pretende añadir al motor de juego de Nimzo con conocimiento posicional ajedrecístico codificado.

Por ejemplo, se sabe que en el sistema Colle, la estructura de peones blancos en c3, d4, e3, con el afil blanco en d3, contra los peones negros en c5 y d5 (véase diagrama),


Las negras no deben jugar c4, porque fija la estructura y el rompimiento en e4 (que es uno de los motivos del sistema Colle), es entonces más fuerte. La jugada c4 del negro fue típica por algún tiempo entre los programas de computadora, porque los "engines" de ajedrez suponían que esta jugada limitaba la acción del alfil de d3, pero la experiencia entre grandes maestros ha calificado como mala esa jugada.

Donninger describe su lenguaje Che en un interesante artículo que apareció en la revista especializada en ajedrez por computadora (ICCA) y que puede ser consultado aquí (me tomé la libertad de escanearlo Yo compré dicha revista por el artículo y por lo complicado y difícil de acceder a esta información, la puse disponible a los interesados en el enlace mencionado). Donninger ha hecho un trabajo notable con Che. Su sistema está básicamente orientado como un intérprete de Forth y a decir del autor, cualquiera -con conocimientos del elemental lenguaje Basic- puede aprender a alimentar información ajedrecística en Che. En las referencias de Donninger sobre su artículo, menciona la tesis doctoral sobre un programa para dar consejos sobre posiciones de ajedrez. Hay un artículo que habla de eso, que puede leerse aquí. Se llama Chunking for Experience y realmente habla del mismo problema que estoy tratando de resolver: el de tener una manera de describir vía un lenguaje, las posiciones de ajedrez.

Por su parte, Armando Estrada, buen amigo virtual de este blog, me dio la referencia: "Chess skill in Man and Machine" Editado por Peter W. Frey que explica este tipo de representación. capitulo 3 (paginas 54 a 59). Se publicó en 1977. Sin embargo, de lo que habla Armando es de la representación vía bitboards y no es exactamente lo que ando buscando. Este interesante libro de Peter Frey puede obtenerse aquí.


Che puede conseguirse en el programa comercial Nimzo 8, que vendía hace tiempo Chessbase. en él Donninger menciona que explica cómo usarlo y añadir ese conocimiento a Oracle, el sistema de juego que usa Nimzo 8.


Tengo más información al respecto. A quien le interese, escríbame a morsa@la-morsa.com

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?

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)