Что такое Stockfish
Stockfish — сильнейший шахматный движок с открытым исходным кодом. Им пользуются и профессионалы, и любители, на нём работают сайты для разбора партий, в том числе chess.rodeo. Ниже о том, как он ищет ход и откуда берётся оценка позиции.
Как движок выбирает ход
Шахматный движок выбирает ход перебором, в четыре шага:
- Составляет список всех ходов, возможных в позиции.
- Перебирает варианты, которые получаются после каждого из них.
- Ставит числовую оценку позициям в конце вариантов.
- Выбирает ход, который ведёт к лучшей оценке.
Поиск вариантов
Альфа-бета отсечение
В основе поиска лежит минимакс: движок исходит из того, что обе стороны каждым ходом выбирают лучшее для себя. С альфа-бета отсечением он не досчитывает вариант, который уже не может повлиять на выбор хода. Поэтому за то же время Stockfish заходит намного глубже, чем при полном переборе.
Глубина и скорость
На глубине 20 Stockfish перебирает порядка миллиона позиций, точное число зависит от позиции. На быстром многоядерном процессоре он проверяет десятки миллионов позиций в секунду.
Выборочный поиск
Разные ходы Stockfish считает на разную глубину. Дальше остальных он просматривает:
- взятия и шахи;
- ходы, после которых оценка резко изменилась;
- варианты, которые оказались сильными на предыдущих проходах поиска.
Оценка позиции
Классическая оценка
В старых версиях Stockfish функцию оценки писали вручную. Она складывалась из нескольких частей:
- Материал. У каждой фигуры своя ценность, и в миттельшпиле она другая, чем в эндшпиле. Таблица «пешка 100, конь 320, слон 330, ладья 500, ферзь 900», которую часто цитируют, к Stockfish не относится: она из учебной «упрощённой функции оценки» Томаша Михневского.
- Позиционные признаки. Активность и подвижность фигур, пешечная структура (сдвоенные, изолированные и проходные пешки), безопасность короля, контроль ключевых полей и взаимодействие фигур.
- Стадия партии. В дебюте и в эндшпиле важны разные признаки. В миттельшпиле король в центре попадает под атаку, а в эндшпиле его туда и ведут.
NNUE: оценка нейросетью
С версии 12 Stockfish оценивает позиции нейросетью NNUE (Efficiently Updatable Neural Network), а в современных версиях ручной оценки в движке уже нет.
NNUE обучена на миллиардах позиций и устроена так, чтобы оценка считалась быстро. Позиция на доске переводится во входные признаки, они проходят через слои сети, и на выходе получается оценка. После хода сеть пересчитывает только ту часть, которую он затронул, отсюда «efficiently updatable» в названии.
Нейросеть оценивает точнее ручной функции. Она находит закономерности, которые слишком сложны, чтобы записать их правилами, и учитывает позиционные тонкости, которые шахматисты знали, но не могли выразить числом.
Обучают сеть на позициях из партий движков, в том числе Leela Chess Zero. Для каждой позиции берут оценку, которую дал поиск, и результат партии, в которой она встретилась.
Как читать оценку Stockfish
Оценка в сантипешках
Stockfish считает оценку в сантипешках, сотых долях пешки. На экране её обычно показывают в пешках:
- +1.00: у белых перевес в одну пешку;
- -2.50: у чёрных перевес в две с половиной пешки;
- 0.00: примерное равенство.
Мат
Если найден форсированный мат, вместо оценки показывается число ходов до него:
- M5: белые ставят мат в 5 ходов;
- -M3: мат в 3 хода ставят чёрные.
Главный вариант
Главный вариант, или PV (principal variation), состоит из ходов, которые Stockfish считает лучшими за обе стороны:
+0.25 Nf3 d5 e3 Nf6 d4 e6 Bd3 c5Глубина расчёта
Что такое глубина
Глубина измеряется в полуходах. Глубина 10 значит 5 ходов за каждую сторону, глубина 20 значит 10. Число условное: слабые варианты движок бросает раньше, а взятия и шахи досчитывает дальше.
Чем глубже, тем точнее
С ростом глубины Stockfish находит более длинную тактику и точнее оценивает позицию: в расчёт попадают последствия ходов, до которых на малой глубине он не доходил.
После глубины 20 оценка меняется мало
Главное движок находит на первых 15–20 полуходах. Между глубиной 20 и глубиной 40 оценка редко меняется резко, разве что в острых тактических позициях.
Где Stockfish ошибается
Эффект горизонта
Движок не видит того, что лежит дальше глубины поиска. Тактический удар может выглядеть выигрывающим на глубине 20, а опровергаться ответным ударом, который виден только на глубине 25.
Крепости
Stockfish может оценить ничейную крепость как выигрыш: он не видит, что сильнейшая сторона не может усилить позицию.
Долгие планы
Есть позиции, где всё решает план на двадцать с лишним ходов без единого форсированного варианта. Такие планы даются движку хуже, чем тактика.
Как chess.rodeo использует Stockfish
Где считается разбор
Бесплатно партию разбирает Stockfish 18 в вашем браузере на глубине 15. Позиции, которые уже есть в нашей базе оценок, приходят оттуда готовыми. В Pro глубину можно поднять до 22 или отдать расчёт серверу.
Несколько линий
Панель движка показывает несколько линий, по умолчанию пять. Их число меняется в настройках.
Метки ходов
Метку ход получает по тому, сколько процентных пунктов вероятности победы он потерял по сравнению с лучшим ходом:
| Метка | Потеря вероятности победы |
|---|---|
| Лучший | до 1 п. п. |
| Превосходный | 1–2 п. п. |
| Хороший | 2–5 п. п. |
| Неточность | 5–10 п. п. |
| Ошибка | 10–25 п. п. |
| Зевок | больше 25 п. п. |
«Теория», «Блестящий», «Отличный» и «Промах» ставятся по отдельным правилам, они описаны в статье о точности.
Как пользоваться разбором движка
- Разберитесь, чем лучший ход лучше вашего. Посмотрите, какую угрозу он создаёт и чему мешает у соперника.
- Смотрите дальше первой линии. Второй и третий ходы движка часто почти не уступают первому, их тоже можно играть. Полезно понять, на чём они теряют.
- Учитывайте положение в партии. В проигранной позиции ход, который движок считает ошибкой, бывает лучшим практическим шансом: первая линия движка тоже проигрывает, только медленнее.
- Не гонитесь за глубиной. Для разбора своих партий хватает глубины 15–20. Глубина 30 и больше нужна для дебютных новинок и позиций с длинными форсированными вариантами.
Импортируйте партию и посмотрите, как Stockfish оценит ваши ходы.