Zugzwangs y motores de ajedrez

Los humanos aun vencen a las computadoras en ajedrez en unas pocas situaciones, en detectar algunos zugzwang es el principal ejemplo(para quien no lo sepa un zugzwang es una posición donde sin importar que movimiento hagas tu situación empeora). Esto tiene que ver en como evalúan los motores de ajedrez, primero veamos un ejemplo:

En un movimiento las blancas pueden forzar un Zugzwang a las negras, el movimiento no es totalmente trivial sin embargo tampoco es muy complicado para un jugador experto o incluso alguien medianamente experimentado (1.Rh6!! y las negras están obligadas a empeorar su posición). La razón de esto tiene mucho que ver con las heuristicas y el horizonte que le asignemos a cada una.

El Zugzwang anterior causa problemas en Stockfish 6, uno de los motores de ajedrez mas fuertes(si no el mas fuerte) debido a una de sus estrategias llamada “Null move pruning” en pocas palabras lo que hace esto es corta muchas posibilidades del árbol de búsqueda para revisar jugadas mas interesantes, el problema principal con esto es que posiciones como estas fallan en ser detectadas. La explicación de esto es un poco mas complicada, para entenderla primero veamos que es un “Null move” o movida nula.

Una movida nula en los motores de ajedrez es dejar el tablero igual y ver si esto genera un cambio para revisar si esto altera una parte de la función de evaluación o seguir con ella deja las cosas igual. Algo tan sencillo tiene repercusiones importantes en las jugadas analizadas ya que podemos tener muchas movidas nulas, “Null move pruning” se dedica a cortar movidas nulas y al no ser analizadas esto mejora la eficiencia en un 99.99% de los casos conocidos.

Como ya habrán adivinado en el 0.01% restante se encuentran los Zugzwang, aquí esta otra posición donde Stockfish 6 falla en ver el mate:

1.Kg7 Bh2 2.Kg6 Bg1 3.Kf5 Bh2 4.Ke5 Bg1 5.Kd4 Bh2 6.Ke3 Bg1 7.Ke2 Bh2 8.Kf1 Bg1 9.Kxg1 Nh3+ 10.Kf1 Nf2 11.Ke2 Nd3 12.Bxe4# aunque siendo justos yo tampoco lo encontre y tuve que revisar la respuesta

Hay que mencionar que no solo Stockfish tiene este tipo de fallas por ejemplo, si le ponemos esta posición a Komodo 4:

No puede encontrar el mate(cabe notar que esto ya fue arreglado en una versión posterior) errores de este estilo los podemos encontrar en todos los motores de ajedrez excepto en los “Mate Finder”(Programas para encontrar jaque mates) que están hechos precisamente para evitar que se les escape estas jugadas. Pero a gran costo de elo en el resto de las posiciones. Para dar un ultimo ejemplo veamos la siguiente jugada:

Dejando de lado la probabilidad de que nos toque un juego así(0%) la posición es interesante debido a que muchos motores fallan en detectar el zugzwang y la manera de ganar la partida(1. h3 gana, 1. h4 empata) para quien quiera ver el desenlace ponga esta posición en Houdini 15a que ve el mate correctamente, esta posición también es muy interesante debido a que otros motores como Toga II consideran que h4 da la victoria cuando en realidad es un empate. Cada motor tiene sus pequeñas fallas y como es de esperarse en cuanto se descubren se tienden a arreglar. Lo interesante de los zugzwang es que siguen siendo un gran problema para los motores de ajedrez aun después de mucho tiempo que se detecto el problema.