Wednesday, September 02, 2015

Un lenguaje para patrones en ajedrez II


En el artículo pasado hablamos de un lenguaje de patrones para las posiciones de ajedrez. Definamos más formalmente esto: Un patrón es una generalización de un objeto que contiene sus características esenciales. En ajedrez podemos definir las características de una posición en términos de ataque y defensa. Así pues, solamente hay dos tipos de relación.

Un ataque se da cuando una pieza de un bando ataca a otra (del bando contrario). Una defensa se da cuando una pieza de un bando defiende a otra (del mismo bando). Es decir la definición de ataque se da entre piezas rivales y el de defensa por piezas del mismo bando.

Las relaciones más importantes pueden definirse así:

  • P1 P2 donde P1 (pieza 1) ataca/defiende directamente a P2 (pieza 2). Por ejemplo: T p (Torre blanca ataca peón negro)
  • P1 P2 P3 donde P1 ataca directamente/defiende a P3 vía P2. Por ejemplo: T D p (Torre blanca ataca al peón negro indirectamente a través de la Dama blanca). A eso le denominamos ataque de rayos X.

También podemos definir la relación de un ataque/defensa/dominación a una casilla, P1 C1, donde P1 es una pieza y C1 es una casilla determinada.

Las relaciones que parecen más importantes son:

  • P1 C1 Pieza ataca/defiende/domina a Casilla
  • P1 P2 Pieza 1 ataca/defiende Pieza 2
  • P1 C P2 Pieza 1 controla/domina la Casilla C desde donde ataca/defiende a la pieza 2
  • P1 P2 P3 Pieza 1 ataca/defiende a P3 indirectamente vía la pieza 2
  • P1 P2 P3 P4 Pieza 1 ataca/defiende a la Pieza 4 indirectamente a través de P2 y P3.

Los siguientes ejemplos pueden mostrar cómo pueden representarse los patrones y además, cómo ellos representan (en posiciones que aparentemente son distintas), el mismo patrón. Empecemos por definir la relación ataque/defensa:


Alfil ataca el peón negro de h7 y a su vez es defendido por el peón de c2.

Cabe señalar que esta es una descripción estática porque no se define movimiento alguno a través del patrón definido. Requerimos un componente dinámico, que nos indique qué jugada o jugadas hay que hacer para que el patrón se considere ganador.

----

La necesidad de definir una parte dinámica basada en las jugadas por hacer por parte del bando ganador en el patrón muestra porqué el patrón es importante ya que define una posición ganadora o de la que se saca ventaja. No me queda aún muy claro qué profundidad (cuantos plies) deben describirse. En una primera aproximación bien podríamos definir solamente un ply (media jugada, es decir, un solo movimiento de alguno de los bandos), y esperar que un motor de ajedrez hiciese el árbol de variantes para encontrar la secuencia ganadora.

Podemos entonces asociar movimientos a los patrones definidos. Una P1 que capture una P2 y le dé la ganancia de la pieza 2 podría escribirse como:

P1 P2 [+P2]

Con ese criterio podríamos establecer la siguiente notación, por ejemplo, para cuando la dama captura una pieza rival: D p [+p], D t [+t], D c [+c], D a [+a], D d [+d]. Obviamente no puede existir D r [+r] porque el monarca rival nunca se captura. Recibe mate y se acaba la partida.

Si tenemos a una dama que captura a una torre enemiga (véase siguiente diagrama) pero a su vez esa dama es capturada por un peón que defiende a la torre mencionada, escribiríamos:



La dama blanca captura la torre negra (que está defendida)

D t [+t – D]

Es decir, estaríamos hablando de un sacrificio de dama propia por una torre rival.

En las siguientes dos posiciones podríamos definir el factor dinámico de la siguiente forma:


Nimzowitsch - Tarrasch
San Peterburgo, 1914
Juegan las negras
Elemento dinámico: 1. … Axh2+



Lasker - Bauer
Amsterdam 1889
Juegan las blancas
Elemento dinámico 1. Axh7+


Y suponer que un motor de ajedrez puede hallar el resto de la combinación que no excede 10 plies, (cinco jugadas).

Otra opción, que ahora estoy investigando es la de generar la posición final a partir del patrón. Por ejemplo, en las posiciones anteriores (Lasker-Bauer y Nimzowitsch-Tarrasch):

Lasker-Bauer:


                                 Posición Inicial                                  Posición final


Nimzowitsch-Tarrasch:


                                Posición Inicial                                  Posición final


Podríamos decir que hay una transformación entre la posición inicial (la cual por el momento no sé cómo puede definirse), cuando existe el patrón y el resultado final de la secuencia de jugadas que llevan a obtener la ventaja (o el triunfo). Esta operación bien podría denominarse el colapso (o reducción) de la posición rival (que nace de la secuencia obligada que lleva al bando ganador a obtener la ventaja).

Esto desde luego puede representarse como un árbol de posibles variantes, tarea no muy difícil de hacer con una computadora. Así pues, a partir de la secuencia ganadora, se pueden ver todas las sub-secuencias que llevan a la posición final ganadora (o a la que saca una ventaja definida).

Cabe señalar que en los ejemplos no importa realmente el color de las piezas en el patrón. Si las negras son las que lo ejecutan, lo único que hay que renombrar son las coordenadas (restando 9 a cada una de ellas, es decir, un alfil blanco que ataca el peón de h7 se convierte en un alfil negro que ataca h2).

Un hecho importante sobre este lenguaje de patrones es que permite describir posiciones que precisamente tiene sus características generales. Sin embargo, las posiciones mostradas no son estrictamente las mismas y ahora me parece claro que habría que considerar un índice o una métrica que definiera qué tan similares son los patrones de posiciones específicas. Es decir, parece evidente que no todos los elementos se repiten pero que hay algunos que son fundamentales para definir al patrón.

2 comments:

Alexánder Narváez said...

Saludos Manuel, una vez más un artículo interesantísimo. Me gusta mucho el lenguaje de caracterización que planteas y la forma como indicas las relaciones que se dan.
Ahora bien, tal y como indicas en tu párrafo final el gran reto es poder aplicar el lenguaje de caracterización de modo que pueda encontrar el patrón en diferentes situaciones y número de piezas implicadas; la clave creo consiste en asignarle un valor porcentual a la evaluación de una posición, algo así como una aproximación y si el % es lo suficientemente alto, entonces que el programa aplique la solución del patrón respectivo.

P.D. Cada vez me apasiona más este tema.

Mario Dammex Diaz said...

seria un gran aporte lograr un indice de posiciones "tipicas",similares (que no identicas) y como las resolvio el bando ganador.....una especie de "catalogo de medio juego"...hay algo parecido... un intento... "GM RAM" de Ziatdinov...pero no incluye las soluciones ni como se relacionan las posiciones con otras para establecer el patron....muy interesante su proyecto....un saludo