implementando la diferencia temporal en el ajedrez

10

He estado desarrollando un programa de ajedrez que utiliza el algoritmo de poda alfa-beta y una función de evaluación que evalúa las posiciones utilizando las siguientes características, a saber, material, seguridad real, movilidad, estructura de peones y piezas atrapadas, etc. Mi función de evaluación es derivado de la

F(pags)=w1material+w2seguridad del rey+w3movilidad+w4 4estructura de peón+w5 5piezas atrapadas

donde es el peso asignado a cada característica. En este punto, quiero ajustar los pesos de mi función de evaluación utilizando la diferencia temporal, donde el agente juega contra sí mismo y en el proceso reúne datos de capacitación de su entorno (que es una forma de aprendizaje de refuerzo). He leído algunos libros y artículos para tener una idea de cómo implementar esto en Java, pero parecen ser más teóricos que prácticos. Necesito una explicación detallada y pseudocódigos sobre cómo ajustar automáticamente los pesos de mi función de evaluación basada en juegos anteriores.w

usuario2890137
fuente

Respuestas:

4

Recomiendo a cualquier persona interesada en el tema que eche un vistazo al documento que combina TDL y aprendizaje profundo.

Aproximadamente, tendrás que hacer que el motor juegue entre sí. Registre la evaluación mini-max para cada posición. Al final del juego, obtendrás una recompensa, que es {0,1, -1} para el ajedrez. Luego deberá ajustar sus parámetros con:

ingrese la descripción de la imagen aquí

Esta ecuación nos dice que deberíamos ajustar los pesos por diferencias temporales, ponderados por lo lejos que debería hacerlo. Si tiene una evaluación perfecta, su diferencia temporal siempre sería cero, por lo que no necesitaría hacer ningún ajuste.

A continuación, deberá usar los nuevos parámetros para jugar un nuevo juego. Se repite hasta tantos juegos como puedas permitirte o cuando creas que es convergente.

Pocos comentarios:

  1. El papel que cito aplica un factor de descuento. Está hecho para el algoritmo de proporción inversa para la red neuronal. No lo necesitas
  2. Tendrá que experimentar con la tasa de aprendizaje óptima (alfa en la ecuación). Demasiado grande hará que su aprendizaje sea inestable, muy poco tardará más en converger. He visto personas que usan 0.70. El artículo que cito utiliza 1.0.
Hola Mundo
fuente
Hola, me encanta tu respuesta, pero ¿podrías arreglar el enlace al periódico?
padura
@padura fijo. Por favor, lee. Fue una buena lectura para la ciencia de datos.
HelloWorld
(+1) Gran respuesta. Me encantó el papel también :)
Dawny33
Es un gran artículo, lástima que no supiera esto en el momento en que estaba trabajando en mi propio motor de ajedrez;) Me pregunto si podemos mejorar combinándolos con esta técnica: bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc / ...
padura
2

Un primer comentario, deberías ver 'Wargames' para saber en qué te estás metiendo.

Lo que desea es f (p) de modo que f (p) esté lo más cerca posible de la fuerza de la posición.

Una solución muy simple usando algo genético sería configurar 10000 jugadores con diferentes pesos y ver cuál gana. Luego mantenga el peso de los 1000 ganadores principales, cópielos 10 veces, modifíquelos ligeramente para explorar el espacio de peso y vuelva a ejecutar la simulación. Esa es la GA estándar, dada una forma funcional, cuáles son los mejores coeficientes para ella.

Otra solución es extraer las posiciones, de modo que tenga una tabla '(material, seguridad real, movilidad, estructura de peón, piezas atrapadas) -> bondad de posición' donde la bondad de posición es un factor objetivo (resultado ganado / perdido calculado usando las simulaciones anteriores) o coincidencias conocidas, profundidad del árbol disponible, número de movimientos debajo del árbol donde mejora uno de los 5 factores. Luego puede probar diferentes formas funcionales para su f (p), regresión, svm.

usuario3053
fuente
Esto no tiene ningún sentido.
HelloWorld