вторник, 21 июля 2026 г.

Фиштест

 Fishtest — это распределенная краудсорсинговая сеть тестирования, которая является главным секретом силы Stockfish. Любое изменение в коде движка (будь то новая формула LMR, изменение маржи для шахов или веса в нейросети NNUE) принимается только после того, как докажет свою эффективность на Fishtest.

Система работает по принципу распределенных вычислений, аналогично проектам вроде SETI@home или майнингу криптовалют.

💻 Как устроена сеть Fishtest?

  1. Волонтеры: Обычные пользователи со всего мира скачивают специальную клиентскую программу (скрипт на Python). Она работает в фоновом режиме и использует свободные ядра процессора для симуляции шахматных партий.
  2. Сервер-координатор: Центральный сервер Fishtest хранит базу задач (тестов), раздает код волонтерам, собирает результаты сыгранных партий и ведет статистику.
  3. Разработчики: Когда программист хочет улучшить формулу (например, изменить коэффициент редукции ходов), он отправляет свой измененный код (пулл-реквест) на Fishtest.

⚔️ Процесс тестирования: Сражение версий

Когда запускается новый тест, Fishtest компилирует две версии движка:
  • Master (Базовая) — текущая официальная версия Stockfish.
  • Test (Модифицированная) — версия автора с измененным кодом.
Компьютеры волонтеров начинают тоннами играть партии между Master и Test.
  • Партии играются с очень коротким контролем времени (например, 10 секунд на партию + 0.1 секунды на ход). Это позволяет играть миллионы партий в сутки.
  • Чтобы партии были разнообразными, они всегда начинаются из специально подобранных случайных позиций (из дебютных книг). Каждая позиция играется дважды, со сменой цвета фигур, чтобы исключить фактор везения за белых.

📊 Математика отбора: Алгоритм SPRT

Главная фишка Fishtest — использование продвинутой статистической модели последовательного анализа Вальда, которая называется SPRT (Sequential Probability Ratio Test).
Движку не нужно играть фиксированное число партий (например, ровно 100 000). Вместо этого после каждой сыгранной партии система пересчитывает вероятность победы новой версии и сопоставляет её с границами:
  1. H0 (Гипотеза «Мусор»): Изменение ухудшает движок или ничего не меняет. Если график результатов пробивает нижнюю границу, тест мгновенно останавливается (Fail), код отклоняется. Это экономит кучу машинного времени.
  2. H1 (Гипотеза «Прогресс»): Изменение делает движок сильнее хотя бы на 0.5–2 пункта рейтинга Эло. Если график пробивает верхнюю границу, тест останавливается с успехом (Pass), и код вливается в основную ветку Stockfish.
Для стандартного теста (STC — Short Time Control) границы обычно выставляются так, чтобы подтвердить прирост рейтинга. В среднем для успешного прохождения теста требуется сыграть от 20 000 до 160 000 партий. Если результат колеблется около нуля, тест может затянуться, пока статистика не станет абсолютно точной.

🏎️ Уровни тестирования

Если код прошел базовый фильтр, это еще не всё. Изменение должно доказать свою силу в разных условиях:
  • STC (Короткий контроль): Первый этап. Скоростные партии для отсева явного брака.
  • LTC (Длинный контроль): Если STC пройден, запускается тест на длинном контроле (например, 60 секунд + 0.6 секунды на ход). Это критически важно для формул LMR и шахов, так как некоторые идеи работают на быстрой глубине, но начинают «мазать» на глубоком просчете.
  • SMP (Многопоточность): Проверка того, не ломает ли новая формула логику распределения задач между несколькими ядрами процессора (Lazy SMP).
За всю историю Fishtest было сыграно несколько миллиардов партий. Именно эта жесткая математическая селекция позволяет Stockfish непрерывно расти в силе годами, отбирая крупицы эффективности по 1–2 пункта Эло за раз.
Если хотите, могу подсказать, где в реальном времени посмотреть на текущие тесты Fishtest, или рассказать, как авторы подбирают дебютные книги для этих тестов.

Следить за работой Fishtest в реальном времени можно на официальном портале проекта. Главный сайт, где отображаются все текущие, завершенные и отклоненные тесты, находится по адресу:
🔗 tests.stockfishchess.org [1, 2]
Там вы увидите «живые» графики SPRT, количество волонтеров онлайн, а также параметры формул, которые разработчики пытаются улучшить в данный момент. [2]

📚 Как авторы подбирают дебютные книги для Fishtest?

Подбор дебютных позиций для тестирования Stockfish — это сложнейшая математическая задача. Если дать движкам играть из классической начальной расстановки, более 95% партий завершатся вничью из-за колоссальной силы защиты современного Stockfish. Тест просто не сможет выявить, какой код сильнее, так как все партии будут одинаковыми. [3, 4]
Чтобы решить эту проблему, авторы используют специальные дебютные книги, созданные по строгим критериям: [2]

1. Несбалансированные дебюты (UHO — Unbalanced Human Openings)

Основной инструмент Fishtest — книги семейства UHO (например, UHO_4060_v3 или свежие версии UHO 2024). [5, 6]
  • Как они создаются: Компьютер берет реальные человеческие дебюты (из гроссмейстерских баз) длиной в 6–8 ходов (12–16 полуходов), но фильтрует их по строгой оценке. [5, 6]
  • Критерий: Позиция на выходе из книги должна давать одной из сторон (обычно белым) небольшой, но ощутимый перевес — в диапазоне от +0.50 до +1.00 пешки (50–100 сантипешек). [6]
  • Зачем это нужно: В такой острой и слегка «сломанной» позиции движки не могут просто засушить игру. Им приходится либо яростно защищаться, либо реализовывать преимущество. Процент ничьих падает с 95% до 45–55%, благодаря чему разница в силе кода становится видна очень быстро. [6]

2. Обязательный зеркальный матч (Смена цвета)

Чтобы тест был абсолютно честным, каждая выбранная позиция играется ровно два раза (в рамках пары партий): [1, 2]
  • В первой партии Версия А играет белыми, а Версия Б — черными.
  • Во второй партии они меняются цветами в этой же самой позиции.
  • Если позиция изначально была плохой для черных, и обе версии проиграли за черных, то счет в паре будет 1:1. Но если новая формула LMR или Singular Extensions помогла движку удержать ничью или победить в худшей позиции, модифицированная версия вырывается вперед по очкам.

3. Рандомизация и длина линий (Ply)

На Fishtest часто используют книги фиксированной глубины, например 8-ply (8 полуходов / 4 полных хода) или 12-ply.
Позиции внутри книги перемешиваются случайным образом. Это гарантирует, что движок тестируется во всех типах миттельшпиля — от закрытых староиндийских структур до сверхострых вариантов сицилианской защиты. [5]
Если вы зайдете на сайт Fishtest, обратите внимание на границу теста: там всегда написано название используемой книги (например, book: UHO_4060_v3.epd). [6]
Если хотите, мы можем разобрать, как вы сами можете запустить Fishtest на своем компьютере, чтобы помочь разработчикам Stockfish, или обсудить, какие еще параметры (кроме шахов) сейчас настраивают авторы?

Комментариев нет:

Отправить комментарий