AI-система оптимизации сетевого трафика
RL для управления компьютерными сетями: динамическая маршрутизация, балансировка нагрузки, управление очередями, адаптивное выделение пропускной способности. OpenAI Gym + ns3/GNS3 симуляторы для обучения, деплой в SDN (Software-Defined Networking) контроллеры.
Задачи сетевой оптимизации через RL
Динамическая маршрутизация: Выбор пути в сети с переменными задержками и загрузкой каналов. RL превосходит OSPF/BGP в сетях с нестационарными паттернами трафика.
Adaptive Bitrate (ABR) для видеостриминга: Классика RL в сетях. Pensieve (MIT CSAIL 2017) — RL агент выбирает качество видео (chunk bitrate) на основе состояния буфера и bandwidth истории. Превосходит DASH в QoE на 12–25%.
Load Balancing: Распределение запросов между серверами. RL агент видит: текущая загрузка, latency, queue depth → выбирает сервер. Лучше Round-Robin при нестационарной нагрузке.
Congestion Control: Aurora, Orca — RL-based TCP congestion control. Обучается на разных сетевых условиях, адаптируется лучше CUBIC/BBR.
Моделирование: ns3 + OpenAI Gym
# ns3-gym: интеграция ns3 с gymnasium
from ns3gym import ns3env
env = ns3env.Ns3Env(port=5555, stepTime=0.5,
startSim=True, simSeed=42,
simArgs={'--simTime': 100, '--testArg': 0})
# observation: bandwidth stats, RTT, packet loss per flow
obs = env.observation_space # 12-dimensional vector
# action: routing weights или bitrate selection
action = env.action_space
RL агент для балансировки нагрузки
class LoadBalancerEnv(gym.Env):
def __init__(self, n_servers):
self.n_servers = n_servers
# observation: [response_time_i, cpu_usage_i, queue_len_i] per server
self.observation_space = spaces.Box(
low=0, high=1, shape=(n_servers * 3,))
# action: выбор сервера для текущего запроса
self.action_space = spaces.Discrete(n_servers)
def step(self, action):
server_id = action
response_time = self._route_request(server_id)
# reward: отрицательное время ответа + штраф за перегрузку
reward = -response_time
if self.servers[server_id].queue_length > THRESHOLD:
reward -= 5.0
obs = self._get_server_states()
return obs, reward, False, False, {}
Pensieve-style ABR
class ABREnv(gym.Env):
"""Adaptive Bitrate для видеостриминга"""
BITRATES = [300, 750, 1200, 1850, 2850, 4300] # Kbps
def __init__(self):
# state: [throughput_history × 8, buffer_size, last_chunk_bitrate,
# remaining_chunks, next_chunk_sizes × 6]
self.observation_space = spaces.Box(
low=0, high=np.inf, shape=(8 + 1 + 1 + 1 + 6,))
self.action_space = spaces.Discrete(len(self.BITRATES))
def step(self, action):
bitrate = self.BITRATES[action]
# QoE reward (Lin et al., 2019)
reward = (bitrate / 1000 # качество
- self.REBUFFER_PENALTY * rebuffer_time # штраф за буферизацию
- self.SMOOTH_PENALTY * abs(bitrate - self.prev_bitrate) / 1000)
return obs, reward, done, False, {}
SDN интеграция
Ryu / ONOS контроллер: SDN отделяет control plane от data plane. RL агент работает в control plane, управляет flow tables через OpenFlow.
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import set_ev_cls
class RLRoutingApp(app_manager.RyuApp):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.rl_agent = load_rl_model('routing_policy.pkl')
@set_ev_cls(ofp_event.EventOFPPacketIn)
def packet_in_handler(self, ev):
state = self._extract_network_state(ev)
action = self.rl_agent.predict(state)
self._install_flow_rule(ev.msg.datapath, action)
P4 программируемые switch: RL inference прямо на сетевом оборудовании. Latency <1 мкс для forwarding решений.
Метрики
- Average end-to-end latency (ms)
- Throughput (Gbps utilization)
- QoE score для видео (SSIM + rebuffering rate)
- Flow completion time distribution
- Link utilization variance (равномерность нагрузки)
Сроки: 4–10 недель
RL агент для ABR в симуляторе — 2–3 недели. SDN интеграция с реальным контроллером, load balancer для production трафика — 8–10 недель.







