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.

4 comments:

emiliano said...

Woow a mi lo que me impresiona es el tiempo que algunas personas invierten en esto, sea lo que sea hobby, pasatiempo o jueguito. Supongo cada quien valora su tiempo de maneras diferentes

emiliano said...

Woow a mi lo que me impresiona es el tiempo y esfuerzo que algunas personas invierten en esto, sea lo que sea aficion, pasatiempo o jueguito. Supongo cada quien valora su tiempo de maneras diferentes

Tonat said...

Creo que el título correcto del libro de Блох/Blokh/Bloch es, en inglés, "Combination Art" o en su defecto "The Art of Combination".

Difícil de conseguir, por cierto.

Morsa said...

En la red puede conseguirse uno llamado Combinational Motifs, del mismo Blokh. Es prácticamente el mismo que el CT Art. Por cierto, Convekta vende el CT ART 4.0, basado en ese libro. Si quieres aprender táctica, es una gran opción.