Рейтинг: выбывшие игроки не сравниваются между собой #91

Closed
opened 2026-09-18 23:37:23 +03:00 by Agent · 1 comment
Collaborator

Решение владельца (ответ на вопрос из #87)

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

Как сейчас

Выбывшие делят последнее место, и каждая их пара считается как ничья: S = 0.5, E — по рейтингам, M — по отрыву целей. Слабый выбывший получает рейтинг за счёт сильных выбывших: при «последнем выжившем» 1800 против четверых выбывших по 1800 и одного выбывшего 1200 последний получает +8.8.

Что меняется

  • Пара «выбывший — выбывший» не даёт вклада ни одному из двоих: ни S − E, ни множителя отрыва. То же для perf (метрика фракций).
  • Пары выбывших с невыбывшими, в том числе с победителем, считаются как раньше: сила соперников по-прежнему важна.
  • Нормировка K·G(N)/(N − 1) не меняется. При равных рейтингах такая пара и сейчас даёт ровно 0, поэтому обычные примеры документа не меняются. Уходит только перекос по рейтингу между выбывшими.
  • Следствие: выбывший всегда теряет рейтинг. Монотонность «последнее место не приносит рейтинг» теперь выполняется и для общего места выбывших.

Что поправить вместе

  • backend/app/services/scoring.py — rate_match.
  • docs/rating/simulate.py — эталон, флаг в Params у предложенной системы; EXPECTED примера 5.
  • docs/rating/rating-system.md — правило в 4.4/4.7, свойства 4.9, «Коротко», пример 5, итоги 7.3 для предложенной системы, решение в разделе 9.
  • frontend/src/pages/HelpPage.tsx — формулировки про выбывших и монотонность (#87).
  • Тесты: пример 5; выбывший всегда теряет; рейтинг выбывших между собой не влияет.

Обнаружено при работе над #82 (#87).

## Решение владельца (ответ на вопрос из #87) > Выбывшие игроки не должны сравниваться между собой ни по рейтингу (в данной партии они все проиграли, а значит оказались слабы в равной степени), ни по целям и мирам (миров вообще ноль, а цели в такой ситуации роли не играют). При этом при расчёте рейтинга победителя рейтинг соперников всё ещё важен. ## Как сейчас Выбывшие делят последнее место, и каждая их пара считается как ничья: `S = 0.5`, `E` — по рейтингам, `M` — по отрыву целей. Слабый выбывший получает рейтинг за счёт сильных выбывших: при «последнем выжившем» 1800 против четверых выбывших по 1800 и одного выбывшего 1200 последний получает **+8.8**. ## Что меняется - Пара «выбывший — выбывший» не даёт вклада ни одному из двоих: ни `S − E`, ни множителя отрыва. То же для `perf` (метрика фракций). - Пары выбывших с невыбывшими, в том числе с победителем, считаются как раньше: сила соперников по-прежнему важна. - Нормировка `K·G(N)/(N − 1)` не меняется. При равных рейтингах такая пара и сейчас даёт ровно 0, поэтому обычные примеры документа не меняются. Уходит только перекос по рейтингу между выбывшими. - Следствие: выбывший всегда теряет рейтинг. Монотонность «последнее место не приносит рейтинг» теперь выполняется и для общего места выбывших. ## Что поправить вместе - [ ] `backend/app/services/scoring.py` — `rate_match`. - [ ] `docs/rating/simulate.py` — эталон, флаг в `Params` у предложенной системы; `EXPECTED` примера 5. - [ ] `docs/rating/rating-system.md` — правило в 4.4/4.7, свойства 4.9, «Коротко», пример 5, итоги 7.3 для предложенной системы, решение в разделе 9. - [ ] `frontend/src/pages/HelpPage.tsx` — формулировки про выбывших и монотонность (#87). - [ ] Тесты: пример 5; выбывший всегда теряет; рейтинг выбывших между собой не влияет. Обнаружено при работе над #82 (#87).
Agent added this to the v1.5 — изменение системы подсчёта рейтинга milestone 2026-09-18 23:37:23 +03:00
Agent added the Kind/Enhancement
Reviewed
Confirmed
1
labels 2026-09-18 23:37:23 +03:00
Agent added the
Status
In Review
label 2026-09-18 23:41:51 +03:00
Author
Collaborator

Сделано в PR #90, коммит 63a2cdd.

Итог: пара двух выбывших в сумму не входит. Остальные пары и нормировка N − 1 прежние.

  • Пример 5: A +9.27, B +5.85 — без изменений; C −7.60 (было −7.78), D −7.53 (было −7.35).
  • «Последний выживший» 1800 против выбывших 4×1800 + 1200: слабый выбывший теперь −0.2 (было +8.8), сильные выбывшие — −3.0 (было −5.3), победитель +12.2 (без изменений).

Проверки: pytest — 209 passed, в том числе новый тест на это правило; simulate.py — все примеры совпадают с документом; итоги 7.3 пересчитаны на 200 сезонах (сдвиг в третьем знаке, выводы прежние); npm run build — успешно.

Статус: Status/In Review. Задача закроется мёржем PR.

Сделано в PR https://gitea.arseniev.info/NotBigGhost/ForbiddenStarsApp/pulls/90, коммит `63a2cdd`. **Итог:** пара двух выбывших в сумму не входит. Остальные пары и нормировка `N − 1` прежние. - Пример 5: A +9.27, B +5.85 — без изменений; C −7.60 (было −7.78), D −7.53 (было −7.35). - «Последний выживший» 1800 против выбывших 4×1800 + 1200: слабый выбывший теперь **−0.2** (было +8.8), сильные выбывшие — −3.0 (было −5.3), победитель +12.2 (без изменений). **Проверки:** `pytest` — 209 passed, в том числе новый тест на это правило; `simulate.py` — все примеры совпадают с документом; итоги 7.3 пересчитаны на 200 сезонах (сдвиг в третьем знаке, выводы прежние); `npm run build` — успешно. **Статус:** `Status/In Review`. Задача закроется мёржем PR.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: NotBigGhost/ForbiddenStarsApp#91