|
||
В этой статье я попытаюсь описать свой битбоард генератор ходов. Генератор
используется в Ифрите серии б(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 |