Znajdź magiczne liczby dla bitboardów

9

Piszę silnik szachowy C ++ i szukam magicznych liczb dla bitboardów Little-Endian Rank-File Mapping do generowania ruchów dla przesuwanych elementów.

Rywal szachy strona daje magiczne liczby, ale nie do tego samego mapowania pokładzie.

Wiki programowania szachowego podaje jedne z najlepszych jak dotąd magicznych liczb, ale nie jest wyczerpujące.

Na koniec szukam czterech rzeczy:

  • maska ​​zajętości dla każdego kwadratu
  • magiczna liczba dla każdego kwadratu
  • magiczne przesunięcia dla każdego kwadratu
  • przenosi tablicę bazy danych dla każdego kwadratu

Więc mogę użyć następującego kodu, aby znaleźć ruchy Wieży na C3 (na przykład):

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

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

bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces
Romain
źródło
Wierzę, że to pytanie będzie lepiej pasowało i odpowiedź na programmers.stackexchange.com lub stackoverflow.com .
Pavan Nadig,
1
Nie całkiem. To jest nadal odpowiedzialne tutaj. BTW, programiści bardziej skupiają się na abstrakcji wysokiego poziomu. stackoverflow.com byłby lepszy.
SmallChess
@PeteBecker Masz rację, zmieniłem to
Romain

Odpowiedzi:

6

Jest to bardzo dobrze znany problem w programowaniu szachowym. Powinieneś rozważyć użycie liczb wygenerowanych przez Pradyumnę Kannan. Dr Kannan uprzejmie opracował magiczne liczby open source. Jest używany przez Podstępnego i kilka innych silników szachowych, w tym mój własny.

Możesz przeczytać więcej w Google „Podstępna magiczna liczba”.

Mam przygotowany skompresowanego pliku dla ciebie tutaj . Są to te same pliki, które są używane w aplikacji silnika szachowego SmallChess. Proszę przeczytać dokumentację. Zasadniczo musisz zadzwonić do Rmagic (kwadrat, obłożenie) dla wież i Bmagic (kwadrat, obłożenie) dla biskupów. Możesz XOR je w maskę królowej.

SmallChess
źródło
Dzięki, działa dobrze. Czy mogę swobodnie używać / modyfikować ten kod w moim silniku szachowym?
Romain
Nie ma ograniczeń licencji. Używaj, jak chcesz. To nie ja to zrobiłem, to był wkład dr Kannana. Proszę przyjąć moją odpowiedź, jeśli to pomoże!
SmallChess
Witaj, czy możesz przesłać plik MagicMoves.zip do GoogleDrive? Nie mogę go pobrać w małych rozmiarach (mam błąd). Dzięki.
123iamking
@ 123iamking Link nadal działa. Nie zamierzam tego usuwać.
SmallChess
@SmallChess - Nie pytam o usunięcie, czy możesz podać kopię lustrzaną na Dysku Google? Dzięki.
123iamking