далее · N заметки · F во весь экран
КосмоХакатон 2026 · Проектирование устойчивой спутниковой группировки

Constellation Resilience Lab

Браузерный сервис, который считает доступность связи для северных пунктов, объясняет каждый перерыв и подбирает проверенную конфигурацию группировки.

48 аппаратов · 3 плоскости h = 550 км · i = 87° 720 отсчётов × 120 с шлюз Мурманск · клиенты C65 · C70 · C72
На фоне — живой расчёт по формулам «Описания данных»: орбиты, межспутниковые линии и маршруты до шлюза перестраиваются на каждом кадре.
Тезис кейса
0 %видимость: над пунктом C70 почти всегда есть спутник
0 %доступность: сквозной маршрут до шлюза при ISL 2000 км

Спутник над головой — ещё не связь

Пункт видит аппарат, но данные не доходят: сеть между спутниками рвётся. Сервис раскладывает каждый из 272 отсчётов без пути по причине — без двойного счёта.

1нет видимого аппарата
8нет контакта со шлюзом
263разрыв межспутниковой сети
Временная шкала сценария 04: красные интервалы — разрыв спутниковой сетистенд · сценарий 04 · красное — разрыв межспутниковой сети

Сценарий 04, клиент C70, сетка 720 × 120 с. Разложение совпадает с контрольным из ТЗ.

Алгоритмы маршрутизации · обоснованность
внутри плоскости0
между плоскостями0
маршрутов из 30

Почему при 2000 км кольцо исчезает

Соседи в плоскости стоят через 22,5°. Расстояние между ними — хорда, и фазирование плоскости её не меняет.

dadj = 2·(R + h)·sin(π/16)
= 2 · 6921 · 0,195 = 2700,44 км > 2000
  • При ISL 2000 км все внутриплоскостные линии недоступны при любом RAAN и фазе — сеть держится только на межплоскостных контактах.
  • Условие кольца 2(R+h)·sin(π/N) < L требует не менее 22 аппаратов в плоскости. Состав менять нельзя, поэтому 90 % при 2000 км — вопрос не подбора, а геометрии.
  • Переключите дальность: считается та же модель, что в ядре.
Качество кода · документация и запуск5 + 5 баллов

Один расчётный эталон — и всё остальное вокруг него

Геометрия считается только на сервере. У интерфейса нет второй реализации модели: каждое число на экране — результат ядра, с hash сценария и версией.

packages/engine · Python 3.12, NumPy

Расчётное ядро

  • Контракт cosmo-A-1.0: строгие типы, диапазоны, ссылки, дубликаты
  • Геометрия, контакты, сетка времени, маски отказов
  • Multi-source BFS от шлюзов, три политики маршрута
  • Метрики, причины разрывов, N−1, резервные пути, сравнение
  • Независимый валидатор результата — отдельно от поиска пути
apps/api · FastAPI, PostgreSQL, worker

Сервер и очередь

  • Неизменяемые ревизии: правка = новая версия, baseline не трогается
  • Задания в БД с арендой, отменой и атомарной публикацией
  • Idempotency-Key, коды ошибок с path · code · message
  • Allowlist изменений проверяет сервер, а не форма
  • Экспорт cosmo-A-result-1.0, CSV, паспорт эксперимента
apps/web · React 19, TypeScript, Cesium

Рабочее место инженера

  • Проекты → Конструктор → Сравнение → Устойчивость → Оптимизация
  • 3D-сфера, 2D-карта и табличный режим без WebGL
  • Таймлайн по step_index, воспроизведение 1× 5× 20×
  • Клавиатура, aria, состояние не только цветом
  • Прогресс по SSE поверх опроса
docker compose up -d --builddb · init · backend · worker · app234 теста · pytestADR × 9 · реестр требований · сверка с критериями
Корректность расчётов15 баллов

Все 12 контрольных значений ТЗ воспроизведены точно

Не проценты после округления, а целые отсчёты: golden-тесты держат 696 / 720, 711 / 720, 712 / 720 и так далее.

