| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Применение альфа-бета отсечения в шахматах |
| Автор: ButchelorOfHumanities 31.12.2010, 09:50 | ||||
Дело обстоит так: я (школьник, а не прожженный программист) пишу шахматную программу под спор. Основной алгоритм - минимакс с альфа-бета отсечением. Вот псевдокод:
Где node - некоторая позиция на доске, depth - глубина расчета в полуходах, child - некоторый ход одного из игроков, alpha и beta - минимальный и максимальный коэффициенты сожаления соответствующие интересам обоих играков. Если компьютер играет белыми, то функция вызывается так: maximize(текущаяПозиция, числоПолуходов, -бесконечность, +бесконечновть) Проблема заключается в следующем: Если на доске есть возможность поставить мат в два хода (четыре полухода) и вызывается функция maximize(текущаяПозиция, 4, -бесконечность, +бесконечновть), то комп ставит мат в два хода, однако если вызвать функцию maximize(текущаяПозиция, 6, -бесконечность, +бесконечновть) при той же позиции на доске, то вместо быстрого мата в два хода комп ставит более долгий мат в три. Иными словами - выше приведенный алгоритм не учитывает приоритетность быстрого выигрыша. Пока что я придумал два возможных решения: 1) Последовательный вызов maximize(текущаяПозиция, 2, -бесконечность, +бесконечновть), maximize(текущаяПозиция, 4, -бесконечность, +бесконечновть), maximize(текущаяПозиция, 6, -бесконечность, +бесконечновть) - то есть поиск мата в один, два и три хода последовательно. 2) Изманение алгоритма на:
Так что игроки получают маленький штраф за более длинный путь к победе. Оба моих решения этой проблемы мне лично кажутся какими-то корявыми. Возможно есть более простое и эстетичное решение которое мне (дилетанту) не пришло в голову? |