sábado, 5 de julio de 2014



¿ COMO “PIENSAN” LAS COMPUTADORAS QUE JUEGAN AJEDREZ? 
(3ª PARTE)
**********************************************************************
comentarios y sugerencias  herguz.ajedrez@gmail.com

Una función de evaluación para estos algoritmos es el equivalente humano a la “valoración de la posición”, la cual hace un ajedrecista de mediana fuerza cada vez que puede hacerlo y en particular valora con más énfasis en las posiciones críticas. Aunque un ajedrecista humano valora, tomando en cuenta el bagaje de conocimientos estratégicos y/o tácticos adquiridos en su experiencia, para posiciones simples o complejas, esta valoración es más que todo una ordenación desde mayor importancia hacia abajo de las posiciones terminales que pudo considerar en su análisis y desde luego decide la jugada que está más arriba en su ordenación (o valoración).

Una computadora “valora” mas matemáticamente y debe aplicar una función F de evaluación establecida por el programador. F : P ---> Z.

Esto último lo podemos leer así: una función llamada F toma elementos del conjunto P (las posiciones posibles en un tablero de ajedrez) y le asigna valores del conjunto Z (los números enteros i.e. 1, -4, 10, -234, etc.), la mejor jugada para el programa es la de más alto valor que le da la función de evaluación.

Al escribir una función de evaluación para un programa de ajedrez es esencial emplear instrucciones de uso eficiente dado que este componente del programa es utilizado en forma repetitiva (miles o cientos de miles de veces durante cada selección de movimiento). Por esta razón es preferible no incluir excesivos términos en la función de evaluación dado que cada nuevo término significa un pequeño incremento en el tiempo requerido para evaluar cada posición terminal.

Una buena función de evaluación es aquella que evalúa los aspectos críticos de la posición en cuestión y lo realiza de la manera más eficiente posible. Por cada nuevo término incluido en la función de evaluación uno debe evaluar si es que la información agregada compensa la cantidad de tiempo computacional que dicha evaluación requerirá (una función de evaluación perfecta puede tardar siglos en valorar completamente una posición tomado en cuenta todos los factores necesarios).

El problema de crear una función de evaluación es que no hay un solo criterio para construir esta función, algunas veces priva la ventaja material como en el final y otras veces son más importantes los factores dinámicos de la posición, como en el medio juego, no existe un método estándar de construcción.

Los patrones potenciales que podría manejar una función de evaluación son cerca de 50.000, los cuales toman distintos valores de acuerdo a la etapa del juego en que nos encontremos y además el contexto de la posición (por ejemplo, cerrada o abierta). Es claro que existen cierta base de patrones básicos en las funciones de evaluación que todo programa presenta: Equilibrio material, movilidad de piezas, casillas atacadas, seguridad del rey, dominio central, actividad de piezas, desarrollo, etc. Estos patrones fueron propuestos por Claude Shannon (el pionero de los programas de ajedrez) y se encuentran en distinta literatura ajedrecística, pero si suponemos que nuestra función de evaluación ya contiene en su código el reconocimiento adecuado de estos patrones, ¿cómo podemos seguir mejorando esta función?

Este fue un problema que ocurrió a varios programas los cuales en un momento debieron decidir por recurrir a la consulta a grandes maestros con tal de obtener información relevante de cómo incrementar la cantidad de patrones de reconocimiento de su función de evaluación.

MINIMAX Y PODA ALPHA BETA

Este algoritmo, es el que realmente “decide” qué jugada hacer en el complejo árbol de juego, usa la función de evaluación que valora cada nodo del árbol de juego y lo recorre siguiendo una filosofía consistente de manera simple en lo siguiente: “lo mejor para mí y lo peor para mi rival”, el siguiente diagrama ilustra mejor este hecho:

Utilidad: En el siguiente ejemplo puede verse el funcionamiento de Minimax en un árbol generado para un juego imaginario. Los posibles valores de la función de evaluación tienen un rango de [1-9]. En los movimientos del contrincante suponemos que escogerá los movimientos que minimicen nuestro beneficio (la peor jugada), en nuestros movimientos suponemos que escogeremos los movimientos que maximicen nuestra función (la mejor jugada), la peor equivale a la de menor valor de la función y la mejor a la de más alto valor.

El lector puede observar en los nodos terminales del árbol, si tiene dos valores posibles a elegir (5-8 y 9-2 y 9-1), como éste es un nivel donde se debe elegir el mínimo valor (le toca jugar a mi rival) , se decide por la jugada de menor valor (5, 2, 1) , ahora retrocedemos un nivel, encontramos dos decisiones posibles (5-2 y 1-9), en este caso me toca jugar y por ello decido por el mayor valor de la función de evaluación, por ello las decisiones son (5 y 9) , seguimos subiendo un nivel y ahora la decisión está en el menor valor entre las posibles ( 7-5-8 y 3-4 y 9-2-1) obviamente estos menores valores en cada caso son (5, 3 y 1) y ahora decido por el mayor valor entre ellos saliendo el valor de 5 (ver nodo inicial). ¿Cómo decido?

Simplemente el programa va a decidir que la línea a seguir (la que le da mejores posibilidades) es la que está resaltada por líneas remarcadas (ver sector izquierdo del árbol), porque allí se están tomando en cuenta mis mejores jugadas y las de mi oponente (las que me oponen mayor resistencia).

Pensemos ahora que un árbol de juego para el ajedrez es mucho más complejo que el ejemplo anterior, es decir es mucho más profundo en niveles y es mucho más ramificado en cada nivel (más jugadas a considerar), en especial cuando la posición es muy táctica, entonces el árbol de juego es mucho más “frondoso” que en el sencillo ejemplo anterior, esto por supuesto incrementa los tiempos computacionales (no olvidar una consideración hecha anteriormente: el número de posiciones posibles es más alto que el número de átomos conocidos en el universo), entonces es prácticamente imposible incluso para una computadora, recorrer y valorar todos los nodos de un árbol ajedrecístico.

Por ello la poda Alpha Beta, permite aligerar el problema, si en un nivel a decidir hay 20 jugadas posibles, pero 12 de ellas son absurdas (desde el punto de vista de un buen jugador), por ejemplo regalan una pieza, sin haber posibilidades tácticas en compensación, entonces estas jugadas no serán consideradas ni por la función de evaluación, ni por el MiniMax, entonces el árbol de juego se ve recortado ampliamente en varias de sus ramas, y el análisis se simplifica grandemente, de allí su nombre, porque se asemeja a podar un árbol y quitarle parte de su frondosidad.
Msc. Hernando Guzmán Jaimes
Maestro nacional de ajedrez

No hay comentarios: