Этот пример показывает, как обучить двуногого робота ходить, используя как агента глубокого детерминированного градиента политики (DDPG), так и агента с двумя задержками глубокого детерминированного градиента политики (TD3). В примере вы также сравниваете эффективность этих обученных агентов. Робот в этом примере смоделирован в Simscape™ Multibody™.
Для получения дополнительной информации об этих агентах см. «Агенты градиента глубокой детерминированной политики» и «Агенты градиента глубокой детерминированной политики с двумя задержками».
Для целей сравнения в этом примере этот пример обучает обоих агентов на двухскатных окружениях робота с одинаковыми параметрами модели. В этом примере агенты также имеют общие параметры.
Стратегия начального условия двуногого робота
Структура сети актёра и критика, вдохновленная [1]
Опции для представлений актёра и критика
Опции обучения (шаг расчета, коэффициент скидки, размер мини-пакета, длина буфера опыта, шум исследования)
Окружение обучения с подкреплением для этого примера является двухскатным роботом. Цель обучения состоит в том, чтобы заставить робота ходить по прямой линии с помощью минимальных усилий по управлению.
Загрузите параметры модели в рабочую область MATLAB ®.
robotParametersRL
Откройте модель Simulink.
mdl = 'rlWalkingBipedRobot';
open_system(mdl)
Робот моделируется с помощью Simscape Multibody.
Для этой модели:
В нейтральном положении 0 рад обе ноги прямые, а лодыжки плоские.
Контакт стопы моделируется с помощью блока Spatial Силы контакта (Simscape Multibody).
Агент может управлять 3 отдельными суставами (лодыжкой, коленом и бедром) на обеих ногах робота, подавая сигналы крутящего момента от -3
на 3
Н· м. Фактические вычисленные сигналы действия нормированы между -1
и 1
.
Это окружение предоставляет агенту следующие 29 наблюдений.
Y (боковой) и Z (вертикальный) переводы центра масс туловища. Перемещение в направлении Z нормировано к области значений, аналогичной другим наблюдениям.
X (вперед), Y (латерально) и Z (вертикально) скорости перемещения.
Рыскание, тангаж и углы крена туловища.
Рыскание, тангаж и крен скоростей вращения туловища.
Угловые положения и скорости трех соединений (лодыжка, колено, бедро) на обеих ногах.
Значения действий из предыдущего временного шага.
Эпизод прекращается, если происходит одно из следующих условий.
Центр масс робота-туловища меньше 0,1 м в направлении Z (робот падает) или больше 1 м в направлении Y (робот движется слишком далеко в сторону).
Абсолютное значение крена, тангажа или рыскания больше 0,7854 рад.
Следующая функция вознаграждения , который предоставляется в каждый временной шаг вдохновляется [2].
Здесь:
- скорость перемещения робота в направлении X (вперед к цели).
является боковым перемещением робота от целевой траектории прямой линии.
- нормированное вертикальное перемещение центра масс робота.
- крутящий момент от соединения i с предыдущего временного шага.
- шаг расчета окружения.
- окончательное время симуляции окружения.
Эта функция вознаграждения побуждает агента двигаться вперед, предоставляя положительное вознаграждение для положительной скорости вперед. Это также призывает агента избегать прекращения эпизода, предоставляя постоянное вознаграждение () в каждый временной шаг. Другими терминами в функции вознаграждения являются штрафы за существенные изменения в боковых и вертикальных переводах и за использование избыточных усилий по управлению.
Создайте спецификацию наблюдений.
numObs = 29;
obsInfo = rlNumericSpec([numObs 1]);
obsInfo.Name = 'observations';
Создайте спецификацию действия.
numAct = 6; actInfo = rlNumericSpec([numAct 1],'LowerLimit',-1,'UpperLimit',1); actInfo.Name = 'foot_torque';
Создайте интерфейс окружения для модели ходячего робота.
blk = [mdl,'/RL Agent'];
env = rlSimulinkEnv(mdl,blk,obsInfo,actInfo);
env.ResetFcn = @(in) walkerResetFcn(in,upper_leg_length/100,lower_leg_length/100,h/100);
Этот пример предоставляет опцию обучить робота либо с помощью агента DDPG, либо TD3. Чтобы симулировать робота с агентом по вашему выбору, установите AgentSelection
соответственно флаг.
AgentSelection = 'TD3'; switch AgentSelection case 'DDPG' agent = createDDPGAgent(numObs,obsInfo,numAct,actInfo,Ts); case 'TD3' agent = createTD3Agent(numObs,obsInfo,numAct,actInfo,Ts); otherwise disp('Enter DDPG or TD3 for AgentSelection') end
The createDDPGAgent
и createTD3Agent
вспомогательные функции выполняют следующие действия.
Создание сетей актёра и критика.
Задайте опции для представлений актёра и критика.
Создайте представления актёра и критика, используя созданные сети и заданные опции.
Настройте опции агента.
Создайте агента.
Агент DDPG аппроксимирует долгосрочное вознаграждение, заданное наблюдениями и действиями, используя представление функции ценности критика. Агент DDPG решает, какое действие взять заданные наблюдения с помощью представления актера. Сети актёра и критика для этого примера вдохновлены [1].
Для получения дополнительной информации о создании агента DDPG см. createDDPGAgent
вспомогательная функция. Для получения информации о настройке опций агента DDPG смотрите rlDDPGAgentOptions
.
Для получения дополнительной информации о создании представления функции ценности глубокой нейронной сети, смотрите, Создают политику и представления функции ценности. Для примера, который создает нейронные сети для агентов DDPG, смотрите Обучите Агента DDPG для управления Системой Double Integrator.
Агент TD3 аппроксимирует долгосрочные заданные наблюдения вознаграждения и действия с помощью двух представлений функции ценности критика. Агент TD3 решает, какое действие взять заданные наблюдения с помощью представления актера. Структура сетей актёра и критика, используемых для этого агента, совпадает с таковыми, используемой для агента DDPG.
Агент DDPG может переоценить значение Q. Поскольку агент использует значение Q для обновления своей политики (актёр), результирующая политика может быть неоптимальной, и накопление ошибок обучения может привести к расхождению в поведении. Алгоритм TD3 является расширением DDPG с улучшениями, которые делают его более устойчивым, предотвращая завышение значений Q [3].
Две сети критиков - агенты TD3 изучают две сети критиков независимо и используют минимальную оценку функции ценности для обновления актёра (политика). Это предотвращает накопление ошибки в последующих шагах и завышение значений Q.
Сложение целевого шума политики - Добавление обрезанного шума к функциям ценности сглаживает значения Q-функции при аналогичных действиях. Это препятствует изучению неправильного резкого пика оценки шумного значения.
Отложенная политика и целевые обновления - Для агента TD3 задержка обновления сети актёра позволяет большему времени для функции Q уменьшить ошибку (приблизиться к необходимому целевому объекту) перед обновлением политики. Это предотвращает отклонения в оценках значения и приводит к более качественному обновлению политики.
Для получения дополнительной информации о создании агента TD3 см. createTD3Agent
вспомогательная функция. Для получения информации о настройке TD3 агента опций см. rlTD3AgentOptions
.
В данном примере опции обучения для агентов DDPG и TD3 одинаковы.
Запускайте каждую обучающий сеанс для 2000 эпизодов с каждым эпизодом, длящимся самое большее maxSteps
временные шаги.
Отображение процесса обучения в диалоговом окне Диспетчер эпизодов (установите Plots
опция) и отключить отображение командной строки (установите Verbose
опция).
Завершите обучение только, когда оно достигает максимального количества эпизодов (maxEpisodes
). Это позволяет сравнить кривые обучения для нескольких агентов в течение всего сеанса обучения.
Для получения дополнительной информации и дополнительных опций смотрите rlTrainingOptions
.
maxEpisodes = 2000; maxSteps = floor(Tf/Ts); trainOpts = rlTrainingOptions(... 'MaxEpisodes',maxEpisodes,... 'MaxStepsPerEpisode',maxSteps,... 'ScoreAveragingWindowLength',250,... 'Verbose',false,... 'Plots','training-progress',... 'StopTrainingCriteria','EpisodeCount',... 'StopTrainingValue',maxEpisodes,... 'SaveAgentCriteria','EpisodeCount',... 'SaveAgentValue',maxEpisodes);
Чтобы обучить агента параллельно, задайте следующие опции обучения. Параллельное обучение требует Parallel Computing Toolbox™. Если у вас нет установленного программного обеспечения Parallel Computing Toolbox, установите UseParallel
на false
.
Установите UseParallel
опция t rue
.
Обучите агента параллельно асинхронно.
После каждого 32 шага попросите каждого работника отправить опыт на хост. Агенты DDPG и TD3 требуют от работников отправки опыта на хост.
trainOpts.UseParallel = true; trainOpts.ParallelizationOptions.Mode = 'async'; trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32; trainOpts.ParallelizationOptions.DataToSendFromWorkers = 'Experiences';
Обучите агента с помощью train
функция. Этот процесс является интенсивным в вычислительном отношении и занимает несколько часов, чтобы завершить для каждого агента. Чтобы сэкономить время при запуске этого примера, загрузите предварительно обученного агента путем установки doTraining
на false
. Чтобы обучить агента самостоятельно, установите doTraining
на true
. Из-за случайности в параллельном обучении можно ожидать различных результатов обучения от последующих графиков. Предварительно обученные агенты были обучены параллельно с использованием четырех рабочих.
doTraining = false; if doTraining % Train the agent. trainingStats = train(agent,env,trainOpts); else % Load a pretrained agent for the selected agent type. if strcmp(AgentSelection,'DDPG') load('rlWalkingBipedRobotDDPG.mat','agent') else load('rlWalkingBipedRobotTD3.mat','agent') end end
Для предыдущих примерных кривых обучения среднее время на шаг обучения для агентов DDPG и TD3 составляет 0,11 и 0,12 секунд, соответственно. Агент TD3 занимает больше времени на шаг обучения, потому что обновляет две сети критика по сравнению с одним критиком, используемым для DDPG.
Исправьте начальное значение генератора для повторяемости.
rng(0)
Чтобы подтвердить производительность обученного агента, симулируйте его в среде двойного робота. Для получения дополнительной информации о симуляции агента смотрите rlSimulationOptions
и sim
.
simOptions = rlSimulationOptions('MaxSteps',maxSteps);
experience = sim(env,agent,simOptions);
Для последующего сравнения агентов каждый агент был обучен пять раз с использованием различных случайных начальных чисел каждый раз. Из-за случайного исследовательского шума и случайности в параллельном обучении кривая обучения для каждого запуска отличается. Поскольку обучение агентов для нескольких запусков занимает несколько дней, это сравнение использует предварительно обученных агентов.
Для агентов DDPG и TD3 постройте среднее значение и стандартного отклонения вознаграждения эпизода (верхний график) и значения Q0 эпизода (нижний график). Значение Q0 эпизода является оценкой критиком дисконтированного долгосрочного вознаграждения в начале каждого эпизода, учитывая первоначальное наблюдение окружения. Для хорошо продуманного критика, эпизод Q0 значение приближается к истинному дисконтированному долгосрочному вознаграждению.
comparePerformance('DDPGAgent','TD3Agent')
На основе графика сравнения кривых обучения:
Агент DDPG, по-видимому, быстрее забирает обучение (в среднем около номера эпизода 600), но достигает локального минимума. TD3 начинается медленнее, но в конечном счете достигает более высоких вознаграждений, чем DDPG, поскольку избегает завышения значений Q.
Агент TD3 показывает устойчивое улучшение своей кривой обучения, что предполагает улучшенную стабильность по сравнению с агентом DDPG.
Основанный на графике сравнения Q0 эпизода:
Для агента TD3 оценка критика дисконтированного долгосрочного вознаграждения (на 2000 эпизодов) ниже по сравнению с агентом DDPG. Это различие связано с тем, что алгоритм TD3 использует консервативный подход при обновлении своих целей с помощью минимум двух Q-функций. Это поведение дополнительно улучшается из-за задержки обновления целевых объектов.
Хотя оценка TD3 для этих 2000 эпизодов низкая, агент TD3 показывает устойчивое увеличение значений Q0 эпизода, в отличие от агента DDPG.
В этом примере обучение было остановлено на 2000 эпизодах. Для большего периода обучения агент TD3 с его устойчивым увеличением оценок показывает потенциал сходиться к истинному дисконтированному долгосрочному вознаграждению.
Для другого примера о том, как обучить робота ходить с помощью агента DDPG, смотрите Train Humanoid Walker (Simscape Multibody). Пример о том, как обучить четырехкомпонентного робота ходить с использованием агента DDPG, см. в разделе «Четырехкомпонентный двигатель робота с использованием агента DDPG».
[1] Lillicrap, Timothy P., Jonathan J. Hunt, Alexander Pritzel, Nicolas Heess, Tom Erez, Yuval Tassa, David Silver, and Daan Wierstra. Непрерывное управление с глубоким обучением с подкреплением. Препринт, представленный 5 июля 2019 года. https://arxiv.org/abs/1509.02971.
[2] Heess, Nicolas, Dhruva TB, Srinivasan Sriram, Jay Lemmon, Josh Merel, Greg Wayne, Yuval Tassa, et al. «Появление поведения локомотива в богатых окружениях». Препринт, представленный 10 июля 2017 года. https://arxiv.org/abs/1707.02286.
[3] Фухимото, Скотт, Херке ван Хоф и Дэвид Мегер. «Устранение Приближения функций ошибки в методах актёра-критика». Препринт, представленный 22 октября 2018 года. https://arxiv.org/abs/1802.09477.