Saltar al contenido

¿Cómo programar una red neuronal para ajedrez?

Esta es la contestación más acertada que encomtrarás dar, sin embargo estúdiala detenidamente y valora si es compatible a tu proyecto.

Solución:

En caso de que alguien encuentre esta página al azar. Dado lo que sabemos ahora, lo que propone el OP es casi seguro posible. De hecho, logramos hacerlo para un juego con un espacio de estado mucho más grande: Go (https://deepmind.com/research/case-studies/alphago-the-story-so-far).

No veo por qué no puedes tener una red neuronal para un static evaluador si también realiza un mini-max lookahead clásico con poda alfa-beta. Muchos motores de ajedrez usan minimax con un cerebro muerto static evaluador que simplemente suma las piezas o algo así; no importa tanto si tienes suficientes niveles de minimax. No sé cuánto mejoraría la red, pero hay poco que perder. Sin embargo, entrenarlo sería complicado. Sugeriría usar un motor que prevea muchos movimientos (y consuma mucha CPU, etc.) para entrenar al evaluador para un motor que prevea menos movimientos. De esa manera, terminas con un motor que no requiere tanta CPU (con suerte).

Editar: Escribí lo anterior en 2010, y ahora en 2020 Stockfish NNUE lo ha hecho. “La red está optimizada y entrenada en el [classical Stockfish] evaluaciones de millones de posiciones a una profundidad de búsqueda moderada” y luego se utiliza como un static evaluador, y en sus pruebas iniciales obtuvieron una mejora de 80-elo al usar este static evaluador en lugar del anterior (o, de manera equivalente, el mismo elo con un poco menos de tiempo de CPU). Entonces, sí, funciona, y ni siquiera tiene que entrenar la red a una profundidad de búsqueda alta como sugerí originalmente: una profundidad de búsqueda moderada es suficiente, pero el key es usar muchos millones de posiciones.

He estado allí, hecho eso. Dado que no hay continuidad en su problema (el valor de una posición no está estrechamente relacionado con otra posición con solo 1 cambio en el valor de una entrada), hay muy pocas posibilidades de que un NN funcione. Y nunca lo hizo en mis experimentos.

Preferiría ver un sistema de recocido simulado con una heurística ad-hoc (de la cual hay muchas) para evaluar el valor de la posición…

Sin embargo, si está decidido a usar un NN, es relativamente fácil de representar. Un NN general es simplemente un gráfico, en el que cada nodo es una neurona. Cada neurona tiene un valor de activación actual y una fórmula de transición para calcular el siguiente valor de activación, en función de los valores de entrada, es decir, los valores de activación de todos los nodos que tienen un vínculo con ella.

Un NN más clásico, es decir, con una capa de entrada, una capa de salida, neuronas idénticas para cada capa y sin dependencia del tiempo, puede representarse por un array de nodos de entrada, un array de nodos de salida y un gráfico vinculado de nodos que los conectan. Cada nodo posee un valor de activación actual y una lista de nodos a los que reenvía. Calcular el valor de salida es simplemente establecer las activaciones de las neuronas de entrada en los valores de entrada e iterar a través de cada capa subsiguiente, calculando los valores de activación de la capa anterior utilizando la fórmula de transición. Cuando haya llegado a la última capa (de salida), tendrá su resultado.

Te mostramos reseñas y puntuaciones

Puedes proteger nuestro análisis añadiendo un comentario o puntuándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *