Skip to content

Instantly share code, notes, and snippets.

@Aleksey-Danchin
Created September 5, 2025 11:03
Show Gist options
  • Select an option

  • Save Aleksey-Danchin/49fd9faf5bd74882fecab893431de763 to your computer and use it in GitHub Desktop.

Select an option

Save Aleksey-Danchin/49fd9faf5bd74882fecab893431de763 to your computer and use it in GitHub Desktop.
ChatGPT о регулировки работы stackfish для зеркального режима

Калибровка Stockfish под «зеркальный режим»

Идея: дать игроку возможность сыграть с компьютером ровно своего уровня. Для этого нужно откалибровать параметры движка (Skill Level, Depth, Timeout) так, чтобы профиль ошибок движка соответствовал профилю игроков с целевым рейтингом.


1. Эталон «человека» по рейтингам

  1. Разбить партии по корзинам рейтинга (например, 800--999, 1000--1199, ...).
  2. Для каждой позиции считать:
    • ход игрока,
    • рейтинг на момент хода,
    • фазу (дебют / миттельшпиль / эндшпиль),
    • материал, темп.
  3. Рассчитать метрики:
    • ACPL (average centipawn loss),
    • Blunder rate (ошибки >200 cp),
    • Miss rate по тактикам,
    • Move-match@k (совпадение с ходами «оракула»).

Оракул = Stockfish в максимальном режиме (depth=35+, без ограничений).


2. Сила движка как функция параметров

Для набора параметров θ = (skill, depth, movetime): - Прогнать Stockfish с θ по эталонным позициям. - Сравнить его ходы с оракулом. - Посчитать те же метрики (ACPL, blunder rate, match).


3. Функция потерь

Для каждой корзины рейтинга R задать целевой вектор метрик T(R).
Для θ рассчитать вектор M(θ).

Функция потерь:

L(θ; R) = w1*(ACPL(θ)-ACPL_R)^2
        + w2*(Blunder(θ)-Blunder_R)^2
        + w3*(Match(θ)-Match_R)^2

4. Минимизация и карта «рейтинг → параметры»

  • Для каждой корзины рейтинга минимизировать L.
  • Найти θ(R).
  • Сгладить зависимости: depth(R), movetime(R) --- непрерывные, skill(R) --- ступенчатая.

5. Учёт фаз партии

Ошибки распределены по фазам. Добавляем фазовый компонент:

L(θ; R) = Σ_F α_F * L_F(θ; R, F)

где α_F = доля фаз (дебют/миттель/эндшпиль).


6. «Человеческий шум»

  • Использовать ограничение по времени/глубине, а не только Skill Level.
  • Добавлять шум в оценку при близких вариантах (разница <30--50 cp).
  • Для низких рейтингов: вероятность пропуска тактики.

7. Онлайн-адаптация

  • Во время партии измерять ACPL и blunder rate игрока.
  • Оценивать рейтинг R̂ игрока.
  • Подстраивать θ(R̂) плавно каждые N ходов.

8. Таблица-ориентир (пример для blitz 3+2)

Цель ELO Skill Depth Время/ход


900 2 6--8 80--120 мс 1100 4 8--10 120--180 мс 1300 6 10--12 180--250 мс 1500 8 12--13 250--350 мс 1700 10 13--14 350--500 мс 1900 12 14--15 500--700 мс 2100 14 15--16 0.8--1.2 с 2300 16 16--17 1.2--1.8 с 2500 18--20 18--20 2.0--3.0 с

(ориентир, точная калибровка зависит от вашей базы)


9. Проверка качества

  • Использовать тест-позиции вне обучающей базы.
  • Сравнивать кривые точности по сложности позиций.
  • Проверять профиль ошибок по фазам и материалу.

10. Технические детали

  • Кэшировать оценки оракула по FEN.
  • Запускать движок батчами.
  • Нормировать метрики к контролю времени.
  • Версионировать маппинг «рейтинг → θ» при обновлении движка.

Вывод

Так можно построить карту «рейтинг → настройки Stockfish» и реализовать режим, где движок подстраивается под силу игрока. Это и будет настоящий «зеркальный режим».

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment