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
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.
fuente
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.
fuente