resources - problemas - ¿Cuáles son algunos buenos recursos para escribir un motor de ajedrez?
programa de ajedrez para entrenar (8)
Al crear mi motor de ajedrez, pasé meses intentando reunir buenos recursos que describen algunos de los aspectos más difíciles de crear un juego de ajedrez. Aquí hay una lista de los que encontré más útiles:
Programación de ajedrez por François Dominic Laramée
Este es el artículo que me metió en el ajedrez de la computadora. Es una gran descripción de cómo las computadoras juegan al ajedrez. Es extremadamente fácil de leer y le presentará todos los términos y palabras clave.
Wiki de ajedrez por computadora , esto realmente se ha expandido en los últimos meses. Es un excelente recurso para material de referencia.
http://chessprogramming.wikispaces.com/
Enlaces de ajedrez por computadora de Louis Kessler
Una vez que revisa los recursos anteriores, puede encontrar el resto en la siguiente página de enlaces.
http://www.lkessler.com/cclinks.shtml
Por último, pero no menos importante, escribo un blog de Computer Chess que lo guía a través de todos los pasos para escribir un motor de ajedrez en C # desde cero, incluye una sección de enlaces de ajedrez de la computadora y un kit de inicio del juego de ajedrez.
Adam Berent
Estoy interesado en escribir un motor de ajedrez (sobre todo como ejercicio de aprendizaje) y me interesaría cualquier recurso que la gente conozca que pueda ser de interés o uso, cualquier cosa realmente: documentos, libros, teoría, tutoriales, cualquier cosa que pueda ser útil.
De mis archivos:
- Esta es una wiki de programación de ajedrez útil.
- Esta es una introducción simple a la programación de ajedrez.
- Contiene varias series tutoriales de YouTube paso a paso que van desde el nivel principiante hasta el nivel avanzado.
- Esta es una frayn.net/beowulf/theory.html .
- Este es el interesante blog de ajedrez de Adam Berent .
- Este es un buen análisis de MTD (f) , un algoritmo de búsqueda interesante.
- Esta es una buena guía para la validación de la generación de movimiento .
- Esta es mucha información buena sobre el motor de ajedrez Rebel .
- Esta es mucha información buena sobre el motor de ajedrez Dark Thought .
- Buena información y código fuente para el motor de ajedrez Monsoon .
- Estas son más notas sobre programación de ajedrez .
- Una introducción razonable a los bitboards rotados .
- Una introducción razonable a los magic bitboards .
- Una introducción razonable a las reducciones de última hora .
- Una mirada a la poda de movimiento nulo .
- Una colección de conjuntos de posiciones para propósitos de prueba.
- Aquí hay un informe anterior de 2 estudiantes que escribieron un programa de ajedrez .
- Un montón de enlaces de programación de ajedrez misceláneos .
- Finalmente, aquí está la versión de Wikipedia sobre ajedrez de computadora .
El artículo de Claude Shannon de 1949 (advertencia: PDF) sobre el tema es un buen lugar para comenzar
El mejor tutorial de programación de ajedrez para principiantes es en GameDev . Es muy fácil de entender, mientras que va mucho en detalles.
Esto es básicamente en el campo de la Inteligencia Artificial (AI).
La forma más común de hacer que una computadora "piense" en un juego de ajedrez es usar el método mini-max donde la computadora "piensa" al analizar los resultados de realizar diferentes movimientos con anticipación al estado actual.
La "bondad" de los resultados de diferentes movimientos se puede determinar a partir de muchos criterios, como la puntuación, el número de enemigos que quedan, el estado ganador, por ejemplo. Por ejemplo, si mueves al jugador hacia la derecha y ganas el juego, ese es un muy buen estado. Pero si lo mueves hacia la izquierda no obtienes nada. Es razonable moverse hacia la derecha. Esta función que define "bondad" generalmente se llama función heurística.
Este proceso se realiza recursivamente durante muchos turnos. Mientras mayor sea el número de giros, más tiempo necesitará. Y cuanto mayor sea el número de giros, más inteligente será su software. Pensar en el futuro en un solo turno solo puede resultar en una selección codiciosa. El software inteligente de ajedrez tiene una gran función heurística y piensa en el futuro en muchos turnos.
PD. Hay algunos detalles del algoritmo mini-max que no explique aquí, pero esto debería cubrir la idea básica.
La descripción de muchos algoritmos útiles en el ajedrez, frayn.net/beowulf/theory.html , debería ser un buen punto de partida para comprender la medida del problema y varias formas de simplificar el trabajo computacional.
-Adán
Me uní a la misma liga de Paul Wicks (arriba), yo también quiero escribir un motor de ajedrez para mi propio aprendizaje, solo la restricción es mi trabajo diario (que es trabajar en aburridos servicios web y esas cosas ...) pero vale la pena el dolor.
Decidí construirlo usando un enfoque capa por capa. Casi he terminado con la parte de jugadores múltiples, es decir (HUMAN vs HUMAN).
Una vez que haya terminado con esto, me encantaría incorporar la capa AI para apoyar el esquema de juego (COMPUTER vs HUMAN). Esta es la parte que más me preocupa, he encontrado muy buenos consejos de ayuda aquí en este hilo, un gran agradecimiento a todos ustedes.
Actualmente, el idioma con el que estoy versado es Java, en caso de que haya un golpe de rendimiento, entonces podría portarlo a C ++.
Siempre puedes echar un vistazo al código GNU Chess .