¿Qué es una lista de todos los conjuntos de habilidades requeridas (matemáticas / programación / algoritmos, etc.) para poder programar juegos / escenarios de ajedrez?

Un juego de ajedrez tiene muchos matices.

El conjunto de habilidades principal que necesitará es las técnicas de poda Branch y Bound / Alpha-beta. El conjunto de movimientos posibles en una posición dada suele ser enorme, por lo que evaluar todos los movimientos es una pérdida de tiempo de CPU. Evaluar los movimientos de manera codiciosa, usar heurísticas como la ganancia de material y buscar eficientemente son partes de un programa de ajedrez.

A continuación, puede intentar ‘enseñar’ a una computadora cuáles son buenos movimientos posicionales (movimientos que ocupan el centro, atacan al rey, permiten el movimiento de piezas, cambian cuando están adelante, etc.). El aprendizaje automático es un candidato aquí, y los miles de juegos de ajedrez que se pueden alimentar a una computadora pueden entrenar su ‘intuición’ bastante bien.

Representar matemáticamente una situación en el ajedrez es un poco difícil, y es posible que deba tomar múltiples heurísticas con diferentes pesos para llegar a una conclusión sobre una posición. Se aplica una gran cantidad de prueba y error a este proceso, solo para optimizar los parámetros.

Cuando haya terminado con esto, las otras partes son principalmente fuerza bruta. Aumente la memoria de la computadora en las aberturas al alimentarla con una mesa de apertura. Aliméntalo con una mesa de final de juego donde juegue perfectamente para cualquier posición con menos de X piezas. Resolver mate en X movimientos en cualquier posición dada. Haz que juegue muy rápido cuando esté cerca del límite de tiempo.

En general, hacer un programa de ajedrez requerirá tiempo y le sugiero que lea un poco sobre la poda alfa-beta eficiente antes de intentarlo.