Encuentra números mágicos para bitboards

9

Estoy escribiendo un motor de ajedrez C ++ y estoy buscando números mágicos para bitboards Little-Endian Rank-File Mapping para generar movimientos para piezas deslizantes.

El sitio web rival de ajedrez da números mágicos pero no para el mismo mapeo de tablero.

El wiki de programación de ajedrez ofrece algunos de los mejores números mágicos hasta ahora, pero no es exhaustivo.

Al final estoy buscando cuatro cosas:

  • máscara de ocupación para cada cuadrado
  • número mágico para cada cuadrado
  • cambios mágicos para cada cuadrado
  • mueve la matriz de la base de datos para cada cuadrado

Entonces puedo usar el siguiente código para encontrar los movimientos de Rook en C3 (por ejemplo):

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])

bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces
Romain
fuente
Creo que esta pregunta se adaptará mejor y se responderá en programmers.stackexchange.com o stackoverflow.com .
Pavan Nadig
1
Realmente no. Esto todavía es responsable aquí. Por cierto, los programadores se centran más en la abstracción de alto nivel. stackoverflow.com hubiera sido mejor.
SmallChess
@PeteBecker Tienes razón, lo cambié
Romain

Respuestas:

6

Este es un problema muy conocido en la programación de ajedrez. Debería considerar usar los números generados por Pradyumna Kannan. El Dr. Kannan había producido amablemente los números mágicos de código abierto. Está siendo utilizado por Crafty y algunos otros motores de ajedrez, incluido el mío.

Puedes leer más en google "Crafty magic number".

He preparado un archivo comprimido para ti aquí . Estos son los mismos archivos que se usan en la aplicación del motor de ajedrez SmallChess. Por favor lea la documentación. Básicamente, deberás llamar a Rmagic (cuadrado, ocupación) para torres y Bmagic (cuadrado, ocupación) para obispos. Puedes convertirlos en una máscara de reina.

SmallChess
fuente
Gracias funciona bien. ¿Puedo usar / modificar libremente este código en mi motor de ajedrez?
Romain
No hay restricción de licencia. Úselo como desee. No fui yo quien lo hizo, fue una contribución del Dr. Kannan. ¡Acepta mi respuesta si te ayuda!
SmallChess
Hola, ¿puedes subir el archivo MagicMoves.zip a GoogleDrive? No puedo descargarlo en smallchess (recibí algún error). Gracias.
123iamking
@ 123iamking El enlace aún funciona. No lo voy a eliminar.
SmallChess
@SmallChess: no le pregunto si desea eliminarlo, ¿puede proporcionar un espejo con Google Drive? Gracias.
123iamking