Найти магические числа для битбордов


9

Я пишу шахматный движок C ++ и ищу магические числа для битовых карт Little-Endian Rank-File Mapping, чтобы генерировать движения для скользящих фигур.

Состязательный шахматный сайт дает магические числа, но не для того же картографирования.

Вики по шахматному программированию пока дают одни из лучших магических чисел, но не являются исчерпывающими.

В конце я ищу четыре вещи:

  • маска заполнения для каждого квадрата
  • магическое число для каждого квадрата
  • магические сдвиги для каждого квадрата
  • перемещает массив базы данных для каждого квадрата

Поэтому я могу использовать следующий код, чтобы найти ходы ладьи на C3 (например):

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

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

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

Я полагаю, что этот вопрос лучше подойдет и ответит на сайте programmers.stackexchange.com или stackoverflow.com .
Паван Надиг

1
На самом деле, нет. Это все еще ответственно здесь. Кстати, программисты больше внимания уделяют высокоуровневой абстракции. stackoverflow.com был бы лучше.
SmallChess

@PeteBecker Вы правы, я изменил это
Romain

Ответы:


6

Это очень известная проблема в шахматном программировании. Вам следует рассмотреть возможность использования чисел, сгенерированных Прадьюмной Каннан. Доктор Каннан любезно создал магические числа с открытым исходным кодом. Его используют Крафти и несколько других шахматных движков, включая мой собственный.

Вы можете прочитать больше по Google "Лукавый магический номер".

Я подготовил архив для вас здесь . Это те же файлы, которые используются в шахматном приложении SmallChess. Пожалуйста, прочитайте документацию. По сути, вам нужно вызвать Rmagic (квадрат, размещение) для грачей и Bmagic (квадрат, размещение) для епископов. Вы можете XOR те в маску королевы.


Спасибо, это работает хорошо. Могу ли я свободно использовать / изменять этот код в своем шахматном движке?
Ромен

Там нет ограничения лицензии. Используйте как вам угодно. Это был не я, это был вклад доктора Каннана. Пожалуйста, примите мой ответ, если это поможет!
SmallChess

Привет, вы можете загрузить файл MagicMoves.zip в GoogleDrive? Я не могу скачать его на smallchess (я получил ошибку). Спасибо.
123iamking

@ 123iamking Ссылка все еще работает. Я не собираюсь это удалять.
SmallChess

@ SmallChess - я не спрашиваю о его удалении. Можете ли вы предоставить зеркало с Google Drive? Спасибо.
123iamking
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.