IoT-сети проектировали для миллионов устройств, но они захлебываются уже от тысяч. Когда в нашем районе на секунду моргнул свет, 10 000 умных счетчиков одновременно потеряли связь и начали переподключаться. Три четверти так и не смогли выйти в эфир. Проблема в RACH — канале случайного доступа. При массовых подключениях он превращается в узкое горлышко, куда каждый пытается прорваться первым.

Меня зовут Максим Князев, старший системный инженер К2 Кибербезопасность, и я натренировал пять ИИ-агентов для управления этим хаосом. Один прогнозирует пики нагрузки, другой распределяет временные слоты, третий управляет мощностью передачи, четвертый распределяет устройства по типам и пятый оптимизирует расход батарей. В итоге количество коллизий упало с 26% до 7%, энергопотребление на 35%, а успешность подключений выросла до 96% по сравнению с использованием статического метода без агентов. Под катом рассказываю, как это работает.
Главный виновник всех бед — RACH, Random Access Channel. По-русски — канал случайного доступа. Работает он просто: когда у IoT-устройства появляются данные, оно не ждет разрешения базовой станции. Оно просто выбирает свободный временной слот и пытается передать сигнал. Это просто и эффективно, но только до тех пор, пока все устройства не попытаются выйти на связь одновременно.
В RACH нет очереди или расписания — кто успел, тот и занял канал. Как толпа после футбола, которая ломится к выходу со стадиона. Стоит, например, двум счетчикам воды попасть в один временной слот — их сигналы накладываются друг на друга. Базовая станция слышит только неразборчивый шум и не может расшифровать сообщения. Это и есть коллизия — главная головная боль любой IoT-сети при массовых подключениях.
А теперь представим, что таких устройств тысячи. После одной неудачной попытки подключения умный счетчик не сдается. Он ждет, когда освободится слот, чтобы постучаться в него снова.
Налицо замкнутый круг: больше коллизий → больше повторных попыток → выше нагрузка на канал → еще больше коллизий. Система пожирает сама себя. Задержки растут с нескольких секунд до десятков минут, успешность подключений падает до 70%, а иногда и ниже. Вдобавок, каждая попытка сжигает заряд батарейки.
От грубой силы к проблескам интеллекта
Первое решение, которое приходит в голову — Access Class Barring. Система просто запрещает части устройств выходить на связь, чтобы разгрузить канал. Решение рабочее, но это как лечить головную боль гильотиной — грубо и с побочными эффектами. ACB не различает важность сигналов. Датчик утечки газа и погодная станция для него равны — оба могут оказаться за бортом с одинаковой вероятностью.
Я решил подойти к проблеме иначе. Взял обучение с подкреплением — тот самый Reinforcement Learning, на котором тренируют ботов играть в шахматы. Только я учил агента управлять потоком IoT-устройств через Access Class Barring и распределения RACH-слотов. Снизил коллизии на 10% — получи +10 очков, увеличил задержку на 20 мс — получи −5. Так агент учится максимизировать награду в долгосрочной перспективе.
По сравнению со статической конфигурацией, одиночный RL-агент сократил количество коллизий на 74%, поднял успешность подключений на 16% и улучшил энергоэффективность устройств на 15%. Казалось бы, задача решена, но когда я усложнил сценарии тестирования, приблизил к реальности, начались проблемы.
Агент отлично решал одну задачу — минимизацию коллизий, но реальность оказалась сложнее грубой модели.
Первая проблема — разнородность устройств. В одной сети живут датчики температуры, которые шлют данные раз в час, и датчики утечки газа, которые молчат месяцами, но при срабатывании должны пробиться мгновенно. Агент усреднял их все и часто игнорировал критически важные, но редкие сигналы.
Вторая — колебания нагрузки. Деловой центр днем и спальный район ночью генерируют совершенно разные паттерны трафика. Агент реагировал на текущую ситуацию, но не мог предугадать, что будет через час.
В-третьих, ограничения энергопотребления. Можно снизить коллизии, заставив устройства передавать больше данных или чаще синхронизироваться с сетью. Но это быстрее убьет батарейки. Минимизация задержек и экономия энергии тянут систему в противоположные стороны.
Я понял, что с этим решением достиг потолка: требовал от одного агента быть и стратегом, и тактиком, и энергоменеджером одновременно. Он справлялся, но с трудом — как жонглер, которому подкидывают все новые мячи.
Решение напрашивалось само: разделить задачу между несколькими специализированными агентами. Так родилась архитектура, которая в итоге решила проблему.
«Пять друзей Оушена»: мультиагентная система
Пришлось разбить проблему на пять независимых подзадач и поручить каждую отдельному RL-агенту.

