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

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.

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.