Сверка с geometry.py организаторов
9,1·10−13км расхождения при допуске 10⁻⁶ · углы 5,3·10⁻¹³° · наборы рёбер идентичны
Полный расчёт 48 × 720
0,3 спри цели ТЗ до 5 с · валидация 0,3 мс · N−1 по 48 аппаратам 14 с
  • Границы честные: ISL ровно L — нет связи, угол ровно на пороге — контакт есть, отказ [21 600; 43 200) — с 6-го часа до 12-го.
  • Инварианты: переименование ID не меняет контакты, удаление аппарата не добавляет связей, рост дальности их не убирает.
СценарийПунктВидимостьДоступностьМакс. перерыв
01 ПолнаяC6597,78 %96,67 %8 мин
C7099,86 %98,75 %2 мин
C72100,00 %98,89 %2 мин
02 Первая очередьC6538,19 %27,22 %572 мин
C7048,75 %15,83 %658 мин
C7258,47 %12,64 %796 мин
03 ОтказыC6584,58 %79,31 %24 мин
C7090,28 %80,83 %24 мин
C7293,06 %82,50 %20 мин
04 ISL 2000C6597,78 %77,50 %94 мин
C7099,86 %62,22 %178 мин
C72100,00 %65,14 %4 мин

✓ — совпадает с контрольной таблицей раздела 2.2 ТЗ. Политика «кратчайший по переходам», ядро 0.1.0.

Удобство использования · проектирование и сравнение10 + 15 баллов

Конструктор: весь сценарий жюри — без правки JSON

  • Очередь запуска P1 / P2 / P3 — незапущенные аппараты остаются на сцене, но не участвуют в связях.
  • RAAN и фаза каждой плоскости числом и ползунком с шагом 0,1°.
  • Отказы — выбрать аппарат в списке или прямо на маршруте, задать [start; end), увидеть затронутые отсчёты.
  • Расчёт — явно кнопкой. Правка помечает результат устаревшим, но прежний Run остаётся для сравнения.
  • Три вида одного снимка: 3D-сфера, 2D-карта, таблица; расписание пролётов с уточнёнными временами восхода и захода.
  • Пробел — воспроизведение, ← → — шаг, Shift — 10 отсчётов.
Конструктор: сводка расчёта, очередь запуска, ориентация плоскостейстенд · 01 Полная группировка · после расчёта
Удобство использования · наглядность покрытия и маршрутов
3D-сцена Cesium с аппаратами, контактами и маршрутоммодельная сфера R = 6371 км · координаты ядра, не WGS84

Сцена показывает ровно то, что посчитано

  • Активный, отказавший и незапущенный аппарат различаются формой и цветом.
  • По умолчанию — маршрут и контакты выбранного клиента; полный граф включается отдельно.
  • Контакты — только на расчётном отсчёте. Между отсчётами линия никогда не выдаётся за доказанную.
  • Клик по узлу: плоскость, очередь, состояние, координаты, угол возвышения над клиентом, участие в маршруте.
  • Без WebGL — SVG-сцена и таблица: инженер не остаётся без модели.
2D-карта: подспутниковые точки, трассы плоскостей, маршрут2D-карта · те же данные, равнопромежуточная проекция
Алгоритмы маршрутизации15 баллов

Маршрут ищется от шлюза, проверяется отдельно

  • Multi-source BFS. Спутники с контактом к доступному шлюзу получают расстояние 1; волна идёт только по ISL; клиент выбирает видимый аппарат с минимальным расстоянием. Один обход на отсчёт — для всех клиентов.
  • Наземный транзит запрещён. Общий обход графа давал 73,19 % и 79,72 % — завышение. Путь строго [client, sat…, gateway].
  • Три политики — кратчайший по переходам, стабильный, кратчайший по километрам. Доступность у всех одинаковая: это свойство графа, а не алгоритма. Различаются hops, длина и переключения.
  • Независимый валидатор проверяет все 2160 записей: концы, уникальность узлов, активность и существование каждого ребра на том же отсчёте.
  • Детерминизм: при равных расстояниях — сортировка по ID. NetworkX — только как тестовый оракул.
