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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.