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

Monday, February 08, 2021

Patrones posicionales


En estos últimos cuatro años he trabajado intensamente sobre los patrones en ajedrez. Los más sencillos de entender son aquellos que involucran táctica, por ejemplo, el patrón denominado "regalo griego". Este puede verse en la siguiente partida:

Buchkou, Yury - Tsiareshka, Alesia, Vilnius Saltinis open 2013

1. d4 e6 2. Nf3 Nc6 3. e4 Nf6 4. Bd3 Bb4+ 5. c3 Ba5 6. O-O O-O 7. e5 Ne8 



8. Bxh7+ Kxh7 9. Ng5+ Kg8 10. Qh5 f6 11. Qh7# 1-0

Este es un patrón muy conocido y la Megabase registra unas 1030 partidas con este tema. El patrón, de hecho, puede representarse así:



Así, cuando se llega a esta configuración de piezas, el sacrificio en h7 casi se puede hacer automáticamente. Desde luego, nunca está de más revisar las variantes antes de realizarlo.

Los patrones son, pues, configuraciones de piezas y peones que atacan y defienden, de forma que cumplen con ciertas características que se ven una y otra vez, aunque las piezas no se encuentren estrictamente en casillas específicas.

En cambio, los patrones posicionales son más complicados de definir porque no hay maniobras realmente tácticas. En este caso básicamente se desea mejorar la posición.

Veamos un primer ejemplo: se presentó en la partida Botvinnik-Boleslavsky, del Campeonato absoluto de la URSS 1941. 


Juegan las blancas

La última jugada del negro fue 24. ... Qc6 y la pregunta aquí es ¿qué debe jugar el blanco? ¿deberá defender el peón de a4? Botvinnik entendía muy bien el juego posicional y sabía que el control de la columna e, además de la posibilidad de colocar un caballo en e5, le daban la ventaja. Sin embargo, había que deshacerse del caballo de g6 para poder tomar e5 en un momento dado. Entonces, debido a esta circunstancia, el patrón posicional se refleja como desalojar y restringir a la pieza (en este caso el caballo negro), de forma que posicionalmente vaya quedando cada vez más inferior el negro. 

Botvinnik jugó 25. g3! y las negras contestaron con  25. ... Rd6 (En caso de 25... Qxa4 26. h4 Rd6 (26... Rfd8 27. h5 Nf8 28. h6 y el ataque se juega solo, de acuerdo a las notas de Botvinnik) 27. h5! Nh8 28. Nf4) 26. h4 f6 (busca defender la casilla e5) 27. Qf5 Qc8 (y ahora hay que pensar de nuevo. ¿Cómo debe continuar el blanco? Botvinnik encuentra que la entrada a la séptima fila es decisiva) 28. Qxc8 Rxc8 29. h5 Nf8 30. Re7 Rcd8 31. Nf4 R8d7 32. g4 Rxe7 33. Rxe7 g5 34. hxg6 Nxg6 35. Nxg6 hxg6 36. Rb7 Kf8 37. Kf2 Ke8 38. Ke3 g5 39. Kd3 Re6 40. b4 axb4 41. cxb4 Kd8 42. a5 Kc8 43. a6 b5 44. Rxb5 Rxa6 45. Rxd5 Ra1 46. Rc5+ Kb7 47. d5 Rf1 48. Rc4 f5 49. Ke2 1-0

El siguiente ejemplo es de Botvinnik también. La partida se jugó en la Olimpiada de Leipzig 1960, 19 años después que la partida que vimos de Boleslavsky. Aquí juegan las negras. ¿Cómo deben seguir?

Tamburini-Botvinnik (juegan las negras)

Obsérvese primero la posición. Las negras tienen control sobre la columna e. Pueden poner la torre de a7 en e7 para incrementar la presión. Tienen acceso a la casilla e5, en donde pueden colocar un caballo fuerte. El alfil de h8 eswtá por el momento "escondido", pero claramente jugará un papel importante cuando Botvinnik movilice su caballo de f6.

En esta posición el excampeón mundial se percata de la mala ubicación del caballo en g3 y entiende que está ante el mismo patrón que en su partida con Boleslavsky. Por ende, juega: 21. ... h5! Tamburini entonces se da cuenta que hay que mover el alfil para que el caballo no vaya a una posición demasiado pasiva: 22. Bf1 h4 23. Nge2 Nh5! Nótese cómo Botvinnik gana espacio, su posición cada vez es mejor. Nótese también que no ha habido un solo golpe táctico. Normalmente, cuando la posición ya está madura, la táctica llega y decide la partida. Aquí las blancas se equivocaron y perdieron de inmediato: 24. Nf4?? Nxf4 25. Bxf4 Bd4+ 0-1 pues después de 26. Rh1 f4 gana una pieza.





