Trouver des nombres magiques pour les bitboards


9

J'écris un moteur d' échecs C ++ et je recherche des nombres magiques pour les bitboards de mappage de fichiers de rangs Little-Endian pour générer des mouvements pour les pièces coulissantes.

Le site Web d' échecs rival donne des nombres magiques mais pas pour le même mappage de plateau.

Le wiki de programmation d'échecs donne jusqu'à présent certains des meilleurs nombres magiques mais n'est pas exhaustif.

À la fin, je recherche quatre choses:

  • masque d'occupation pour chaque carré
  • nombre magique pour chaque carré
  • décalages magiques pour chaque carré
  • déplace le tableau de base de données pour chaque carré

Je peux donc utiliser le code suivant pour trouver les mouvements de la tour sur C3 (par exemple):

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

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

bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces

Je crois que cette question sera mieux adaptée et répondra à programmers.stackexchange.com ou stackoverflow.com .
Pavan Nadig

1
Pas vraiment. C'est toujours responsable ici. BTW, les programmeurs se concentrent davantage sur l'abstraction de haut niveau. stackoverflow.com aurait été mieux.
SmallChess

@PeteBecker Tu as raison, je l'ai changé
Romain

Réponses:


6

C'est un problème très connu dans la programmation des échecs. Vous devriez envisager d'utiliser les chiffres générés par Pradyumna Kannan. Le Dr Kannan avait aimablement produit en open source les nombres magiques. Il est utilisé par Crafty et quelques autres moteurs d'échecs, dont le mien.

Vous pouvez en lire plus sur google "Crafty magic number".

J'ai préparé un fichier compressé pour vous ici . Ce sont les mêmes fichiers utilisés dans l'application du moteur d'échecs SmallChess. Veuillez lire la documentation. Fondamentalement, vous devrez appeler Rmagic (carré, occupation) pour les tours et Bmagic (carré, occupation) pour les évêques. Vous pouvez XOR ceux-ci dans un masque de reine.


Merci ça marche bien. Puis-je utiliser / modifier librement ce code dans mon moteur d'échecs?
Romain

Il n'y a aucune restriction de licence. Utilisez comme bon vous semble. Ce n'est pas moi qui l'ai fait, c'était une contribution du Dr Kannan. Veuillez accepter ma réponse si cela peut vous aider!
SmallChess

Bonjour, pouvez-vous télécharger le fichier MagicMoves.zip sur GoogleDrive? Je ne peux pas le télécharger sur smallchess (j'ai une erreur). Merci.
123iamking

@ 123iamking Le lien fonctionne toujours. Je ne vais pas l'enlever.
SmallChess

@SmallChess - Je ne demande pas de le supprimer, pouvez-vous fournir un miroir avec Google Drive? Merci.
123iamking
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.