G_MUR · шлюз C70 · клиент d=1d=1d=2d=2 d=3d=3d=4 отказ волна расстояний идёт от шлюза только по ISL клиент берёт видимый аппарат с min d → путь длиной d + 1
Анализ устойчивости · обработка разрывов и отказов10 баллов

Каждый перерыв объяснён и проверен контрфактически

  • Четыре причины с приоритетом: нет видимого аппаратавсе шлюзы недоступнынет контакта со шлюзомразрыв сети. Флаги хранятся все, основная — одна: время раскладывается без двойного счёта.
  • Для разрыва сети видны компоненты: какие аппараты видит клиент, у каких есть выход на шлюз, и почему они не соединены.
  • При отказе ядро возвращает аппарат при неизменных остальных условиях. Только если путь восстановился — пишем «восстановление устраняет разрыв». Иначе честно: одного аппарата недостаточно.
  • Резерв — до двух путей без общих спутников через max-flow с расщеплением узлов; при одном шлюзе — предупреждение о единой точке отказа.
Сцена: C70 видит один аппарат, но пути до шлюза нет — разрыв межспутниковой сетисценарий 04 · C70 · k = 20 · контакт есть, пути нет: ISL_DISCONNECTED
Панель разрыва: основная причинакарточка отсчёта · основная причина
Маршрут на соседнем отсчёте k = 19
C70 → S30 · 1 695 км · 11,9°
S30 → S14 · ISL 1 703 км
S14 → G_MUR · 1 731 км · 11,3°
3 перехода · 5 130 км · ≥ 17,1 мс
Проектирование и сравнение конфигураций15 баллов

Сравнение: первая очередь против полной группировки

Показываем не средний процент, а каждого клиента и его перерывы. Рост минимума никогда не выдаётся за улучшение всех пунктов.

Доступность по клиентам · ориентир 90 % отмечен линией
C65 · P396,67 %
C65 · P127,22 %
C70 · P398,75 %
C70 · P115,83 %
C72 · P398,89 %
C72 · P112,64 %

Максимальный перерыв: 8 / 2 / 2 мин → 572 / 658 / 796 мин. Одна плоскость из трёх не держит связь на севере.

  • Сервер проверяет сопоставимость: разные сетки, пункты или условия связи — сравнение помечается «изменены условия» или отклоняется.
  • Рекомендация детерминирована: минимум по клиентам → среднее → перерыв. Порядок виден пользователю.
Экран сравнения двух расчётовэкран «Сравнение» · параметры, показатели, разница в п.п.
Анализ устойчивости · уязвимые аппараты10 баллов

N−1: 48 контрфактических суток за 14 секунд

Каждый запущенный аппарат по очереди исключается на весь горизонт. Ранжируем по худшему клиенту, а не по минимуму сети — иначе ущерб «не худшему» пункту прячется.

S19
−2,36п.п. у C65 · все три направления
S33
−2,36п.п. у C65 · все три направления
S44
−2,36п.п. у C65 · все три направления
S45
−2,36п.п. у C65 · все три направления
  • Ни один одиночный отказ не выводит полную группировку за 90 %: худший клиент остаётся на 94,31 %.
  • Но C65 — самый уязвимый пункт: в 67,4 % отсчётов у него единственный вход в сеть; два независимых входа — лишь 29,3 % времени (C70 — 60,0 %, C72 — 71,8 %).
  • Стресс-набор: отказ шлюза, соседи в плоскости, целая плоскость, случайные отказы с seed. Это стресс-тесты, не вероятность отказа.
Экран «Устойчивость»: критические аппараты и резервирование входа«Устойчивость» → «Отказ одного аппарата» · сценарий 01
Анализ устойчивости · пять инструментов на одном экране

