Знайдіть магічні числа для бітбордів


9

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

Суперницький шаховий веб-сайт дає магічні цифри, але не для того ж картування на дошці.

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

Наприкінці я шукаю чотири речі:

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

Тому я можу використовувати наступний код, щоб знайти ходи Rook на 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 Ви маєте рацію, я змінив це
Ромен

Відповіді:


6

Це дуже відома проблема в шаховому програмуванні. Вам слід подумати про використання чисел, згенерованих Прадюмна Каннан. Д-р Каннан люб’язно представив магічні цифри з відкритим кодом. Його використовують Crafty та кілька інших шахових двигунів, включаючи мій власний.

Більше ви можете прочитати в 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.