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

RoboCup Championship 2026

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

Турнир — среда 15 апреля 2026  ·  Регистрация — 14 апреля 23:59 МСК  ·  Загрузка моделей — 15 апреля 12:00 МСК

⏳ До дедлайна загрузки моделей для турнира (15 апреля 12:00 МСК)
--д --ч --м --с
После этого момента добавление или замена модели невозможны
🏆 Итоги турнира

Наш турнир подошёл к концу, его итоги:

  1. Гурин Владислав
  2. Москалёв Никита
  3. Гришанова Арина
  4. Хамитов Данил
  5. Галайчук Егор

Мы хотим поблагодарить каждого из вас за участие и ваши интересные модели)

Для получения рекомендаций мы ждём от вас небольшое эссе (его шаблон представлен на сайте). Пожалуйста, не затягивайте с эссе🥹 На финальные результаты будет влиять не только ваше место в лидерборде! Нам важно узнать вас поближе, и хотелось бы, чтобы ваши научные интересы совпали с тем, чего от вас хочет научный руководитель.

Эссе нужно отправить через нашу группу ВКонтакте:
vk.com/club237329636

Финальные результаты мы планируем объявить завтра заочно.

📋

Правила

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

🧠

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

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

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

Призы

  • 🥇 1 место — рекомендация на кафедру ММП
    🥈 2 место — рекомендация на кафедру НДС
    Топ-5 участников должны будут сдать эссе; оно влияет на итоговое место.

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

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

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

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

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

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

    Grand Tournament 2026

    15 апреля 2026, 10:00 МСК ·  Финальный турнир  ·  Прямой эфир

    До закрытия регистрации

    --дней
    :
    --часов
    :
    --минут
    :
    --секунд

    14 апреля 2026, 23:59 МСК

    Участие в турнире

    Участники

    Загрузка...

    Формат модели (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 место — рекомендательное письмо на кафедру НДС (Нелинейная динамика и системы управления).
    • Итоговое место определяется результатом турнира. Топ-5 дополнительно сдают эссе, которое влияет на финальный рейтинг.
    • Не обязательно делать ML-решение — хорошо запрограммированный алгоритм (геометрия, физика, управление) оценивается наравне с нейросетями.

    📝 Эссе (только для топ-5)

    Эссе подают только 5 лучших участников по итогам турнира (PDF, до 2 стр.) — оно влияет на финальное место. В нём нужно описать:

    • О себе — кратко: курс, группа, средний балл.
    • Оценки и предметы — какие предметы понравились больше всего и почему.
    • Достижения — олимпиады, проекты, публикации, стажировки, спортивные достижения, личные прорывы, хобби и интересы (если есть).
    • Ожидания от научного руководителя — что хотите изучать, какой формат работы предпочитаете.

    🤖 Описание решения (только для топ-5)

    Отдельный раздел в эссе или отдельный файл:

    • Что пробовали: какие подходы рассматривали, почему отказались.
    • Что выбрали: почему именно этот метод, архитектура или алгоритм.
    • Результаты: сколько голов в тестовых матчах, против каких соперников.

    📦 Требования к файлу модели (.pkl)

    • Формат: .pkl, сохранённый через cloudpickle (не stdlib pickle).
    • Максимальный размер: 512 КБ.
    • Класс должен иметь метод get_actions(self, observation) → list.
    • Запрещено: файловый IO, сеть, subprocess, системные вызовы, бесконечные циклы.
    • Если модель 3 раза подряд выдаёт исключение — засчитывается техническое поражение (0:3).