Что сломается, почему и где резерв

  • Кривая развёртывания. Очередь 1 — 12,64 %, очередь 2 — 61,81 %, очередь 3 — 96,67 %. Ориентир достигается только с третьей очереди; между 1 и 2 — +49,17 п.п.
  • Стресс-набор. Худший случай — отключение плоскости: 60,97 %, перерыв 5 ч 30 мин. Шлюз недоступен 6 часов — 71,67 %. Соседи в плоскости — 87,78 %. Случайные отказы с seed — 94,58 %.
  • Стратегии маршрутизации. Доступность совпала у всех трёх; путь по расстоянию короче на 161 км и даёт на 72 переключения меньше.
  • Развёртка по оси. Фаза P1 повторяется каждые 22,5°: размах всего 1,11 п.п. — одной плоскостью номинал не улучшить, нужен совместный поиск шести углов.
Кривая развёртывания по очередямкривая развёртывания
Стресс-наборстресс-набор · seed 20260911
Стратегии маршрутизациистратегии маршрутизации
Развёртка по фазе P1развёртка: P1, фазирование, 24 точки
Обоснованность рекомендаций · автоподбор конфигурации10 баллов

Подбор RAAN и фаз на точном оценщике

  • Sobol-старт + дифференциальная эволюция rand/1/bin, популяция 16, seed 20260911, бюджет 300 полных расчётов. Incumbent сохраняется: больший бюджет не ухудшает результат.
  • Меняются только 6 углов. Состав, пункты, высота, дальность и порог — фиксированы allowlist'ом на сервере.
  • Финалист перепроверяется на шаге 60 и 30 с и на независимом валидаторе. Термин «глобальный оптимум» запрещён.
  • Pareto-режим NSGA-II: компромисс «доступность ↔ перерыв».
Номинал · сценарий 01
96,67 → 0 %худший клиент · перерыв 8 → 2 мин · target_met_verified · протокол full_search_nominal.json
Стресс ISL 2000 при «номинал ≥ 90 %»
62,22 → 0 %худший клиент · перерыв 178 → 80 мин · 33 допустимых из 300
Экран «Оптимизация»: протокол поиска и кандидаты«Оптимизация» · 300 точных расчётов · каждый кандидат «проверен расчётом» · применить = новая версия
Обоснованность рекомендаций · ML-ускоритель

ML — честный benchmark, а не обещание

Surrogate предсказывает худшую доступность по sin/cos шести углов и предлагает кандидатов по expected improvement. Каждый кандидат подтверждается точным расчётом.

Метод · бюджет 48seed 20260911seed 7seed 42СреднееВердикт
Точный поиск (DE)65,0067,9267,6466,85baseline
Гауссовский процесс69,8670,0068,6169,493 из 3 · +2,64 п.п. · проходит порог
CatBoost65,6967,9265,4266,341 из 3 · −0,51 п.п. · не проходит

Порог из ТЗ: средний выигрыш > 0 и ни одного проигрыша хуже одного отсчёта. Ошибка модели считается только на точках, предложенных до их расчёта. Время прогона 46,7 с против 48,8 с.

Что это значит для продукта
  • ML — отключаемый режим для коротких бюджетов. При 300 расчётах точный поиск догоняет и обгоняет GP на стрессе.
  • Прогноз хранится в поле predicted, метрики — в verified. Кандидат без exact Run не может стать рекомендацией.
  • Нет «сэкономлено N симуляций» без baseline и метода расчёта.
  • Модель обучается внутри одного Study: другой состав или сетка — новая модель или отключение.
Воспроизведение
constellation-optimize benchmark
  --budget 48 --seeds 20260911 7 42
  --methods exact gp catboost
Обоснованность рекомендаций · выбор проекта10 баллов

Рекомендация: вариант, который не платит номиналом за стресс

Конфигурация · exact Run, verified
ПлоскостьRAANФаза
P1191,64°169,13°
P267,54°178,32°
P3124,36°94,64°

Ограничение поиска: каждый клиент в штатном режиме ≥ 90 %. Состав 48, пункты и условия связи — как в исходном проекте.

Что выигрываем
  • Штатный режим: 96,94 / 98,89 / 99,31 %, перерыв 8 → 2 мин — ни один клиент не проигрывает.
  • ISL 2000 км: худший клиент 62,22 → 69,17 %, C70 до 70,14 %, максимальный перерыв 178 → 80 мин.
  • Цель 90 % выполнена в штатных условиях с запасом.
