ImprovedELVEnv — Ракета-носитель ELV, отслеживание тангажа (нормализованная, RL-совместимая)¶
На этой странице описана среда ImprovedELVEnv, предназначенная для обучения и оценки контроллеров на основе обучения с подкреплением в продольном канале ракеты-носителя (ELV). Среда предоставляет нормализованный интерфейс наблюдений и действий, формированную награду для точного и плавного отслеживания тангажа, а также реалистичные условия завершения.
Эталонная реализация находится в tensoraerospace/envs/elv.py (класс ImprovedELVEnv).
Краткое описание¶
- Пространство наблюдений: 4D, нормализовано в [-1, 1]
- Пространство действий: 1D, нормализовано в [-1, 1] (команда отклонения руля высоты)
- Цель: отслеживание изменяющегося во времени задания по тангажу при сохранении плавности управления
- Награда: квадратичные штрафы за ошибку отслеживания тангажа, рассогласование угловой скорости тангажа с эталонной динамикой, абсолютное воздействие, скорость изменения и рывок воздействия (с масштабированием)
- Завершение: выход за безопасный диапазон тангажа или достижение горизонта по времени
Наблюдение и действие¶
Пусть \(\theta\) -- текущий угол тангажа (рад), \(q\) -- угловая скорость тангажа (рад/с), а \(\theta_{ref}(t)\) -- целевой тангаж.
Наблюдение на шаге \(t\) представляет собой 4-мерный вектор:
где
- \(\theta_{max} = 20°\) (внутри преобразуется в радианы),
- \(q_{max} = 5°/\text{s}\) (внутри преобразуется в рад/с),
- \(u_{t-1} \in [-1, 1]\) -- предыдущая нормализованная команда руля высоты.
Важно: Вектор наблюдений уже нормализован и готов к использованию. Индекс [0] содержит нормализованную ошибку отслеживания тангажа, которая может использоваться непосредственно для пропорционального управления.
Действие -- единственная нормализованная команда \(u_t \in [-1, 1]\). Она отображается в физическое отклонение руля высоты (рад):
которое передаётся непосредственно во внутреннюю модель ELV в радианах.
Функция награды¶
Среда использует формированную награду с пятью слагаемыми, стимулирующими точность и плавность при штрафовании чрезмерного воздействия. Награда за шаг:
с весами и масштабом по умолчанию:
Члены ошибки определяются как
где \(\dot\theta_{ref}(t)\) -- конечно-разностная производная эталонного тангажа, вычисленная с шагом моделирования \(\Delta t\). Члены гладкости воздействия используют
Замечания:
- Больший \(w_\theta\) акцентирует точное отслеживание тангажа.
- \(w_q\) демпфирует реакцию относительно наклона эталонного сигнала, снижая перерегулирование и колебания.
- \(w_u, w_{\Delta}, w_{\Delta^2}\) регуляризируют расход энергии и плавность команд, подавляя дребезг.
- Общий масштаб \(s\) удерживает награды в компактном численном диапазоне для стабильности RL.
Завершение и усечение¶
- Аварийное завершение: если \(|\theta| > \theta_{max}\), эпизод завершается досрочно и на этом шаге применяется большой штраф (\(-100\)).
- Усечение: эпизод усекается при достижении заданного горизонта (число временных шагов).
Динамика эпизода¶
На каждом шаге:
- Агент выдаёт \(u_t \in [-1, 1]\).
- Среда ограничивает \(u_t\) диапазоном \([-1, 1]\), отображает в \(\delta_e\) в радианах и продвигает внутреннюю модель ELV.
- Наблюдение \(\mathbf{o}_{t+1}\) строится с использованием нормализованных сигналов.
- Награда \(r_t\) вычисляется по формуле выше.
- Проверяются условия завершения/усечения.
Пример использования¶
import numpy as np
from tensoraerospace.envs.elv import ImprovedELVEnv
from tensoraerospace.signals.standard import sinusoid_vertical_shift
from tensoraerospace.utils import generate_time_period, convert_tp_to_sec_tp
dt = 0.01
tn = 200
tp = generate_time_period(tn=tn, dt=dt)
tps = convert_tp_to_sec_tp(tp, dt=dt)
number_time_steps = len(tp)
# Эталон: плавный синусоидальный тангаж в радианах (амплитуда 1 град)
reference_signal = np.reshape(
sinusoid_vertical_shift(
tp=np.asarray(tps), frequency=0.05, amplitude=np.deg2rad(1.0), vertical_shift=0.0
),
(1, -1),
)
# Начальное состояние: [w, q, theta] в единицах СИ (м/с, рад/с, рад)
initial_state = np.array([0, 0, 0], dtype=np.float32)
env = ImprovedELVEnv(
initial_state=initial_state,
reference_signal=reference_signal,
number_time_steps=number_time_steps,
initial_elevator_deg=0.0,
use_initial_action_on_first_step=True,
dt=dt,
)
obs, info = env.reset()
done = False
while not done:
# простое пропорциональное управление по нормализованной ошибке тангажа в [-1, 1]
u = float(np.clip(2.0 * float(obs[0]), -1.0, 1.0))
obs, reward, terminated, truncated, info = env.step(np.array([u], dtype=np.float32))
done = bool(terminated or truncated)
Замечания по реализации¶
- Границы нормализации наблюдений (\(\theta_{max}, q_{max}\)) и пределы руля высоты определены внутри класса и при необходимости могут быть настроены.
- Веса награды доступны как атрибуты экземпляра (
w_pitch,w_q,w_action,w_smooth,w_jerk,reward_scale) и могут быть изменены для соответствия конкретным целям управления. - Внутреннее представление состояния следует порядку
[w, q, theta](единицы СИ: м/с, рад/с, рад), но наблюдения нормализованы в[-1, 1]. - Модель ELV принимает вход руля высоты в радианах; среда выполняет преобразование из нормализованного пространства действий автоматически.
Литература¶
tensoraerospace/envs/elv.py-- полная реализация среды- Модель динамики ракеты-носителя ELV:
tensoraerospace/aerospacemodel/elv.py