Чтобы они работали как единый организм, я создал интеграционный слой поверх симулятора NS-3. Он собирает полную картину состояния сети и отправляет каждому агенту только релевантную информацию. Интеграционный слой отвечает за то, чтобы решения не конфликтовали друг с другом.
Агент 1: Диспетчер RACH-слотов
Первый агент работает в реальном времени по двум метрикам: количество коллизий и процент успешных подключений. Много коллизий — увеличивает число RACH-слотов, чтобы разгрузить канал. Канал простаивает — сокращает слоты, экономя ресурсы. Чистая тактика без стратегии: он реагирует на ситуацию, не пытаясь ее прогнозировать.
Агент 2: Предсказатель пиковых нагрузок
В отличие от Диспетчера, Предсказатель работает на опережение. Анализирует временные ряды и выявляет паттерны: утренняя активация офисных датчиков в 9:00, ночной сбор данных со счетчиков в 3:00, пики по дням недели. За несколько минут до прогнозируемого всплеска отправляет сигнал другим агентам подготовить дополнительные ресурсы. Классическое предиктивное управление на основе исторических данных.
Агент 3: Классификатор трафика
Он распределяет устройства по трем категориям: периодические (метеостанции с регулярной передачей), критические (датчики утечки газа — редко, но срочно) и фоновые (сбор телеметрии). Для каждой категории настраивает свои параметры ACB и выделяет ресурсы. При появлении критического сигнала временно блокирует фоновый трафик. Обеспечивает QoS без перегрузки канала.
Агент 4: Балансировщик нагрузки
Работает с пространственным распределением трафика между сотами и секторами. Отслеживает загрузку каждой базовой станции: количество запросов, уровень коллизий, качество сигнала. Когда одна станция перегружена, а соседняя простаивает, этот агент перераспределяет нагрузку через настройку параметров хэндовера и динамическое выделение RACH-слотов между секторами.
Агент 5: Менеджер энергопотребления
Оптимизирует расход батарей. Анализирует количество повторных попыток подключения, уровни сигнала и текущие режимы энергосбережения (PSM, eDRX). Когда устройство тратит слишком много энергии на неудачные попытки, корректирует параметры: либо ограничивает число повторов, либо увеличивает периоды сна между попытками. Его цель — добиться максимального времени автономной работы при сохранении связности.
Песочница для ИИ: строим цифровой город для тестов
Агентам нужна была реалистичная среда для обучения — цифровой двойник сотовой сети, где они отрабатывали бы «навыки» без риска для реальной инфраструктуры.
Для этого я использовал Network Simulator 3 версии 3.35 с полной поддержкой NB-IoT по спецификации 3GPP Release 13. Представьте игровой движок вроде Unreal Engine, который вместо графики с маниакальной точностью воссоздает физику распространения радиоволн, логику сетевых протоколов и поведение тысяч устройств — это и есть NS-3.
Агенты работали с детальной эмуляцией физического канала NPRACH со всеми процедурами генерации преамбул и установления соединений. NS-3 позволял управлять теми же параметрами, что доступны реальному оператору: количество RACH-слотов, коэффициент ACB, максимальное число повторов передачи.
Симулятор написан на C++, а RL-агенты — на Python. Для связи между ними я использовал фреймворк ns3-gym, который представляет симулятор как среду OpenAI Gym.