Честная цена и ограничения
  • Сценарий 10 отказов теряет ≈ 2 п.п. и 6 минут перерыва.
  • При ISL 2000 км 90 % не достигаются ни в одном из 300 вариантов: хорда 2700 км. Статус — target_not_found_within_budget, не «недостижимо».
  • Чувствительность к сетке: 69,17 % на 120 с, 66,60 % на 60 с, 65,73 % на 30 с — десятые доли не заявляем.
  • Модель геометрическая: без радиобюджета и пропускной способности; задержка — только нижняя оценка.
Как повысить устойчивость — в порядке проверенности

1 · Применить найденное фазирование как новую ревизию.  2 · Держать резерв для S19 / S33 / S44 / S45 — они бьют по всем трём направлениям.  3 · Для C65 нужен второй независимый вход: это следующий рычаг исследования, а не подмена дальности ISL или добавление шлюза.

Работа с входными данными · документация и запуск10 + 5 баллов

Готовы к чужому JSON

  • Любой файл cosmo-A-1.0 создаёт новый проект: другое число плоскостей, аппаратов, пунктов, шаг и горизонт. Тесты гоняют конвейер от 2 до 60 аппаратов, 1–4 клиентов, 1–3 шлюзов, шаг 7 с, высоты 200–1200 км.
  • Ошибки адресные: path · code · message. NaN, true вместо числа, дубликат ID, ссылка на несуществующую плоскость, горизонт не кратен шагу — каждая названа по полю.
  • Исходный JSON хранится без изменений; неизвестные поля сохраняются с пометкой «не участвует в модели».
  • Экспорт cosmo-A-result-1.0: полный effective_scenario и ровно одна запись на пару «отсчёт — клиент», path: [] при отсутствии пути. Импорт → правка → расчёт → экспорт → импорт даёт те же метрики.
  • Паспорт эксперимента: hash входа, версия ядра, политика, seed, сетка, длительность. CSV по клиентам.
docker compose up -d --buildlocalhost:8080сценарии кейса уже загружены
Экран «Проекты»: исходные примеры и импорт сценария«Проекты» · исходные примеры только для чтения, импорт файла
Соответствие критериям оценки100 баллов

Где жюри проверяет каждый критерий

Отраслевые эксперты · 50
15
Проектирование и сравнение конфигураций
Конструктор: очередь, RAAN, фаза, отказы · экран «Сравнение» · рекомендация по клиентам
10
Анализ устойчивости
Причины разрывов · контрфактическая проверка · N−1 · резерв · стресс-набор
10
Обоснованность рекомендаций
Только exact Run · условия 90 % · честная цена · границы модели · инженерные выводы с переходом к расчёту
10
Удобство использования
Сценарий жюри без JSON · таймлайн и воспроизведение · 3D / 2D / таблица · клавиатура
5
Презентация решения
Работающий стенд · воспроизводимый прогон за 5 минут
Технические эксперты · 50
15
Корректность расчётов
12 контрольных значений · сверка с geometry.py 10⁻¹³ км · граничные тесты T03–T07
15
Алгоритмы маршрутизации
Multi-source BFS · запрет наземного транзита · три политики · независимый валидатор 2160 записей
10
Работа с входными данными
Импорт любой размерности · адресные ошибки · экспорт cosmo-A-result-1.0 · цикл реимпорта
5
Качество кода
Ядро без FastAPI и UI · типы · 234 теста · ADR × 9 · реестр требований
5
Документация и запуск
README + START · docker compose одной командой · сценарии проверки docs/acceptance.md
Стенд открыт для жюри

Проверьте любое число сами

lin-lini-constellation-resilience-lab-55b9.twc1.net

  • Откройте «01 Полная группировка» → «Рассчитать» → 96,67 / 98,75 / 98,89 %.
  • Загрузите свой сценарий cosmo-A-1.0 — размеры не зашиты.
  • Дальше: карта фаз RAAN × phase, маршрутный сертификат отсчёта, what-if профиль по дальности ISL — отдельно от основной рекомендации.
Constellation Resilience Lab · КосмоХакатон 2026
1 / 18
Заметки докладчика