Приложение: Модель статистики — выравнивание XG / gnuBG / blunderDB
На этой странице описано, как blunderDB вычисляет показатели, которые он выводит — PR (Performance Rating), Snowie Error Rate, потерю MWC, удачу и победы/поражения, — и как они согласуются с eXtreme Gammon (XG) и gnuBG (открытый эталон).
Формальные определения
PR (Performance Rating)
PR (в gnuBG он же «error rate per decision») измеряет среднюю стоимость ошибок на одно засчитанное решение, в шкале eXtreme Gammon и gnuBG: это средняя ошибка эквити, умноженная на 500.
Числитель — это сумма абсолютных значений ошибок EMG (cubeful equity) по всем решениям в периметре.
Знаменатель \(N_\text{compté}\) — количество засчитанных решений (см. ниже).
Множитель 500 — соглашение XG и gnuBG (см.
gnubg/formatgs.c:399–409). Это не перевод в миллипункты: средняя ошибка эквити в 0,010 — то есть 10 миллипунктов (mpt) — даёт PR, равный 5,0. А вот ошибки отдельной позиции действительно читаются в миллипунктах, то есть в тысячных долях эквити: порог бландера ниже, фильтры поискаe>иE>, гистограмма величин на панели Stats.
Snowie Error Rate
Snowie ER использует тот же числитель, что и PR, но знаменатель — это общее количество ходов обоих игроков, включая вынужденные ходы (все решения, без фильтрации):
Источник: gnubg/formatgs.c:415–424.
Snowie ER более стабилен между инструментами, поскольку его знаменатель не зависит от фильтрации вынужденных/тривиальных решений. Он служит перекрёстной метрикой между XG, gnuBG и blunderDB.
Важно
Фильтр «Игрок» действует только на числитель. Выбор игрока ограничивает суммируемые ошибки его собственными решениями, но знаменателем остаётся число ходов шашками обоих игроков по матчам, которые оставил фильтр. Именно это отличает Snowie ER от PR и объясняет следующее свойство: в базе, содержащей только матчи между двумя игроками, сумма их двух Snowie ER в точности равна нефильтрованному Snowie ER.
Примечание
Snowie ER игрока обычно составляет около половины его PR, так как знаменатель включает ходы обоих игроков, тогда как PR использует только решения данного игрока.
Потеря MWC (Match Winning Chance)
Потеря MWC выражает в процентных пунктах вероятности выигрыша матча суммарный эффект ошибок игрока. Для каждого решения ошибка EMG преобразуется в MWC через таблицу MET (Match Equity Table) при текущем счёте:
Источник: gnubg/analysis.c:1449–1464.
Удача (luck)
Удача броска — это разница между тем, что дали кости, и тем, что они дают в среднем:
сумма берётся по 36 исходам броска (30 недубльных бросков для первого хода партии, который не может быть дублем). Положительное значение означает удачный бросок. Ссылка: gnubg/analysis.c:199–269 (LuckNormal / LuckFirst, cubeful-оценка на 0 ply).
Важно
blunderDB никогда не вычисляет удачу: встроенный оценщик служит не для этого. Он берёт как есть значение, записанное инструментом, который анализировал матч, — ErrLuck у eXtreme Gammon, свойство LU у gnuBG, — предварительно убедившись, что оба используют одно соглашение (та же единица, положительное = повезло).
Практические следствия:
Форматы, которые не переносят удачу (BGF, Jellyfish .mat), не дают никакого значения.
У уже импортированных матчей её тоже нет: до версии схемы 2.15.0 удача не сохранялась, и восстановить её по базе нечем. Чтобы её получить, исходные файлы нужно импортировать заново.
Отсутствующее значение означает неизвестно, но не ноль: ноль — это по-настоящему нейтральный бросок. Поэтому средние удачи делятся только на число бросков, чья удача известна.
Матч, в котором у всех бросков удача была бы ровно нулевой, считается в этом отношении непроанализированным (eXtreme Gammon пишет 0 и для «нейтрально», и для «не вычислено»): его броски остаются неизвестными. У gnuBG различие явное — неоценённый бросок несёт
LU[-inf]— и такие броски тоже остаются неизвестными, а не превращаются в значение.
Победы и поражения
blunderDB не хранит победителя на уровне матча: хранятся только очки каждой партии. Поэтому результат выводится при отображении, суммированием очков по местам:
Матч до N очков — победитель = игрок, набравший N. Если никто не набрал, матч не завершён (обрезанный журнал, отказ от игры) и не засчитывается ни в победы, ни в поражения — никому.
Игра на деньги (без цели) — победитель = тот, кто взял больше очков; при равенстве ни победы, ни поражения. Это соглашение gnuBG о результате сессии (+1 / 0 / −1,
gnubg/relational.c).
Следствие, которое стоит помнить при чтении вкладки «Игроки»: победы + поражения могут быть меньше числа матчей. Разница — это незавершённые матчи.
Ошибки и бландеры
Решение засчитывается как ошибка, как только связанная с ним ошибка эквити достигает порога ошибки библиотеки, и как бландер, как только она достигает её порога бландера. Оба задаются на вкладке Библиотека настроек и по умолчанию равны 0,050 и 0,100 EMG (50 и 100 миллипунктов). Сравнение включающее: ошибка ровно в 0,100 — это бландер при пороге по умолчанию, на всех экранах (разбивка по действиям с кубом, подробности матча, таблица игроков), и та же пара служит счётчику строки состояния и списку, предлагаемому после импорта.
Эти пороги свои у каждой библиотеки, а значения по умолчанию — собственные для blunderDB: gnuBG делит ходы на три ступени (0.03 сомнительный, 0.06 плохой, 0.12 очень плохой — gnubg/gnubg.c:281–286), а не сводит их в одну категорию, а eXtreme Gammon проводит свои на 0,020 и 0,080. Оба предлагаются как предустановки.
Засчитанные решения в знаменателе PR
blunderDB следует тем же правилам исключения, что XG и gnuBG.
Ходы шашками — засчитанные решения
Учитываются только невынужденные ходы:
Ход является вынужденным, если кости предлагают только один легальный ход (
cMoves == 1вgnubg/analysis.c:458).Вынужденные ходы по определению имеют нулевую ошибку: у игрока не было выбора. Включение их в знаменатель искусственно занижало бы PR.
Решения по кубу — засчитанные решения
Учитываются только близкие решения по кубу:
Решение по кубу является близким, если оно находится в окне эквити
[-0.16, +0.16]вокруг точки удвоения (предикатisCloseCubedecisionвgnubg/eval.c:5088–5100).Тривиальный «No Double» (очень отрицательное или очень положительное эквити) не является настоящим стратегическим решением; его включение раздуло бы знаменатель и занизило бы PR.
Сводка фильтра
Тип решения |
Включён в \(N_\text{compté}\) (PR) |
|---|---|
Невынужденный ход |
Да |
Вынужденный ход |
Нет |
Близкое решение по кубу |
Да |
Тривиальный No Double |
Нет |
Take / Pass |
Всегда (это ответы на удвоение) |
Соответствие blunderDB ↔ XG ↔ gnuBG
Показатели согласованы в указанных ниже пределах. Это границы, проверяемые набором тестов, а не средние отклонения: тест сравнивает матч за матчем числа blunderDB с числами, записанными для эталонных матчей репозитория, и падает, как только хотя бы одно отклонение превышает границу. Эталоны XG охватывают два матча — один полный (317 засчитанных решений, 156 и 161 по игрокам), другой сведён к одному лишь PR, с границей, поднятой до 0,15 из-за одного несопоставленного хода; эталоны gnuBG охватывают два других матча. Версия eXtreme Gammon, которая дала эти числа, не зафиксирована.
Сравнение XG ↔ blunderDB (один движок анализа)
Метрика |
Максимальное отклонение |
|---|---|
Общее количество решений |
≤ 5 |
Невынужденные ходы |
≤ 7 |
PR |
≤ 0.10 |
Потеря MWC |
≤ 1.0 pp |
Суммарное эквити (EMG) |
≤ 0.05 |
Сравнение gnuBG ↔ blunderDB (импорт SGF — разные движки)
Метрика |
Максимальное отклонение |
Основная причина |
|---|---|---|
PR (ходы шашками) |
≤ 0.20 |
расхождение эквити между движками |
Потеря MWC |
≤ 3.5 pp |
неполные данные close-cube в SGF |
Snowie ER |
≤ 0.50 |
вынужденные ходы без анализа (SGF) |
Примечание
Файлы SGF (gnuBG) не содержат альтернатив для вынужденных ходов, поэтому blunderDB не может распознать все вынужденные ходы при импорте SGF. Это создаёт структурное расхождение по Snowie ER (немного другой знаменатель).
Проверка собственных данных
Если ваши значения PR или MWC расходятся с числами XG, проверьте следующее:
Полные анализы — PR можно вычислить только по позициям, у которых есть анализ. Позиции без анализа засчитываются как нулевая ошибка, но не входят в \(N_\text{compté}\).
Версия XG — XG может менять расчёты между версиями. blunderDB выровнен с поведением, наблюдаемым в последних версиях.
Формат импорта — файлы SGF gnuBG дают более значительные расхождения по кубу (см. таблицу выше), поскольку файл не включает полные анализы для всех решений по кубу.
Миграция базы данных — После обновления blunderDB существующие базы данных мигрируются автоматически. Сделайте резервную копию перед открытием базы данных с новой версией.
Ссылки gnuBG
Формулы проверены в следующих исходных файлах (репозиторий gnuBG):
gnubg/formatgs.c:399–409— PR («Error rate per decision»).gnubg/formatgs.c:415–424— Snowie Error Rate.gnubg/analysis.c:458–462— Накопление ходов шашками, исключение вынужденных (cMoves > 1).gnubg/analysis.c:1430–1474— Преобразование EMG → MWC по каждому решению.gnubg/analysis.c:1449–1464— Накопление потери MWC (eq2mwc).gnubg/eval.c:5088–5100— ПредикатisCloseCubedecision(порог 0.16).