Решён
Шахматные программы сами просчитывают ходы или человек заложил комбинации?

Алексей Бирюков Алгоритмы
11.2k
5

Играю в шахматы на lichess и часто включаю анализ движком после партии. Stockfish выдает оценку позиции и лучшие ходы практически мгновенно.

Не могу понять: движок реально сам "думает" и просчитывает варианты в реальном времени? Или программисты заранее вбили туда миллионы известных комбинаций и дебютов, а программа просто ищет совпадение в базе?

Если движок считает сам, то как он решает какой ход лучше? Перебирает вообще все возможные варианты до конца партии?

UPDATE: Спасибо всем за ответы! Не ожидал что тема настолько глубокая. Особенно поразило про NNUE и то что современный Stockfish это гибрид классического перебора и нейросети. Пошел читать про альфа-бета отсечение подробнее.
Решение
80
Участник • 2 ответа

Короткий ответ: сам считает. Длинный ниже.


Шахматный движок работает по принципу дерева перебора. Берет текущую позицию, генерирует все легальные ходы, для каждого хода генерирует все ответы противника, для каждого ответа снова все ходы, и так вглубь на N полуходов.

Перебрать ВСЕ варианты до конца партии невозможно. Количество возможных шахматных партий (число Шеннона) примерно 10^120, это больше чем атомов во вселенной. Поэтому используются отсечения.

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

Функция оценки: на конце каждой просчитанной ветки стоит функция, которая оценивает позицию числом (в сантипешках). Учитывает материал, безопасность короля, пешечную структуру, активность фигур, контроль центра и сотни других параметров.

В современном Stockfish используется NNUE (Efficiently Updatable Neural Network). Это нейросеть, которая заменила классическую функцию оценки. Ее натренировали на миллионах позиций, и теперь она оценивает позицию точнее чем любой набор ручных правил.

Дебютная книга (набор заранее заложенных начальных ходов) действительно существует, но это опциональный компонент. Без нее движок все равно играет на уровне 3500+ Эло. Книга просто экономит время в дебюте, чтобы не тратить вычисления на давно разобранные позиции.

Итого: программист задал правила КАК считать (алгоритм перебора + функция оценки). Но конкретные ходы и комбинации движок находит сам в процессе вычисления.

Аватар Алексей Бирюков

Вау, спасибо за разбор. Получается NNUE это нейросетка внутри классического движка? Прям франкенштейн какой то

Аватар Людмила

Ага, именно. Перебор остался классический (альфа-бета), а вот оценочная функция на конце веток теперь нейросеть. Гибридный подход оказался мощнее чем чистый перебор (старый Stockfish) и чем чистая нейросеть (Leela Chess Zero) по отдельности

35
Участник • 4 ответа

Если совсем по простому: представь что ты стоишь на развилке дорог. Каждая дорога ведет к новым развилкам. И так миллиарды раз.

Шахматный движок бежит по этим дорогам с нечеловеческой скоростью (миллионы позиций в секунду), заглядывает вперед на 20-30 развилок и выбирает путь где у него лучшая позиция.

Никаких заранее записанных комбинаций. Чистая математика и скорость процессора.

33
Участник • 3 ответа

Тут надо разделить два поколения движков.

Старая школа (Stockfish до 2020, Crafty, Rybka): чистый перебор + ручная оценочная функция. Программист задал что пешка стоит 1, конь 3, ладья 5 и так далее, плюс бонусы за позиционные факторы. Движок перебирает варианты и оценивает конечные позиции по этим весам. Веса подбирались вручную и через автоматическую настройку.

Новая школа (AlphaZero, Leela Chess Zero): нейросеть выучила шахматы с нуля, играя миллионы партий сама с собой. Ей не давали ни правил оценки, ни дебютных книг. Только правила игры. Она сама выработала понимание позиции.

Современный Stockfish (с NNUE): гибрид. Классический перебор + нейросетевая оценка. Берет лучшее из обоих миров.

Так что ответ на вопрос: и то и другое, но не в том смысле, в каком ты думаешь. Человек не вбивал комбинации. Человек создал механизм поиска и оценки, а конкретные ходы движок находит сам.

19
Эксперт • 2 ответа

Помню в 97-м году Deep Blue обыграл Каспарова и это был шок для всего мира. Тогда IBMовская машина считала 200 миллионов позиций в секунду, и этого хватило чтобы побить лучшего шахматиста планеты.

А Каспаров потом обвинил IBM в жульничестве. Мол, за машиной сидели гроссмейстеры и подсказывали. IBM отказалась предоставить логи и разобрала машину после матча. Так что конспирологи до сих пор спорят))

Но по сути Deep Blue уже тогда считал сам. Перебор + оценочная функция с параметрами от команды гроссмейстеров. Комбинации не вбивали, вбивали принципы оценки позиции.

12
Участник • 4 ответа

Кстати если хочешь увидеть как думает движок своими глазами, открой в lichess страницу анализа и включи отображение вариантов (multiPV). Там прям видно как Stockfish перебирает ветки: глубина 1, 2, 5, 10, 20... и с каждым уровнем глубины оценка может меняться.

https://lichess.org/analysis

Забавно наблюдать как на глубине 15 он считает ход хорошим, а на глубине 25 вдруг находит опровержение и меняет оценку. Это называется "эффект горизонта".

Написать ответ

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.