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

В этом примере показано, как обучить двуногого робота обходить использование и агент глубоко детерминированного градиента политики (DDPG) и задержанный близнецами глубоко детерминированный градиент политики (TD3) агент. В примере вы также сравниваете эффективность этих обученных агентов. Робот в этом примере моделируется в Simscape™ Multibody™.

Для получения дополнительной информации об этих агентах смотрите Глубоко Детерминированных Агентов Градиента политики и Задержанный Близнецами Глубоко Детерминированные Агенты Градиента политики.

В целях сравнения в этом примере этот пример обучает обоих агентов на среде двуногого робота с теми же параметрами модели. Пример также конфигурирует агентов, чтобы иметь следующие общие настройки.

  • Первоначальная стратегия условия двуногого робота

  • Структура сети агента и критика, вдохновленного [1]

  • Опции для представлений актёра и критика

  • Опции обучения (шаг расчета, коэффициент дисконтирования, мини-пакетный размер, длина буфера опыта, шум исследования)

Модель двуногого робота

Среда обучения с подкреплением для этого примера является двуногим роботом. Цель обучения должна сделать обход робота в прямой линии с помощью минимального усилия по управлению.

Загрузите параметры модели в рабочую область MATLAB®.

robotParametersRL

Откройте модель Simulink.

mdl = 'rlWalkingBipedRobot';
open_system(mdl)

Робот моделируется с помощью Simscape Multibody.

Для этой модели:

  • В нейтральных 0 положениях рад оба из участков являются прямыми, и лодыжки являются плоскими.

  • Контакт ноги моделируется с помощью блока Spatial Contact Force (Simscape Multibody).

  • Агент может управлять 3 отдельными соединениями (лодыжка, колено и бедро) на обоих участках робота путем применения сигналов крутящего момента от -3 к 3 N· m. Фактические вычисленные сигналы действия нормированы между -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

createDDPGAgent и createTD3Agent функции помощника выполняют следующие действия.

  • Создайте сети критика и агент.

  • Задайте опции для представлений актёра и критика.

  • Создайте представления актёра и критика с помощью созданных сетей и заданных опций.

  • Сконфигурируйте агента определенные опции.

  • Создайте агента.

Агент DDPG

Агент DDPG аппроксимирует долгосрочные премиальные заданные наблюдения и действия с помощью представления функции ценности критика. Агент DDPG решает который действие взять заданные наблюдения при помощи представления актера. Агент и сети критика для этого примера вдохновлены [1].

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

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

Агент TD3

Агент TD3 аппроксимирует долгосрочные премиальные заданные наблюдения и действия с помощью двух представлений функции ценности критика. Агент TD3 решает который действие взять заданные наблюдения с помощью представления актера. Структура агента и сетей критика, используемых для этого агента, совпадает с теми используемыми для агента DDPG.

Агент DDPG может дать завышенное значение Q. Поскольку агент использует значение Q, чтобы обновить его политику (агент), результирующая политика может быть субоптимальной, и накапливающиеся учебные ошибки могут привести к расходящемуся поведению. Алгоритм TD3 является расширением DDPG с улучшениями, которые делают его более устойчивым путем предотвращения переоценки значений Q [3].

  • Две сети критика — агенты TD3 изучают две сети критика независимо и используют оценку функции минимального значения, чтобы обновить агента (политика). Выполнение так предотвращает накопление ошибки на последующих шагах и переоценке значений Q.

  • Сложение целевого шума политики — Добавление отсеченного шума к функциям ценности сглаживает значения функции Q по подобным действиям. Выполнение так предотвращает изучение неправильного резкого пика шумной оценки значения.

  • Задержанная политика и целевые обновления — Для агента TD3, задерживая обновление сети агента позволяют большему количеству времени для функции Q уменьшать ошибку (станьте ближе к необходимой цели) прежде, чем обновить политику. Выполнение так предотвращает отклонение в оценках значения и результаты в более высоком обновлении политики качества.

