Finde magische Zahlen für Bitboards


9

Ich schreibe eine C ++ - Schach- Engine und suche nach magischen Zahlen für Little-Endian Rank-File Mapping- Bitboards, um Moves für gleitende Figuren zu generieren.

Die rivalisierenden Schach Website gibt magische Zahlen , aber nicht für das gleiche Board - Mapping.

Das Schachprogrammier-Wiki bietet einige der besten magischen Zahlen, ist aber nicht erschöpfend.

Am Ende suche ich vier Dinge:

  • Belegungsmaske für jedes Quadrat
  • magische Zahl für jedes Quadrat
  • Magie verschiebt sich für jedes Quadrat
  • Verschiebt das Datenbankarray für jedes Quadrat

So kann ich den folgenden Code verwenden , um die Bewegungen des Turmes auf C3 zu finden (zum Beispiel):

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

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

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

Ich glaube, diese Frage ist besser geeignet und wird unter programmers.stackexchange.com oder stackoverflow.com beantwortet .
Pavan Nadig

1
Nicht wirklich. Dies ist hier noch zu verantworten. Übrigens konzentrieren sich Programmierer mehr auf Abstraktion auf hoher Ebene. stackoverflow.com wäre besser gewesen.
SmallChess

@ PeteBecker Sie haben Recht, ich habe es geändert
Romain

Antworten:


6

Dies ist ein sehr bekanntes Problem bei der Schachprogrammierung. Sie sollten die von Pradyumna Kannan generierten Zahlen verwenden. Dr. Kannan hatte freundlicherweise Open Source für die magischen Zahlen produziert. Es wird von Crafty und einigen anderen Schach-Engines verwendet, einschließlich meiner eigenen.

Sie können mehr von Google "Crafty Magic Number" lesen.

Ich habe eine ZIP - Datei für Sie vorbereitet hier . Dies sind die gleichen Dateien, die in der SmallChess Chess Engine App verwendet werden. Bitte lesen Sie die Dokumentation. Grundsätzlich müssen Sie Rmagic (Quadrat, Belegung) für Türme und Bmagic (Quadrat, Belegung) für Bischöfe nennen. Sie können diese in eine Königinmaske XOR.


Danke, es funktioniert gut. Kann ich diesen Code in meiner Schachengine frei verwenden / ändern?
Romain

Es gibt keine Lizenzbeschränkung. Verwenden Sie, wie Sie möchten. Ich habe es nicht getan, es war ein Beitrag von Dr. Kannan. Bitte akzeptieren Sie meine Antwort, wenn es hilft!
SmallChess

Hallo, können Sie die Datei MagicMoves.zip auf GoogleDrive hochladen? Ich kann es nicht bei smallchess herunterladen (ich habe einen Fehler erhalten). Vielen Dank.
123iamking

@ 123iamking Der Link funktioniert noch. Ich werde es nicht entfernen.
SmallChess

@SmallChess - Ich frage nicht nach dem Entfernen. Können Sie einen Spiegel mit Google Drive bereitstellen? Vielen Dank.
123iamking
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.