Работает это так: симулятор передает состояние сети (коллизии, загрузка, задержки) через фреймворк ns3-gym в Python. Агенты обрабатывают данные и возвращают решения — например, изменить число RACH-слотов или увеличить паузы между попытками. ns3-gym транслирует команды обратно в C++, симулятор применяет новые параметры и продолжает работу. Цикл «наблюдение — решение — действие» повторяется на каждом шаге симуляции, позволяя агентам учиться в реальном времени.
Каждому агенту подобрал алгоритм обучения под его задачу.
Для Диспетчера (агент 1), Классификатора (агент 3) и Балансировщика (агент 4) выбрал DQN (Deep Q-Network). Этот алгоритм хорошо подходит для задач с дискретным пространством действий: выбор количества RACH-слотов (4, 6, 8 или 10), установка коэффициента ACB (0.5, 0.7, 0.9) и так далее.
Менеджер энергопотребления работает с непрерывным пространством действий (мощность передачи от 0 до 100%, длительность периодов сна от 0.1 до 10 секунд), и должен плавно их регулировать. Оптимальный выбор для него — DDPG.
Обучение проходило эпизодами по одному часу симуляционного времени. В начале каждого эпизода генерировалась новая конфигурация устройств и профили трафика — так агенты учились адаптироваться, а не запоминать один сценарий. После 500 эпизодов метрики стабилизировались: коллизии и задержки вышли на плато.
Зафиксировав обученные политики, я провел контрольные тесты для сравнения с базовыми методами и одноагентной системой.
Результаты обучения
Хотелось не просто протестировать агентов в неких усредненных условиях, а сравнить два контрастных сценария. Дело в том, что разные агенты могут вести себя по-разному в зависимости от условий.
Первый сценарий задумывался как симуляция высоконагруженной городской сети: 1 тысяча устройств на площади 1 километр. Его ключевая особенность — синхронные пики нагрузки каждый час, когда большинство устройств одновременно передают данные. По сути это стресс-тест на работу в условиях экстремальной перегрузки канала.
Второй сценарий — условно деревенский. Это территория с радиусом в 10–15 километров, где находится всего 50 устройств. Здесь нет большой нагрузки, но большие расстояния означают слабый сигнал. Задача агентов — добиться энергоэффективной передачи данных, ведь каждая повторная передача сокращает срок службы батареек в датчиках.
Сравнивал три подхода:
Статическая конфигурация (базовый метод).
Одноагентная RL-система (наша предыдущая разработка).
Мультиагентная система (пять специализированных агентов).
Модель |
Подход |
Коллизии (%) |
Успешные подключения (%) |
Задержка (с) |
Энергия (мДж) |
Город |
Статический |
26 |
70 |
~5 |
5.5 |
Одноагентный |
15 |
85 |
2.5 |
4.6 |
|
Мультиагентный |
7 |
96 |
1.5 |
3.6 |
|
Село |
Статический |
4 |
90 |
1.8 |
2.0 |
Одноагентный |
1.5 |
95 |
1.3 |
1.8 |
|
Мультиагентный |
~1 |
98 |
1.0 |
1.4 |
Давайте разберем эти результаты.
Тестирование в «городе»
Команда из пяти агентов справилась с задачей управления спектром в условиях максимальной нагрузки. Посмотрим на конкретные показатели.
Коллизии снизились в четыре раза. Статическая система допускала столкновения в 26% случаев — каждое четвертое устройство конфликтовало с соседом при попытке передачи. Одиночный агент снизил этот показатель до 15%. Команда агентов довела его до 7%. Теперь вероятность коллизии при выходе в эфир уменьшилась почти в четыре раза по сравнению со статическим распределением.
Успешные подключения выросли до 96%. Практически все устройства выходили на связь с минимальным числом попыток. В условиях массового подключения такой уровень надежности раньше был недостижим.
Задержка сократилась с 5 до 1,5 секунды. Получился почти мгновенный отклик. В критических приложениях такая разница может быть очень важна.
Энергопотребление упало на 35%. Всего 3,6 мДж на успешную передачу против 5,5 мДж при статическом управлении. Для устройств на батарейках это означает месяцы дополнительной работы без подзарядки.
Тестирование в «деревне»
В сценарии с низкой плотностью устройств статическая система изначально работала приемлемо, но мультиагентный подход доказал, что резервы для улучшения есть даже в таких условиях.
Коллизии снизились до 1%. Практически полное отсутствие конфликтов при передаче данных. Для сравнения: статическая система давала 8% коллизий даже при малой плотности устройств.
Успешность подключений достигла 98%. Почти все устройства устанавливали связь с первой попытки.
Энергопотребление — главное достижение. Всего 1,4 мДж на передачу против 2,1 мДж у статической системы. Снижение на 33% достигнуто за счет работы Менеджера энергопотребления (агент 5), который настраивал режимы сна и минимизировал число повторных передач для устройств со слабым сигналом.
Почему мультиагентный подход работает
Такие высокие показатели обеспечиваются благодаря разделению функций между специализированными агентами. В городском сценарии Предсказатель (агент 2) предсказывал всплески трафика, а Диспетчер (агент 1) заранее перераспределял ресурсы под растущую нагрузку. Параллельно Классификатор трафика (агент 3) резервировал каналы для критически важных сообщений, предотвращая их блокировку обычным трафиком.
После обучения я измерил парную корреляцию наград между агентами — она составила 0,5. Это означает, что агенты научились координировать действия: они не конфликтуют между собой и не принимают противоречивых решений. Система работает как единое целое, а не как набор независимых алгоритмов.
Эксперименты подтвердили: распределение функций между специализированными RL-агентами дает измеримый прирост производительности. Метод показал снижение коллизий в 3-4 раза, сокращение задержек в 3 раза и экономию энергии на 30-35% по сравнению со статическим управлением спектром в сетях NB-IoT.
Дальнейшие шаги
Основной вывод этого проекта в том, что сложную задачу управления массовым доступом в NB-IoT эффективнее решать через декомпозицию на специализированные подзадачи.
Мультиагентный подход с использованием обучения с подкреплением показал свою эффективность в симуляции. Теперь предстоит проверить и адаптировать технологию для реальных условий эксплуатации. В симуляторе NS-3 агенты работали в контролируемых условиях. На реальных базовых станциях появятся радиопомехи, аппаратные сбои, непредсказуемое поведение устройств. Это покажет, насколько алгоритмы устойчивы к реальным условиям эксплуатации.
Еще один критически важный вопрос — устойчивость системы к сбоям отдельных компонентов. Необходимо протестировать сценарии отказа агентов и разработать механизмы компенсации. Система должна продолжать работу даже при выходе из строя одного или нескольких агентов, пусть и с деградацией производительности.
Также требуется исследовать устойчивость к искаженным входным данным и развить механизмы самодиагностики для раннего обнаружения проблем. Я планирую добавить в систему агента безопасности. Текущая архитектура не различает легитимные всплески трафика и целенаправленные атаки. Новый агент будет анализировать паттерны поведения сети, выявлять аномалии и блокировать попытки DDoS-атак или других видов вмешательства.
Еще многое предстоит сделать, но теперь понятно, в каком направлении двигаться. Полученные результаты — это реальный путь повышения эффективности работы интернета вещей.