Выбывшие игроки не должны сравниваться между собой ни по рейтингу (в данной партии они все проиграли, а значит оказались слабы в равной степени), ни по целям и мирам (миров вообще ноль, а цели в такой ситуации роли не играют). При этом при расчёте рейтинга победителя рейтинг соперников всё ещё важен.
Как сейчас
Выбывшие делят последнее место, и каждая их пара считается как ничья: 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; выбывший всегда теряет; рейтинг выбывших между собой не влияет.
## Решение владельца (ответ на вопрос из #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
Проверки: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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Решение владельца (ответ на вопрос из #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).Обнаружено при работе над #82 (#87).
Сделано в PR #90, коммит
63a2cdd.Итог: пара двух выбывших в сумму не входит. Остальные пары и нормировка
N − 1прежние.Проверки:
pytest— 209 passed, в том числе новый тест на это правило;simulate.py— все примеры совпадают с документом; итоги 7.3 пересчитаны на 200 сезонах (сдвиг в третьем знаке, выводы прежние);npm run build— успешно.Статус:
Status/In Review. Задача закроется мёржем PR.