Wednesday, November 22, 2017

Mi artículo de patrones para la Revista Peón de Rey



En estos ya tres años y medio del doctorado, mi tema: "Configuraciones que dan ventaja en los juegos de suma-cero e información perfecta" ya tiene forma y he avanzado poco a poco en la tarea que me he encomendado, el probar que en este tipo de juegos los patrones pueden ser una herramienta importante para desarrollar técnicas para saber quién tiene en definitiva la ventaja.

Los avances son lentos y en ocasiones la paso fatal, porque pasan dos o tres semanas y apenas sale una cuartilla rescatable de todo eso. Aún así, como el otro día le dije al Dr. Fernando Magaña, que me dio electromagnetismo, "estoy disfrutando el doctorado a pesar de las dificultades encontradas". Y es que no es fácil finalmente cumplir con el requisito de hacer una contribución original al conocimiento en un dominio específico.

Como sea, ya he escrito a una revista especializada (y arbitrada), un artículo sobre los patrones en ajedrez, los cuales puedo representar a través de un lenguaje de descripción basado en patrones que en realidad es muy simple. Estoy esperando que los árbitros, es decir, aquellos qu3e están evaluando mi documento, tengan una opinión favorable al respecto.

En el mientras, mandé un artículo a la revista Peón de Rey, del GM Miguel Illescas, al cual tuve la alegría y honor de conocer en los festivales de ajedrez que se han hecho en la UNAM. Cuando le propuse la idea me pidió que le mandara un borrador para considerarlo y le gustó al final de cuentas, por lo cual se publicó el artículo (escrito para ajedrecistas y no para especialistas en cómputo).

Han pasado algunos meses de esto. Pongo aquí el enlace a este artículo para quien se interese por el tema y espero cierta retroalimentación así como críticas al trabajo realizado. El enlace es éste.

Wednesday, June 28, 2017

Patrones en Ajedrez y la Revista Peón de Rey


Hace unos meses me gané una suscripción virtual a la revista de ajedrez española "Peón de Rey", que dirige el GM Migue Illescas. Le escribí para agradecerle el detalle y le pregunté si le interesaría un artículo sobre lo que he estado trabajando en Patrones de Ajedrez. Me contestó indicando que le mandara el borrador, sin compromiso alguno, por si era del interés de los que leen la revista.

Para mi agrado, el artículo le pareció interesante (cosa que debo valorar más viniendo de un gran maestro) y puso a su equipo de maquetistas de la revista a trabajar sobre el documento, que Illescas dejó lo más relevante del mismo, quitando algunas cosas que lo hacían quizás exageradamente largo.

A los pocos días me mandaron el archivo que se publicará en el mes de julio en la mencionada revista y me da gusto comunicarles a mis cuatro lectores que de alguna manera el que Illescas haya considerado la publicación de mi texto habla de la bondad de la idea. Agradezco desde aquí todo el trabajo que han hecho en peón de Rey apra que quede un artículo formidable.

Wednesday, March 29, 2017

Bosquejo de un lenguaje de patrones de ajedrez



Ya antes en este blog (busquen por "patrones de ajedrez") he hablado sobre un lenguaje para describir posiciones de ajedrez, el cual es lo suficientemente genérico para establecer patrones del juego. Después de varios meses de trabajar en esto, creo haber hallado un lenguaje de patrones que bien puede ser útil para expresar posiciones de ajedrez de forma que puedan usarse para cambiar incluso el paradigma de cómo los programas de ajedrez funcionan, quitando el cálculo bestial que hoy en día hacen por un enfoque más humano, basándose en que el ajedrez es un juego en donde intervienen patrones, sin lugar a dudas. De esta manera podrían construirse programas "más humanos".

Introducción al lenguaje de patrones

Definimos el ataque de una pieza a otra como:

Pi(P2)

donde P1 es la pieza del atacante y P2 es la pieza atacada. Si las piezas son del mismo color, hablamos de que P1 defiende a P2, pero si son de diferente color, P1 ataca a P2. Por ejemplo, A(ph7), lo cual significa que un alfil ataca a un peón negro en h7. Por convención las piezas blancas se ponen con su iniciales mayúsculas y las piezas negras con sus iniciales en minúscula.

