¿Cómo comenzar a escribir un motor de ajedrez en C ++? (O Java) cuál es la matemática detrás de las estrategias

Para comenzar su programa, programe en las reglas del ajedrez. Programe en el tablero inicial y un algoritmo que genere todos los movimientos legales posibles desde cada posición. Crea un reconocedor para usar cuando el juego termine.

El juego de ajedrez más simple es uno que alterna movimientos: el jugador hace un movimiento, luego el motor de ajedrez elige el movimiento más lógico de uno de sus movimientos legales. Repite hasta que alguien gane. (Eso tiene que incluir permitir que el jugador ofrezca un empate con la computadora pudiendo aceptar y rechazar, si lo desea, por supuesto).

Después de eso, puedes comenzar a hacerlo no estúpido. Construya un evaluador para asignar un puntaje a cada posición. Comience con su evaluador básico (Q = 9, R = 5, B = N = 3, P = 1, K = infinito). Trabaja desde allí.

Finalmente, agregue un algoritmo Minimax. Es decir, observa algunos movimientos y trabaja hacia atrás, suponiendo que el jugador tomará el puntaje más bajo de cada rama y que elegiría el más alto. Elija el movimiento que conduce al mejor algoritmo minimax.

Un ejemplo, de tres en raya, donde 1 es una victoria para X y 0 es un empate:

Crédito y más detalles: KR-IST – Conferencia 5a Juego jugando con Minimax y Poda

Piense en el juego de ajedrez como un Árbol o DAG (gráfico acíclico dirigido)

Al principio las blancas tienen 20 opciones para el primer movimiento.

Cada uno de estos 20 movimientos opcionales puede ser seguido por cualquiera de los 16 movimientos posibles del negro. Su estructura de datos para ilustrar esto se verá como un árbol (T) con un nodo raíz que tiene 20 bordes hasta 20 movimientos potenciales de los blancos. Cada uno de los nodos que representan movimientos de los blancos tendrá 20 bordes hacia abajo para movimientos potenciales del negro.

En cada etapa, conecta un nodo en el árbol que representa un movimiento en blanco / negro con un posible movimiento de ‘respuesta’ por un color correspondiente.

En el nivel de la hoja del árbol está el final del juego. El nodo hoja puede ser uno de los siguientes:

  1. Victoria blanca
  2. Victoria negro
  3. Estancamiento

Entonces, ahora tienes la estructura de datos.

El algoritmo es simple: encuentra el camino más corto en el Árbol (o en el DAG) que conduce al resultado deseado y juega el movimiento relevante que lleva a esta hoja.

¡Buena suerte!

More Interesting

¿Por qué usar un diagrama de flujo es una mala práctica en la programación?

Soy bueno en algoritmos y estructuras de datos, ¿cuál debería ser mi estrategia para comenzar una carrera independiente en este dominio?

Cómo ordenar la matriz de una estructura utilizando solo uno de sus miembros de datos en c ++ (STL)

Dos jugadores juegan el siguiente juego: hay N piedras en la mesa, el jugador puede tomar 1 o 2 piedras (si N mod 3 = 0), 1 o 3 (si N mod 3 = 1) y 1, 2 o 3 ( si N mod 3 = 2). ¿Cómo determino al ganador en el juego?

Además del algoritmo de tallado de costura, ¿qué otros algoritmos se pueden usar para Image Resizer?

Un árbol binario completamente equilibrado tiene 187 hojas. ¿Cuál es la altura del árbol?

¿Puedes ser bueno en la programación pero malo en los algoritmos?

¿Cuáles son los mejores algoritmos de selección de apareamiento en informática evolutiva?

Cómo calcular la similitud semántica entre un automóvil y una bicicleta mediante el algoritmo Jian y Conrath

Dado un conjunto etiquetado de nodos, ¿podemos 'siempre' construir un árbol de búsqueda binario (BST) para ellos?

¿Dónde podemos ver el uso implícito de las estructuras de datos en la naturaleza, como lista enlazada, pila, Q, matriz, árbol y gráfico?

Cómo verificar si existe una ruta simple entre los nodos a y b de modo que pase a través del nodo c

Cómo obtener maestría en estructuras de datos y algoritmos

¿Por qué la mayoría de las entrevistas de empresas basadas en productos están obsesionadas con los algoritmos en lugar de las habilidades reales de resolución de problemas?

En un montón binario, un nodo con índice i tiene hijos en los índices 2i + 1 y 2i + 2 (cuando la matriz es 0 indexada). ¿Cómo se deriva esta relación?