Trova numeri magici per bitboard


9

Sto scrivendo un motore di scacchi in C ++ e sto cercando numeri magici per bitboard di mappatura dei file di classifica di Little Endian per generare mosse per pezzi scorrevoli.

Il sito Web degli scacchi rivali fornisce numeri magici ma non per la stessa mappatura della scacchiera.

Il wiki di programmazione degli scacchi fornisce finora alcuni dei migliori numeri magici ma non è esaustivo.

Alla fine cerco quattro cose:

  • maschera di occupazione per ogni piazza
  • numero magico per ogni quadrato
  • turni magici per ogni quadrato
  • sposta l'array di database per ogni quadrato

Quindi posso usare il seguente codice per trovare le mosse di Rook su C3 (per esempio):

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

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

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

Credo che questa domanda sarà più adatta e con risposta su programmers.stackexchange.com o stackoverflow.com .
Pavan Nadig,

1
Non proprio. Questo è ancora responsabile qui. A proposito, i programmatori si concentrano maggiormente sull'astrazione di alto livello. stackoverflow.com sarebbe stato meglio.
SmallChess

@PeteBecker Hai ragione, l'ho cambiato
Romain,

Risposte:


6

Questo è un problema molto noto nella programmazione degli scacchi. Dovresti considerare di usare i numeri generati da Pradyumna Kannan. Il dott. Kannan aveva gentilmente prodotto open source i numeri magici. Viene utilizzato da Crafty e da alcuni altri motori di scacchi, incluso il mio.

Puoi leggere di più su google "Numero magico furbo".

Ho preparato un file zippato per te qui . Si tratta degli stessi file utilizzati nell'app del motore di scacchi SmallChess. Si prega di leggere la documentazione. Fondamentalmente, dovrai chiamare Rmagic (quadrato, occupazione) per i corvi e Bmagic (quadrato, occupazione) per i vescovi. Puoi XOR quelli in una maschera da regina.


Grazie funziona bene. Posso usare / modificare questo codice liberamente nel mio motore di scacchi?
Romain,

Non ci sono restrizioni di licenza. Usa come ti pare. Non sono stato io a farlo, è stato un contributo del dott. Kannan. Per favore accetta la mia risposta se aiuta!
SmallChess,

Ciao, puoi caricare il file MagicMoves.zip su Google Drive? Non riesco a scaricarlo su smallchess (ho riscontrato qualche errore). Grazie.
123

@ 123iamking Il collegamento funziona ancora. Non lo rimuoverò.
SmallChess

@SmallChess - Non chiedo di rimuoverlo, puoi fornire un mirror con Google Drive? Grazie.
123
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.