Обучение DSAC: Boeing 747 — ступенчатое воздействие¶
Этот производственный скрипт обучает агента DSAC для управления по ступенчатому воздействию продольной динамикой Boeing 747. Используется подход curriculum learning для постепенного увеличения сложности задачи.
Обзор¶
| Аспект | Описание |
|---|---|
| Задача | Отработка ступенчатого воздействия (угол тангажа θ) |
| Среда | ImprovedB747VecEnvTorch (векторизованная, GPU-ускорение) |
| Парадигма обучения | Многоэтапное curriculum learning |
| Сохранение | Лучший чекпоинт по результатам оценки |
Зачем curriculum learning?¶
Управление по ступенчатому воздействию со строгими метриками качества (малое перерегулирование, быстрое установление) создаёт разреженный ландшафт наград. Прямое обучение на целевой задаче часто не работает, потому что:
- Агент учится завершать эпизод раньше, чтобы не накапливать отрицательные награды
- Большие разрывы в наградах дестабилизируют обучение критика
- Агент никогда не видит успешных траекторий для обучения
Curriculum решает эти проблемы:
- Этап 0 (Bootstrap): Обучение с наградой
tracking— плотная, гладкая обратная связь - Этап 1a: Переключение на
step_responseс ослабленными порогами (20% перерегулирование, 5% полоса установления) - Этап 1b: Ужесточение порогов до целевых значений (5% перерегулирование, 1% полоса)
- Этап 2: Удаление бонусов за завершение/ранний выход для робастности
Запуск¶
Мониторинг обучения через TensorBoard:
Структура скрипта¶
train_dsac_b747_step_response.py
├── load_dsac_checkpoint() # Возобновление с предыдущего запуска
├── find_latest_metrics() # Автопоиск лучшего чекпоинта
├── make_reference() # Генерация ступенчатого сигнала
├── eval_one_episode() # Оценка одного эпизода
├── save_eval_best() # Управление чекпоинтами
└── main() # Curriculum обучения
Ключевые гиперпараметры¶
Векторизованная среда¶
env_train = ImprovedB747VecEnvTorch(
num_envs=128, # Параллельные среды
dt=0.1, # Шаг времени (с)
tn=20.0, # Длительность эпизода (с)
auto_reset=True, # Авто-сброс при завершении
include_reference_in_obs=True, # Задание видимо агенту
reward_mode="tracking", # Начальный режим (переключается позже)
step_randomization={ # Рандомизация домена
"amplitude_deg_range": (-5.0, 5.0),
"step_time_sec_range": (1, 15),
},
)
Агент DSAC¶
agent = DSAC(
env_train,
batch_size=256,
memory_capacity=1_000_000,
learning_starts=100_000, # Большой буфер перед обучением
updates_per_step=4, # Несколько шагов градиента на шаг среды
lr=4.4e-4,
gamma=0.995, # Высокий дисконт для длинных эпизодов
tau=0.005,
num_quantiles=8, # Квантили IQN
embedding_dim=64,
hidden_layers=[64, 64],
automatic_entropy_tuning=True,
reward_clip=50.0, # Обрезка больших штрафов
)
Этапы curriculum¶
Этап 0: Bootstrap с наградой tracking¶
Зачем: Плотный сигнал награды помогает агенту освоить базовое управление до столкновения с разреженными метриками step_response.
Этап 1a: Ослабленный step response¶
env_train.reward_mode = "step_response"
env_train.overshoot_limit_ratio = 0.2 # Допустимо 20%
env_train.settle_band_ratio = 0.05 # 5% полоса
env_train.w_overshoot = 50.0 # Мягкий штраф
Зачем: Постепенный переход к целевой задаче без перегрузки агента штрафами.
Этап 1b: Полный step response¶
env_train.overshoot_limit_ratio = 0.05 # Допустимо 5%
env_train.settle_band_ratio = 0.01 # 1% полоса
env_train.w_overshoot = 300.0 # Сильный штраф
Зачем: Финальная сложность задачи со строгими требованиями качества.
Этап 2: Удаление формирования¶
Зачем: Проверка, что политика работает без искусственных наград формирования.
Предотвращение «хаков» раннего завершения¶
Агент может научиться «обманывать» систему наград, завершая эпизод раньше. Мы противодействуем этому:
- Бонус за завершение: +5.0 за выживание до конца эпизода
- Штраф за ранний выход: -1.0 за каждый оставшийся шаг
- Обрезка наград: Ограничение экстремальных штрафов для стабилизации
Чекпоинты¶
Скрипт поддерживает две директории чекпоинтов:
best_checkpoints/: Лучший во время обучения (по скользящей награде)best_eval/: Лучший на фиксированном эпизоде оценки
# После каждого этапа
m = eval_one_episode(agent, env_eval_step)
if m["return_sum"] > eval_best:
save_eval_best(agent, eval_best_dir, metrics=m)
Возобновление обучения¶
Скрипт автоматически находит и возобновляет с последнего чекпоинта best_eval:
resume_metrics = find_latest_metrics(Path("runs"))
if resume_checkpoint_dir is not None:
agent = load_dsac_checkpoint(resume_checkpoint_dir, env_train, device=device)
Советы¶
GPU-ускорение
Установите device="cuda" для значительного ускорения. Векторизованная среда работает на GPU.
Сброс буфера воспроизведения
При переключении с tracking на step_response буфер сбрасывается, чтобы не смешивать несовместимые масштабы наград.
Использование памяти
При memory_capacity=1_000_000 и num_envs=128 ожидайте ~4-8 ГБ памяти GPU.
См. также¶
- Алгоритм DSAC — архитектура и гиперпараметры
- Обучение DSAC (слежение за синусоидой) — альтернативная задача
- Оценка DSAC — визуализация обученного агента
- ImprovedB747Env — детали среды