También podemos decir: A(h7), lo que indica que el alfil blanco ataca la casilla h7. Cabe decir que no es necesario decir en qué casilla está el alfil del blanco. De hecho, en el ejemplo, el alfil podría estar en b1, c2, d3, e4, f5 o g6.

Podemos definir una pieza en una casilla en particular con la notación: Ad3, lo que indica que el alfil blanco está en la casilla d3. Nótese que en este caso no sabemos qué casillas ataca/defiende. Solamente sabemos su posición.

Se ha definido una instrucción: taboo(casilla), indicando que para el defensor, la "casilla" mencionada no está disponible. Por ejemplo, en la partida Carlsen - Karjakin, del Campeonato Mundial 2016 llevado a cabo en Nueva York a fines del año pasado, se llegó a esta posición:


Carlsen - Karjakin
Nueva York 2016
Juegan las blancas

El patrón de esta posición es D(h6), Tc8, T(f7), Ph5, rh7, pg7, taboo(g6). 1. Dh6+

El patrón no sólo describe la posición, sino que también se define al menos la primera jugada que debe hacerse (1. Dh6+). Esto podría ser una manera para hacer un programa en donde los patrones orientaran sobre cuáles son las mejores jugadas en lugar de hacer un cálculo de fuerza bruta.

Pero como ya indicamos antes en este mismo blog, tenemos que en la partida Popov - Novopashin, URSS 1979, se dio la siguiente posición:


Popov - Novopashin
URSS 1979
Juegan las blancas

Cuyo patrón es: D(h6), Tf8, Tb1, Ph4, rh7, pg7, taboo(g6). 1. Dh6+

Nótese que la instrucción taboo(g6) hace que la casilla g6 no esté disponible a las negras. Es intereante cómo los dos patrones se ven muy similares.

Otra idea interesante es la de los conectores lógicos. Un patrón en ajedrez consiste en definir las piezas en ciertas casillas o definiendo qué ataca o qué defiende. El patrón puede considerarse como un conjunto de instrucciones separadas por comas. Definimos a la "," como el AND lógico e introducimos el otro conector lógico, el OR, cuyo símbolo será ";" como en la mejor tradición del lenguaje Prolog. Sin embargo, en lugar de usar los símbolos, quien defina un patrón puede usar indistintamente "AND" o "," y "OR" o ";".

Por ejemplo, en la partida Pestalozzi - Duhm, Berna 1990, se llegó a  la siguiente posición:


Pestalozzi - Duhm, 
Berna 1990
Juegan la blancas

Aquí tenemos el sacrificio griego, el cual podría definirse como: A(h7), Cf3, Pe5, ph7, pg7, pf7, pe6, rg8 y añadiendo Dd1 OR Dg4. La primera jugada es 1. Axh7+.

Definiéndolo de esta manera, tenemos que el patrón buscado será:

A(h7), Cf3, Pe5, ph7, pg7, pf7, pe6, rg8, Dd1
o
A(h7), Cf3, Pe5, ph7, pg7, pf7, pe6, rg8, Dg4


Patrones posicionales

Un lenguaje de patrones debe poder no solamente lidiar con elementos tácticos. Debería tener la capacidad de definir patrones posicionales. Definimos estos a partir de su estructura de peones. Así, creamos dos instrucciones: structw(lista de peones) y structb(lista de peones). Por ejemplo, en Botvinnik - Donner, tenemos la siguiente posición:


Botvinnik - Donner
Amsterdam, 1963
Juegan las blancas

Su patrón puede expresarse como:

structw(a3, b4, e2, f2, g3, h2)
structb(a7, b6, e6, f7, g7, h7)
obtener el punto débil c6 (para las blancas)

Botvinnik logró la ventaja después de 14. Cd4, Axg2 15. Rxg2 Dc7 16. Db3 Tfc8 17. Tfc1 Db7+ 18. Df3 Cd5 19. e4 C5f6 20. b5! a6 21. Cc6, logrando quedarse con la casilla c6 y posteriormente llevándose el triunfo.

Los patrones posicionales son más difíciles de definir porque no hay un mecanismo directo para obtener la ventaja por métodos tácticos, pero a través de structw/b podemos definirlos. Esto es lo que en la literatura de ajesrez se denomina como "priyomes", que es una palabra rusa que se usa para representar algún tipo de maniobra o técnica típica. Por ejemplo, una técnica de un priyome defensivo es usar el rey, en los finales de torres, para atacar los peones enemigos. Sin embargo, los priyomes normalmente se usan para referirse a posiciones con cierta estructura de peones.


