Короткий ответ: сам считает. Длинный ниже.
Шахматный движок работает по принципу дерева перебора. Берет текущую позицию, генерирует все легальные ходы, для каждого хода генерирует все ответы противника, для каждого ответа снова все ходы, и так вглубь на N полуходов.
Перебрать ВСЕ варианты до конца партии невозможно. Количество возможных шахматных партий (число Шеннона) примерно 10^120, это больше чем атомов во вселенной. Поэтому используются отсечения.
Альфа-бета отсечение: если движок видит что ветка заведомо хуже уже найденного варианта, он обрезает ее целиком и не тратит время на дальнейший анализ.
Функция оценки: на конце каждой просчитанной ветки стоит функция, которая оценивает позицию числом (в сантипешках). Учитывает материал, безопасность короля, пешечную структуру, активность фигур, контроль центра и сотни других параметров.
В современном Stockfish используется NNUE (Efficiently Updatable Neural Network). Это нейросеть, которая заменила классическую функцию оценки. Ее натренировали на миллионах позиций, и теперь она оценивает позицию точнее чем любой набор ручных правил.
Дебютная книга (набор заранее заложенных начальных ходов) действительно существует, но это опциональный компонент. Без нее движок все равно играет на уровне 3500+ Эло. Книга просто экономит время в дебюте, чтобы не тратить вычисления на давно разобранные позиции.
Итого: программист задал правила КАК считать (алгоритм перебора + функция оценки). Но конкретные ходы и комбинации движок находит сам в процессе вычисления.
Вау, спасибо за разбор. Получается NNUE это нейросетка внутри классического движка? Прям франкенштейн какой то
Ага, именно. Перебор остался классический (альфа-бета), а вот оценочная функция на конце веток теперь нейросеть. Гибридный подход оказался мощнее чем чистый перебор (старый Stockfish) и чем чистая нейросеть (Leela Chess Zero) по отдельности