Студенческий турнир · Факультет ВМК МГУ · 2026

RoboCup Championship 2026

Соревнование по роботофутболу 2 на 2 — программируйте агентов, побеждайте соперников

Итоговый матч — 15 апреля 2026  ·  Дедлайн заявок — 14 апреля 12:00 МСК

📋

Правила

Каждая команда управляет 2 роботами. Матч длится 2 минуты. Побеждает тот, кто забьёт больше голов. Чистый оффлайн-агент в виде .pkl.

🧠

Формат моделей

Напишите Python-класс с методом get_actions(obs), сохраните через cloudpickle в .pkl и загрузите на сайт. Можно ML или чистый алгоритм.

Скачать пример (.pkl)
🎯

Призы

🥇 1 место — рекомендация на кафедру ММП
🥈 2 место — рекомендация на кафедру НДС
🥉 3 место — диплом участника
Итоговое место учитывает результат турнира и качество эссе.

📄 Скачать правила (PDF)
#ИгрокОчкиВНПМатчи

Активные матчи

Последние результаты

Войдите, чтобы играть

Выберите матч

Выберите идущий матч для просмотра

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 МСК.