Bitmap Move Generation

на главную страницу

В этой статье я попытаюсь описать свой битбоард генератор ходов. Генератор используется в
Ифрите серии б(Ifrit_b).

Генератор состоит из двух частей: генератора списка ходов и реализатора ходов.
Генератор списка ходов выдает список избыточных ходов.
Т.е. на вход поступает доска, а на выходе получаем список избыточных ходов. Таким
образом, генератор псевдолегальный, т.е. он не проверяет под шахом ли наш король после
нашего хода. Проверка на легальность проводится в поиске.
Реализатор ходов делает ходы из списка. т.е. на вход поступает список а на выходе доска с реализованным ходом.
Так как описание получилось большим, я разбил его на несколько подразделов.

1) БИТОВОЕ ПРЕДСТАВЛЕНИЕ ДОСКИ
2) ОРГАНИЗАЦИЯ СПИСКА ХОДОВ
3) БИТОВЫЙ ГЕНЕРАТОР ВЗЯТИЙ + ПРЕВРАЩЕНИЯ ПЕШКИ
4) БИТОВЫЙ ГЕНЕРАТОР ОСТАЛЬНЫХ ХОДОВ
5) РЕАЛИЗАЦИЯ ХОДА ВПЕРЕД
6) РЕАЛИЗАЦИЯ ХОДА НАЗАД
7) ФУНКЦИИИ "FIRST ONE" и "LAST ONE"



Тестирование "чистого" генератора ходов.

В таблице колонки:
Глубина перебора, время перебора, количество узлов на слое, скорость перебора .

начальная позиция
FEN: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Ifrit_b2_11 Beta:
1     00:00    20                      -
2     00:00    400                    -
3     00:00    8.902                 -
4     00:00    197.281             12.912.687
5     00:00    4.865.609          10.479.776
6     00:12    119.060.324      10.912.750
7     05:30    3.195.901.860   10.428.062
Баг в Арене. Ифрит выдает 3195901860,  а Арена печатает 3.195.900 860

превращения
FEN: n1n5/PPPk4/8/8/8/8/4Kppp/5N1N b - - 0 1
Ifrit_b2_11  Beta:
1     00:00    24                    -
2     00:00    496                  -
3     00:00    9.483               -
4     00:00    182.838          12.856.066
5     00:00    3.605.103        8.999.867
6     00:09    71.179.139      8.755.936

хорошая тестовая позиция
FEN: r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1
Ifrit_b2_11  Beta:
1     00:00    48
2     00:00    2.039
3     00:00    97.862                6.663.266
4     00:00    4.085.603          10.704.736
5     00:19    193.690.690      10.355.133
6     13:29    8.031.647.685   10.416.288
Баг в Арене. Ифрит выдает 8031647685,  а Арена печатает 8.031.645 685