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

В этом примере показано, как обучить робота четвероногого животного, смоделированный Simscape Multibody использования, обходить использование агента глубоко детерминированного градиента политики (DDPG). Для получения дополнительной информации об агентах 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 нм для каждого соединения.

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

Следующая премиальная функция предоставляется производительности агента на каждом временном шаге во время обучения. Эта премиальная функция поощряет агента продвигаться путем обеспечения положительного вознаграждения за положительную прямую скорость. Это также поощряет агента избегать раннего завершения путем обеспечения постоянного вознаграждения (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.Variance = 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™, установите 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 pretrained agent for the example
    load('rlQuadrupedAgent.mat','agent')
end

Обратите внимание на то, что из-за случайности в параллельном обучении, различные учебные результаты ожидаются.

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

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

rng(0)

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

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

Ссылки

[1] Н. Хисс и др., "Появление Поведений Передвижения в Богатых Средах", Технический отчет, ArXiv, 2017.

[2] Т.П. Лилликрэп и др., "Непрерывное Управление с Глубоким Обучением с подкреплением", Международная конференция по вопросам Изучения Представлений, 2016.

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

Похожие темы

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