Обучите двойного робота ходить, используя агентов обучения с подкреплением

Этот пример показывает, как обучить двуногого робота ходить, используя как агента глубокого детерминированного градиента политики (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 рад.

Следующая функция вознаграждения rt, который предоставляется в каждый временной шаг вдохновляется [2].

rt=vx-3y2-50zˆ2+25TsTf-0.02iut-1i2

Здесь:

  • vx - скорость перемещения робота в направлении X (вперед к цели).

  • y является боковым перемещением робота от целевой траектории прямой линии.

  • zˆ - нормированное вертикальное перемещение центра масс робота.

  • ut-1i - крутящий момент от соединения i с предыдущего временного шага.

  • Ts - шаг расчета окружения.

  • Tf- окончательное время симуляции окружения.

Эта функция вознаграждения побуждает агента двигаться вперед, предоставляя положительное вознаграждение для положительной скорости вперед. Это также призывает агента избегать прекращения эпизода, предоставляя постоянное вознаграждение (25TsTf) в каждый временной шаг. Другими терминами в функции вознаграждения являются штрафы за существенные изменения в боковых и вертикальных переводах и за использование избыточных усилий по управлению.

Создайте интерфейс окружения

Создайте спецификацию наблюдений.

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 аппроксимирует долгосрочное вознаграждение, заданное наблюдениями и действиями, используя представление функции ценности критика. Агент DDPG решает, какое действие взять заданные наблюдения с помощью представления актера. Сети актёра и критика для этого примера вдохновлены [1].

Для получения дополнительной информации о создании агента DDPG см. createDDPGAgent вспомогательная функция. Для получения информации о настройке опций агента DDPG смотрите rlDDPGAgentOptions.

Для получения дополнительной информации о создании представления функции ценности глубокой нейронной сети, смотрите, Создают политику и представления функции ценности. Для примера, который создает нейронные сети для агентов DDPG, смотрите Обучите Агента DDPG для управления Системой Double Integrator.

TD3 агент

Агент 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.

См. также

Похожие темы