RoboCup Championship 2026
Соревнование по роботофутболу 2 на 2 — программируйте агентов, побеждайте соперников
Итоговый матч — 15 апреля 2026 · Дедлайн заявок — 14 апреля 12:00 МСК
Правила
Каждая команда управляет 2 роботами. Матч длится 2 минуты. Побеждает тот, кто забьёт больше голов. Чистый оффлайн-агент в виде .pkl.
Формат моделей
Напишите Python-класс с методом get_actions(obs), сохраните через cloudpickle в .pkl и загрузите на сайт. Можно ML или чистый алгоритм.
Призы
🥇 1 место — рекомендация на кафедру ММП
🥈 2 место — рекомендация на кафедру НДС
🥉 3 место — диплом участника
Итоговое место учитывает результат турнира и качество эссе.
Лидерборд
| # | Игрок | Очки | В | Н | П | Матчи |
|---|
Активные матчи
Последние результаты
Войдите, чтобы играть
Ваша модель
Модель не загружена
Как создать .pkl файл
import cloudpickle, math
class MyModel:
def get_actions(self, obs):
# obs: my_robots, opponent_robots,
# ball, score, time_remaining, field
# Вернуть: [[ax0,ay0,kick0],[ax1,ay1,kick1]]
return [[0, 0, 0], [0, 0, 0]]
with open("my_model.pkl", "wb") as f:
cloudpickle.dump(MyModel(), f)
Скачать пример (.pkl)
Быстрый матч
Войдите в очередь — сыграйте против случайного соперника
Вызов
Выберите соперника для личного матча
Входящие вызовы
Нет
Grand Tournament 2026
15 апреля 2026 · Финальный матч · Прямой эфир
До закрытия регистрации
14 апреля 2026, 12:00 МСК
Участие в турнире
Войдите, чтобы записаться
Заполните данные для участия в турнире:
🔒 Регистрация закрыта.
Участники
Загрузка...
Формат модели (API)
Модель — Python-класс, сохранённый в .pkl через cloudpickle. Метод get_actions вызывается каждый шаг симуляции (~60 раз/сек).
import cloudpickle, math
class MyModel:
def get_actions(self, observation):
"""
observation = {
"my_robots": [{"x","y","vx","vy","angle","kick_ready"}, ...], # 2 робота
"opponent_robots": [...],
"ball": {"x","y","vx","vy"},
"score": {"my": int, "opponent": int},
"time_remaining": float, # секунд
"field": {
"x": 0.0, "y": 0.0,
"width": 1080.0, "height": 640.0,
"goal_y_top": 210.0, "goal_y_bottom": 430.0
}
}
Система координат: (0,0) — левый верхний угол поля.
Ваши ворота всегда СЛЕВА (x=0). Атакуете ВПРАВО (x=width).
Физика (за один шаг dt=1/60 с):
vx += ax * ACCEL * dt # ax ∈ [-1, 1]
vy += ay * ACCEL * dt # ay ∈ [-1, 1]
vx *= DRAG; vy *= DRAG # DRAG = 0.90 → max ~150 px/s
x += vx * dt; y += vy * dt
Мяч: скользит с drag=0.97, отталкивается от стенок.
Возвращать: список из 2 действий
[[ax0, ay0, kick0], [ax1, ay1, kick1]]
ax, ay ∈ [-1.0, 1.0] — желаемое ускорение (нормировано)
kick ∈ {0, 1} — удар (только если kick_ready == 1.0)
"""
my = observation["my_robots"]
ball = observation["ball"]
actions = []
for robot in my:
dx = ball["x"] - robot["x"]
dy = ball["y"] - robot["y"]
d = math.hypot(dx, dy) or 1.0
kick = 1 if d < 60 and robot["kick_ready"] >= 1.0 else 0
actions.append([dx/d, dy/d, kick])
return actions
# Сохранить в .pkl (обязательно через cloudpickle):
with open("my_model.pkl", "wb") as f:
cloudpickle.dump(MyModel(), f)
⬇ Скачать готовый пример (.pkl)
📋 Полные правила турнира
⚙️ Физика симуляции
- Поле: 1080 × 640 px. Ворота — слева и справа, y ∈ [210, 430].
- Каждый шаг: dt = 1/60 с. Агент возвращает ax, ay ∈ [−1, 1] и kick ∈ {0, 1}.
- Скорость робота обновляется:
vx += ax·ACCEL·dt,vy += ay·ACCEL·dt, затемvx *= DRAG(DRAG = 0.90). Максимальная установившаяся скорость ≈ 150 px/с. - Мяч: drag = 0.97, упруго отражается от стен. При ударе получает импульс вдоль направления от робота к мячу.
- Kick_ready = 1.0 означает, что удар готов; после удара кулдаун ~0.5 с.
🏆 Призы и рекомендации
- 🥇 1 место — рекомендательное письмо на кафедру ММП (Математические методы прогнозирования).
- 🥈 2 место — рекомендательное письмо на кафедру НДС (Нелинейная динамика и системы управления).
- 🥉 3 место — диплом участника турнира.
- Итоговое место формируется из результата турнира и оценки эссе (подробнее ниже).
- Не обязательно делать ML-решение — хорошо запрограммированный алгоритм (геометрия, физика, управление) оценивается наравне с нейросетями.
📝 Эссе (обязательная часть заявки)
Вместе с моделью необходимо предоставить эссе (PDF, до 2 стр.). В нём нужно описать:
- О себе — кратко: кто вы, какой курс, специализация.
- Оценки и предметы — какие предметы понравились больше всего и почему.
- Достижения — олимпиады, проекты, публикации, стажировки (если есть).
- Ожидания от научного руководителя — что хотите изучать, какой формат работы предпочитаете.
🤖 Описание решения (обязательная часть заявки)
Отдельный раздел в эссе или отдельный файл:
- Что пробовали: какие подходы рассматривали, почему отказались.
- Что выбрали: почему именно этот метод, архитектура или алгоритм.
- Результаты: сколько голов в тестовых матчах, против каких соперников.
📦 Требования к файлу модели (.pkl)
- Формат: .pkl, сохранённый через
cloudpickle(не stdlib pickle). - Максимальный размер: 512 КБ.
- Класс должен иметь метод
get_actions(self, observation) → list. - Замена модели — не чаще 1 раза в сутки до дедлайна.
- Запрещено: файловый IO, сеть, subprocess, системные вызовы, бесконечные циклы.
- Если модель вызывает исключение — засчитывается техническое поражение в матче.
🖥️ Как пользоваться платформой
- Регистрация/Вход — кнопки «Войти» и «Регистрация» в правом верхнем углу. После входа появится ваш никнейм.
- Главная (🏠) — краткое описание турнира, ссылки на скачивание правил и примера модели.
- Лидерборд — рейтинговая таблица всех участников и список последних матчей.
- Матчи ▶ — раздел для товарищеских матчей:
- «Ваша модель» — загрузите
.pklфайл кнопкой «Загрузить модель». - «Быстрый матч» — нажмите «Найти соперника», чтобы войти в очередь.
- «Вызов» — выберите соперника из списка и нажмите «Бросить вызов».
- «Входящие вызовы» — здесь появятся вызовы от других игроков; нажмите «Принять».
- «Ваша модель» — загрузите
- Трансляция 📺 — выберите идущий матч из списка. Матч отображается в реальном времени на поле.
- Турнир 🏆 — зарегистрируйтесь (имя, фамилия, группа), загрузите турнирную модель. Регистрация открыта до 14 апреля 12:00 МСК.