Un resumen de las instrucciones de este lenguaje de patrones

Las instrucciones del lenguaje son:

P1(P2) - La pieza 1 ataca/defiende a la pieza 2.
P(casilla) - La pieza ataca la casilla.
P casilla - La pieza está en esa casilla
taboo(casilla) - hace esa casilla como no disponible al bando defensor.
structw(lista de peones) - define la estructura de los peones blancos en el tablero.
structb(lista de peones) - define la estructura de los peones negros en el tablero.
Conectores lógicos - "," = AND y ";" = OR. Pueden usarse indistintamente (",",";") o (AND,OR).
Comentarios (por línea) - "//", por ejemplo //esto es un comentario.

Por el momento lo dejo aquí. Hay cosas que definir, por ejemplo, ¿cómo es que dos patrones son similares? ¿cómo definir la similitud en dos patrones para considerarlos que son el mismo? ¿se puede crear una métrica de la similitud? Hay que trabajar sobre esto.

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

Friday, December 07, 2012

Patrones en Ajedrez (III)



Mi idea sobre los patrones en ajedrez parece que está dando resultados. Ya he hablado de esto aquí, aquí y aquí. Por mucho tiempo he estado atorado con la manera de representar posiciones y creo que finalmente este asunto está relativamente bien resuelto. Me parece que estamos ante una posible caracterización de las posiciones en ajedrez.

Consideremos el patrón inicial con el que he comenzado toda esta discusión:



Patrón inicial ¿Cómo caracterizarlo?

El problema a resolver es cómo caracterizar este patrón de manera que pueda ser leído por una computadora para después pedirle que busque similitudes, es decir, patrones similares. Una opción sería crear un lenguaje de descripción, como el que permiten las matemáticas, por ejemplo, en el caso de la geometría analítica, en donde la función f(x) = mx + b, que identifica a una línea recta. En lugar de esto, ¿por qué no representar el patrón sobre qué piezas atacan, qué piezas defienden, qué casillas son importantes y dónde deben estar las piezas? Por ello, podemos decir, “el alfil de c2 ataca el peón de h7” y punto final. Este es un enunciado del patrón. Para este particular ejemplo tenemos el patrón definido de la siguiente manera:

  • Dama blanca en h6
  • Alfil blanco (de casillas blancas) atacando el punto h7. De hecho, con esta descripción no tenemos que indicar en dónde está el alfil, si en b1, c2, d3, etcétera.
  • Rey negro en g8
  • Peón negor en f7, defendido solamente por el rey.
  • Puede haber un peón negro opcionalmente en h7 pero éste solamente debe estar defendido por el rey.
  • Solución del patrón: Juegan las blancas y ganan con la combinación 1. Axh7+ Rh8 2. Ag6+ Rg8 3. Dh7+ Rf8 4. Df7 mate.

Hemos caracterizado simplemente la posición en términos de ataques y defensas. Ahora se trata de que esta descripción sea pasada a un lenguaje de programación, o a un mecanismo que permita guardar el patrón y así buscar similitudes.

Para ello hay las siguientes alternativas:

  • Escribir un programa que permita, por una parte, crear los patrones que se necesitan. Una vez hecho esto, escribir el código que busque las descripciones de estos patrones en las partidas de ajedrez o en las posiciones que se deseén. Es claro que como el sistema debe buscar si existen los patrones correspondientes, el sistema debe, en cada partida analizada, buscar todos los ataques y defensas que se encuentren en cada posición de la partida y entonces comparar contra los patrones definidos. Si el patrón existe, entonces el sistema debe poder guardar o desplegar la información sobre en qué momento de la partida se encontraron uno o más patrones.



Esquema para un programa que busque patrones


Ambas posibilidades son factibles. Si se desea crear un programa que haga toda la tarea, lo cual da más versatilidad porque el programador puede añadir lo que considere necesario, hay que decidir en qué lenguaje escribirlo. Hay dos opciones:

  • Lenguajes de cuarta generación imperativos (Pascal, C)
  • lenguajes lógicos y funcionales (Prolog)

La primera opción tiene una ventaja: ya hay mucho código fuente de terceros para manejar posiciones de ajedrez, que leen partidas en formato PGN, entre multitud de tareas que realizan. La segunda opción tiene la virtud de poder expresar de manera muy sencilla predicados en Prolog, claúsulas de Horn, para expresar posiciones. Tal vez un esquema híbrido sea una buena opción, pero por el momento esto son especulaciones.

