Передвижение робота четвероногого животного Используя агента DDPG

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

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

initializeRobotParameters

Модель робота четвероногого животного

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

Робот моделируется с помощью Simscape Multibody и Библиотеки Сил контакта Simscape Multibody. Основные структурные компоненты являются четырьмя участками и туловищем. Участки соединяются с туловищем через шарнирные соединения. Значения действия, введенные блоком RL Agent, масштабируются и преобразуются в объединенные значения крутящего момента. Эти объединенные значения крутящего момента используются шарнирными соединениями, чтобы вычислить движение.

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

mdl = 'rlQuadrupedRobot';
open_system(mdl)

Наблюдения

Среда робота предоставляет 44 наблюдения агенту, каждый нормированный между –1 и 1. Эти наблюдения:

  • Y (вертикальный) и Y (ответвление) позиция центра туловища массы

  • Кватернион, представляющий ориентацию туловища

  • X (прямой), Y (вертикальный), и Z (ответвление) скорости туловища в центре массы

  • Прокрутитесь, сделайте подачу, и уровни рыскания туловища

  • Угловые положения и скорости бедра и коленных суставов для каждого участка

  • Нормальный и трение обеспечивают должный основать контакт для каждого участка

  • Значения действия (закручивают для каждого соединения) от предыдущего временного шага

Для всех четырех участков начальные значения для углов бедра и коленного сустава установлены к –0.8234 и 1,6468 рад, соответственно. Нейтральные положения соединений в 0 рад. Участки находятся в нейтральном положении, когда они расширяются к их максимуму и выравниваются перпендикулярно к земле.

Действия

Агент генерирует восемь действий, нормированных между –1 и 1. После умножения с масштабным коэффициентом они соответствуют восьми объединенным сигналам крутящего момента для шарнирных соединений. Полные объединенные границы крутящего момента +/– 10 Н · m для каждого соединения.

Вознаграждение

Следующее вознаграждение предоставляется агенту на каждом временном шаге во время обучения. Эта премиальная функция поощряет агента продвигаться путем обеспечения положительного вознаграждения за положительную прямую скорость. Это также поощряет агента избегать раннего завершения путем обеспечения постоянного вознаграждения (25Ts/Tf25 Ts/Tf) на каждом временном шаге. Остающиеся условия в премиальной функции являются штрафами, которые препятствуют нежелательным состояниям, таким как большие отклонения от желаемой высоты и ориентация или использование чрезмерных объединенных крутящих моментов.

rt=vx+25TsTf-50yˆ2-20θ2-0.02iut-1i2r (t) = vx (t) + 25 * Ts/Tf - 50 * ĥ (t) ^2 - 20 * θ (t) 2 - 0.02 * Σ u (t-1) ^2

где

  • vxvx (t) скорость центра туловища массы в направлении X.

  • TsTs и TfTf шаг расчета и итоговое время симуляции среды, соответственно.

  • yˆ масштабированная ошибка высоты центра туловища массы от желаемой высоты 0,75 м.

  • θ угол тангажа туловища.

  • ut-1iu (t-1)значение действия для соединения i от предыдущего временного шага.

Завершение эпизода

Во время обучения или симуляции, завершает работу эпизод, если какая-либо из следующих ситуаций происходит.

  • Высота центра туловища массы от земли ниже (упавших) 0,5 м.

  • Голова или хвост туловища ниже земли.

  • Любой коленный сустав ниже земли.

  • Прокрутитесь, сделайте подачу, или углы рыскания находятся вне границ (+/– 0.1745, +/– 0.1745, и + рад/-0.3491, соответственно).

Создайте интерфейс среды

Задайте параметры для набора наблюдения.

numObs = 44;
obsInfo = rlNumericSpec([numObs 1]);
obsInfo.Name = 'observations';

Задайте параметры для набора действия.

numAct = 8;
actInfo = rlNumericSpec([numAct 1],'LowerLimit',-1,'UpperLimit', 1);
actInfo.Name = 'torque';

Создайте среду с помощью модели обучения с подкреплением.

blk = [mdl, '/RL Agent'];
env = rlSimulinkEnv(mdl,blk,obsInfo,actInfo);

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

env.ResetFcn = @quadrupedResetFcn;

Создайте агента DDPG

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

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

Создайте сети в рабочем пространстве MATLAB с помощью createNetworks функция помощника.

createNetworks

Можно также создать агента и сети критика в интерактивном режиме с помощью приложения Deep Network Designer.

Просмотрите конфигурацию сети критика.

plot(criticNetwork)

Задайте опции агента с помощью rlDDPGAgentOptions.

agentOptions = rlDDPGAgentOptions;
agentOptions.SampleTime = Ts;
agentOptions.DiscountFactor = 0.99;
agentOptions.MiniBatchSize = 250;
agentOptions.ExperienceBufferLength = 1e6;
agentOptions.TargetSmoothFactor = 1e-3;
agentOptions.NoiseOptions.MeanAttractionConstant = 0.15;
agentOptions.NoiseOptions.StandardDeviation = 0.1;

Создайте rlDDPGAgent объект для агента.

agent = rlDDPGAgent(actor,critic,agentOptions);

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

Чтобы обучить агента, сначала задайте следующие опции обучения:

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

  • Отобразите прогресс обучения в диалоговом окне Episode Manager (установите Plots опция), и отключают отображение командной строки (установите Verbose опция).

  • Остановите обучение, когда агент получит среднее совокупное вознаграждение, больше, чем 190 более чем 250 последовательных эпизодов.

  • Сохраните копию агента для каждого эпизода, где совокупное вознаграждение больше 200.

maxEpisodes = 10000;
maxSteps = floor(Tf/Ts);  
trainOpts = rlTrainingOptions(...
    'MaxEpisodes',maxEpisodes,...
    'MaxStepsPerEpisode',maxSteps,...
    'ScoreAveragingWindowLength',250,...
    'Verbose',true,...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',190,...                   
    'SaveAgentCriteria','EpisodeReward',... 
    'SaveAgentValue',200);                       

Чтобы обучить агента параллельно, задайте следующие опции обучения. Обучение параллельно требует программного обеспечения Parallel Computing Toolbox™. Если вам не установили программное обеспечение Parallel Computing Toolbox™, установите UseParallel к false.

  • Установите UseParallel опция к true.

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

  • После каждых 32 шагов каждый рабочий отправляет события в хост.

  • Агенты DDPG требуют, чтобы рабочие отправили 'Experiences' к хосту.

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 example.
    load('rlQuadrupedAgent.mat','agent')
end

Симулируйте обученного агента

Для повторяемости результатов зафиксируйте начальное значение генератора случайных чисел.

rng(0)

Чтобы подтвердить производительность обученного агента, симулируйте его в среде робота. Для получения дополнительной информации о симуляции агента смотрите rlSimulationOptions и sim.

simOptions = rlSimulationOptions('MaxSteps',maxSteps);
experience = sim(env,agent,simOptions);

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

Ссылки

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

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

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

Похожие темы