Раздел «Критический момент» в Kingside: каталог позиций с уровнем сложности и пометками «ход белых/чёрных».

Критический момент: как мы отбираем позиции, в которых работает только один ход

Технический разбор раздела «Критический момент»: Stockfish (MultiPV=10, два прохода 1M и 10M узлов, WDL), Maia ONNX 2400, формула difficulty и пороги отбора позиций.

Мы запустили раздел /critical-moment — тренажёр на позициях с единственным сильным ходом, который не находит даже сильная нейросеть. В статье — устройство отбора: что считает Stockfish, что — Maia, какие пороги и почему позиция «живёт» как пазл только до тех пор, пока её сложность сохраняется. Текст рассчитан на шахматистов от 1500 ELO и тренеров, которые хотят понимать механику.

Что считается «Критическим моментом»

Полупозиция, в которой одновременно:

  • среди всех ходов есть ровно один ход на вершине WDL-оценки (|strongSet| = 1),
  • Maia 2400 оценивает вероятность найти его человеком < 10%,
  • между ним и вторым кандидатом ощутимый разрыв (gap ≥ 0.2),
  • альтернативы «сыграть слабый ход и не проиграть» нет (lossRisk ≤ 0.5).

Все условия проверяются формально, без ручной разметки и категорий («комбинация», «эндшпиль», «жертва»). Пороги пройдены — позиция в выборке. Хотя бы один нет — отбраковка.

Алгоритм отбора

Источник — современные классические партии 2600+ ELO с TWIC. Каждая позиция проходит конвейер.

Шаг 1. Stockfish, MultiPV = 10, два прохода. Первый — быстрый, 1 000 000 узлов: отсеиваются очевидно равные и уже проигранные позиции. Если топ-3 хода по WDL близки — кандидата на «единственный ход» нет, позиция отбрасывается. Второй — глубокий, 10 000 000 узлов, на выживших. Stockfish даёт стабильную WDL-оценку всем десяти ходам; строится strongSet — множество ходов, чья WDL отличается от лучшей не более чем на gap = 0.2. Для прохода требуется |strongSet| = 1.

Шаг 2. Maia ONNX, ELO 2400. На выживших позициях запускается Maia — нейросеть, имитирующая игрока заданного рейтинга. Inference через ONNX Runtime; модель возвращает policy — распределение вероятностей по ходам, как сыграл бы 2400. Сложность:

difficulty = 1 − Σ policy(m), m ∈ strongSet

То есть вероятность, что игрок 2400 не найдёт ни один сильный ход. При |strongSet| = 1 сводится к 1 − policy(bestMove). Порог — difficulty > 0.9.

Шаг 3. Защита от ловушек. Считается lossRisk — суммарная вероятность, что игрок выберет ход, ведущий к проигрышу по WDL. Порог lossRisk ≤ 0.5: позиция должна быть трудной для нахождения, а не «угадайкой». Раздел про мышление, не про ставку.

Чем отличается от классических тактических пазлов

В классических пазлах критерий — форсированная последовательность с матом или выигрышем материала; вариант можно расписать. В «Критическом моменте» критерий иной: ход просто лучший. Это может быть профилактика, перевод фигуры, размен, изменение пешечной структуры — всё, что Stockfish видит как единственный путь, а Maia как непосильную задачу для человека. Отсюда отсутствие градации сложности и категорий: все позиции прошли одни и те же пороги, «лёгких» по определению нет.

Как устроен сам пазл

После хода игрока позиция меняется. Чтобы пазл продолжался, она должна снова удовлетворять критерию. Проверка идёт в браузере — тем же модулем, что и на сервере, переиспользованным из packages/shared: Stockfish WASM + Maia в ONNX Web Runtime.

Цикл на каждом полуходе:

  1. Игрок ходит.
  2. Ход не из strongSet — пазл завершён ошибкой.
  3. Ход правильный — в новой позиции пересчитываются strongSet, difficulty, gap, lossRisk.
  4. Все пороги пройдены — соперник отвечает, цикл повторяется.
  5. Хотя бы один порог не прошёл (позиция «остыла», стала технической, дошло до мата) — пазл завершён успехом.

Длина пазла — следствие позиции, а не разметки. Бывает один полуход, бывает шесть.

Попробовать

/critical-moment — без регистрации для одного пазла; история и статистика — для авторизованных.

Comments (0)

No comments yet. Be the first.

Sign in to leave a comment. Sign in