Usar CQL tiene una virtud importante: es un sistema probado. Entonces habría que escribir quizás un programa que permitiese a cualquier ajedrecista crear los patrones de interés y que como resultado se generara una consulta de búsqueda en CQL. Esto parece una idea interesante pues implica menos trabajo de programación.

Cabe decir que Zobrist y Carlson, a principios de los años setentas del siglo pasado, escribieron un artículo llamado An Advice Taking Chess Computer (Scientific American, circa 1972), en donde crean "snapshots" de posiciones. ¿Le suena familiar? Sí, hablamos de los patrones. Otro artículo del propio Zobrist y Carlson, llamado The USC Chess Program, describe el lenguaje que usaron, el cual es obsoleto y parece una versión (in-house) de lo que sería un antecesor de un lenguaje basado en la lógica. Ese lenguaje de programación ya no existe, pero los "snapshots" de las posiciones podrían bien ser usados ahora. Ambos artículos están a disposición de quien los quiera leer.

Otro esfuerzo en este sentido lo hizo Chris Donninger, autor de Hydra, un programa que nunca perdió contra ningún gran maestro en partida oficial (aunque el proyecto ya ha terminado), el cual anteriormente escribió el programa Nimzo, el cual lo dotó de un lenguaje de descripción de posiciones llamado Che, el cual derivó en Che++. En este caso, un interesante artículo mencionando las ventajas de este enfoque puede hallarse en el ICCA Journal, de diciembre de 1996, titulado A Graphical Language for Expressing Chess Knowledge (también disponible a quien le interese).

Finalmente otro artículo que busca estas definiciones de patrones, los cuales llaman chunks, como lo definiría Adrian de Groot en su libro clásico sobre cómo los jugadores perciben el tablero de ajedrez, Thought and choice in chess, (disponible en muchos sitios web), es el escrito por Michael George y Jonathan Schaeffer, de la Universidad de Alberta, llamado Chunking for Experience, en donde plantea un software de ajedrez llamado MACH (a Master Advisor for CHess), que utiliza patrones para encontrar buenas jugadas en el tablero. (Este documento también está disponible a quien le interese).

Todo esto suena muy bien, pero ¿de dónde saldrán los patrones? Para ello habría que hacerse de un jugador fuerte, el cual pudiese darnos la información de los patrones más típicos. Sin embargo, eso no es necesario realmente si consideramos que tenemos abundante literatura ajedrecística en el tema de la táctica. En ese sentido, existen muchísimos libros que hablan sobre los temas más típicos en la táctica: doble ataque, clavada, diversión, subpromoción, etcétera.

Dos libros llaman la atención. Chess Tactics Art, de Max Blokh y la Antología del Medio Juego, publicada por el Chess Informant. En este último libro, los autores del mismo han hecho un esfuerzo por crear una clasificación para las combinaciones en el medio juego, incluyendo los temas clásicos de la táctica. El problema es que no se dan ejemplos de los patrones. Simplemente vienen las posiciones clasificadas, lo cual se ha hecho "a mano:", es decir, sin ayuda de computadora alguna.


La clasificación de las combinaciones de acuerdo con Chess Informant

El libro de Blokh es aún mejor. Contiene unos 1500 ejercicios y antes de cada capítulo pone los patrones más parecidos. He aquí un ejemplo de esto:


Los patrones de táctica de M. Blokh

Con esto en mano podemos caracterizar muchísimos patrones comunes. En la medida del tiempo habrá más patrones que podrán ser incorporados, basados en nueva información o en situaciones que los libros mencionados no contienen. El punto aquí es que hay una enorme cantidad de patrones para iniciar el trabajo.

Con esta clasificación podríamos hacer que:

  • Que los programas no tengan que analizar las consecuencias de todas las jugadas si hay un patrón existente, jugando así más humanamente el ajedrez.
  • Producir libros de ejercicios tácticos buscando los patrones de los diferentes temas en las bases de partidas (hacer libros de ejercicios tácticos con este esquema sería rápido y trivial).
  • Estudiar posiciones en base a los temas tácticos que se deseé.

¿Qué sigue?

Básicamente es el momento de escribir código y probar estas ideas. En un futuro artículo hablaré de lo que he encontrado.

___

A quien le interesen los artículos mencionados, pueden pedírmelos a mi correo: morsa@la-morsa.com y los recibirán sin costo alguno a la brevedad.