Для получения дополнительной информации на создании агента TD3, смотрите createTD3Agent функция помощника. Для получения информации о конфигурировании опций агента TD3 смотрите rlTD3AgentOptions.

Задайте опции обучения и обучите агента

В данном примере опции обучения для DDPG и агентов TD3 являются тем же самым.

  • Запустите каждый сеанс обучения для 2 000 эпизодов с каждым эпизодом, длящимся в большей части maxSteps временные шаги.

  • Отобразите прогресс обучения в диалоговом окне Episode Manager (установите 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 опция к true.

  • Обучите агента параллельно асинхронно.

  • После каждых 32 шагов имейте каждого рабочего, отправляют события параллельному клиенту пула (процесс MATLAB®, который запускает обучение). 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);

Сравните эффективность агента

Для следующего сравнения агента каждый агент был обучен пять раз с помощью различного случайного seed каждый раз. Из-за случайного шума исследования и случайности в параллельном обучении, кривая обучения для каждого запуска отличается. Поскольку обучение агентов для нескольких запусков занимает несколько дней, чтобы завершиться, это сравнение использование предварительно обученные агенты.

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

comparePerformance('DDPGAgent','TD3Agent')

На основе графика сравнения Кривой обучения:

  • Агент DDPG, кажется, берет изучение быстрее (вокруг эпизода номер 600 в среднем), но поражает локальный минимум. TD3 запускается медленнее, но в конечном счете достигает более высоких вознаграждений, чем DDPG, когда это избегает переоценки значений Q.

  • Агент TD3 показывает устойчивое улучшение своей кривой обучения, которая предлагает улучшенную устойчивость когда по сравнению с агентом DDPG.

На основе графика сравнения Эпизода Q0:

  • Для агента TD3 оценка критика обесцененного долгосрочного вознаграждения (для 2 000 эпизодов) ниже по сравнению с агентом DDPG. Это различие - то, потому что алгоритм TD3 проявляет консервативный подход в обновлении его целей при помощи минимума двух функций Q. Это поведение далее улучшено из-за задержанных обновлений целей.

  • Несмотря на то, что оценка TD3 для этих 2 000 эпизодов является низкой, агент TD3 показывает устойчивое увеличение значений эпизода Q0, в отличие от агента DDPG.

В этом примере обучение было остановлено в 2 000 эпизодов. В течение большего периода подготовки агент TD3 с его устойчивым увеличением оценок показывает потенциал, чтобы сходиться к истинному обесцененному долгосрочному вознаграждению.

Для другого примера о том, как обучить гуманоидного робота обходить использование агента DDPG, смотрите, Обучают Гуманоида Уокера (Simscape Multibody). Для примера о том, как обучить робота четвероногого животного обходить использование агента DDPG, смотрите, что Передвижение Робота Четвероногого животного Использует Агента DDPG.

Ссылки

[1] Lillicrap, Тимоти П., Джонатан Дж. Хант, Александр Прицель, Николас Хисс, Том Эрез, Ювал Тасса, Дэвид Сильвер и Даан Вирстра. "Непрерывное Управление с Глубоким Обучением с подкреплением". Предварительно распечатайте, представленный 5 июля 2019. https://arxiv.org/abs/1509.02971.

[2] Heess, Николас, Тбайт Dhruva, Сринивасан Срирэм, Джей Леммон, Джош Мерель, Грег Уэйн, Ювал Тасса, и др. "Появление Поведений Передвижения в Богатых Средах". Предварительно распечатайте, представленный 10 июля 2017. https://arxiv.org/abs/1707.02286.

[3] Фудзимото, Скотт, Херк ван Хуф и Дэвид Меджер. "Исправляя Ошибку Приближения функций в Методах Критика Агента". Предварительно распечатайте, представленный 22 октября 2018. https://arxiv.org/abs/1802.09477.

Смотрите также

Похожие темы

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте