Supongo que quiere decir borradores de 10 × 10, ya que 8 × 8 está resuelto, y que quiere decir que desea escribir un programa que funcione razonablemente bien, es decir, a un nivel competitivo. El conocimiento que necesita se divide en dos grandes categorías: conocimiento específico del dominio y habilidades generales. Omitiré cosas que tampoco requieren una gran cantidad, como implementar libros de apertura (bases de datos de secuencias de movimientos iniciales que comúnmente juegan los jugadores fuertes).
Además, estoy familiarizado con la programación de ajedrez, pero la mayoría de los conceptos deberían ser los mismos.
Dominio específico:
- Búsqueda alfa-beta / PVS y las modificaciones comunes que lo hacen práctico (búsqueda de reposo, tablas de transposición).
- Algunos conocimientos de prácticas comunes para la evaluación estática en borradores (por ejemplo, la evaluación en Chinook probablemente se traduce bien en borradores 10 × 10, al menos como punto de partida).
- La representación en el tablero es increíblemente importante en la programación de ajedrez debido a sus consecuencias de largo alcance para la eficiencia de la búsqueda, espero que sea el mismo caso en los borradores. Se requeriría el conocimiento de los métodos actuales.
- Lo anterior es suficiente para escribir un motor que no hace nada terriblemente estúpido. Para hacer una que funcione bien, imagino que se aplican muchas de las técnicas de vanguardia de la programación de ajedrez: poda histórica, reducción de movimientos tardíos especialmente, y probablemente algunas extensiones de búsqueda específicas de borradores.
General:
- ¿Qué tipo de habilidades debo tener para convertirme en ingeniero de almacenamiento de datos?
- ¿Las batallas alguna vez se reducen a habilidades individuales?
- ¿Practica sus habilidades de escritura o es un talento?
- ¿Cómo puedes desarrollar tus habilidades de networking?
- ¿Por qué las habilidades son baratas y la pasión no tiene precio?
- Escribir un programa que juegue ajedrez o borradores o juegos similares se trata de buscar lo más profundo que puedas y lo más inteligente que puedas. La sección anterior cubre la última, pero la primera requiere una comprensión profunda de cómo escribir código performante. Cuando tiene que procesar millones de posiciones por segundo, cada ciclo de CPU, cada pérdida de caché, cada rama mal predicha, todo cuenta.
- Programas como este son notoriamente difíciles de depurar. Es muy importante ser lo suficientemente disciplinado como para escribir pruebas unitarias, herramientas de depuración, etc., desde el primer día.
Finalmente, el wiki de programación de ajedrez tiene una página sobre las fichas que pueden resultarle interesantes: programación de ajedrez – Damas. El resto del sitio es un tesoro de información (orientado a la programación de ajedrez, pero como dije, muchos de los conceptos deberían aplicarse directamente).
Esto debería al menos proporcionar algunos términos de búsqueda. Espero no hacer que parezca demasiado desalentador: es realmente un área divertida para explorar, la mayoría de las cosas específicas del dominio se pueden aprender de forma incremental en el orden en que las enumeré, y es realmente una sensación increíble cuando tu programa te supera por primera vez.