# Как работает наш алгоритм швейцарской системы

В основе нашей системы лежит модифицированный алгоритм, изначально разработанный для турнира **Windmill**. Он основан на модели **рейтинга силы команд** и принципах **швейцарской системы**. Мы адаптировали этот подход под наши нужды — сделали его более гибким, с возможностью настраивать параметры для локальных и международных турниров.

Подробности о математике, лежащей в основе рейтинга силы, можно найти здесь: [Power Rankings in Ultimate – Leaguevine](https://www.leaguevine.com/blog/134/power-rankings-in-ultimate/)

## Цель алгоритма

Главная задача — сделать матчи максимально интересными, равными по силам и напряжёнными. Мы стремимся к играм, в которых результат решается на последних минутах, а не в одностороннем разгроме. Чтобы это получилось, пары команд подбираются не случайно, а на основе **актуальной силы** каждого участника.

## Как работает алгоритм

Алгоритм состоит из двух этапов:

1. **Расчёт силы команд**
2. **Составление пар на следующий тур**

**Этап 1. Расчёт силы команд**

После каждого тура мы обрабатываем все результаты и создаём **матрицу матчей**, где учитывается каждая сыгранная игра и её счёт.

На основе этих данных рассчитывается **рейтинговая сила** команды. Принцип такой:

* Если команда A выиграла у команды B с разницей в 5 очков, то A получает +2.5 балла силы, а B — -2.5.
* Если потом B выигрывает у C с разницей в 5 очков, то это влияет и на относительную силу A по сравнению с C.

Таким образом, сила команды зависит не только от её собственных результатов, но и от силы всех соперников, с которыми она уже встречалась. Это позволяет создать **динамический рейтинг**, который обновляется после каждого тура.

**Этап 2. Составление пар**

Когда сила команд определена, система подбирает пары для следующего раунда. Для этого создаётся **матрица всех возможных пар**, и каждой паре присваиваются **штрафные баллы** — они отражают, насколько плохо эта пара подходит (например, из-за большой разницы в силе или других факторов).

Затем алгоритм выбирает такие пары, чтобы суммарное количество штрафных баллов во всём туре было минимальным.

```
    A     B     C     D
A   X    10    30    20
B  10     X    20    40
C  30    20     X    10
D  20    40    10     X
```

В этом случае оптимальным будет:

* A против B
* C против D

Суммарный штраф — 20, что минимально из всех возможных вариантов.

## Как считаются штрафные баллы

В текущей версии алгоритма штраф рассчитывается на основе **разницы рейтинговой силы**:

* Команда с силой 3.5 против команды с силой 1.0 получит штраф в **2.5 балла**.

Дополнительно применяются **особые штрафы**, которые позволяют тонко настраивать поведение системы:

* **100 000 штрафных баллов** за **повторную встречу команд** — это делает такие пары практически невозможными.
* **0.1 штрафного балла** за игру с командой **из той же страны** — чтобы минимизировать «внутренние» матчи, особенно в международных турнирах.

Эти значения можно **настраивать вручную организаторами** — например:

* В локальных лигах можно задать высокий штраф для команд из **одного города** или даже **одного университета**, если важно максимальное разнообразие соперников.
* Или наоборот, снизить штраф до нуля, если внутрирегиональные встречи допустимы.

Благодаря этой системе, мы получаем честные, насыщенные поединки, в которых каждая команда сталкивается с соперниками, близкими по уровню, и сохраняется напряжение в каждой игре.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ultisport.ru/for-managers-and-players/kak-rabotaet-nash-algoritm-shveicarskoi-sistemy.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
