В этом примере показано, как обучить робота четвероногого животного, смоделированный 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 нм для каждого соединения.
Следующая премиальная функция предоставляется производительности агента на каждом временном шаге во время обучения. Эта премиальная функция поощряет агента продвигаться путем обеспечения положительного вознаграждения за положительную прямую скорость. Это также поощряет агента избегать раннего завершения путем обеспечения постоянного вознаграждения () на каждом временном шаге. Остающиеся условия в премиальной функции являются штрафами, которые препятствуют нежелательным состояниям, таким как большие отклонения от желаемой высоты и ориентация или использование чрезмерных объединенных крутящих моментов.
где
скорость центра туловища массы в направлении X.
и шаг расчета и итоговое время симуляции среды, соответственно.
масштабированная ошибка высоты центра туловища массы от желаемой высоты 0.75 м.
угол подачи туловища.
значение действия для соединения от предыдущего временного шага.
Во время обучения или симуляции, эпизод завершает работу если
Высота центра туловища массы от земли ниже (упавших) 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 аппроксимирует долгосрочные премиальные заданные наблюдения и действия с помощью представления функции ценности критика. Агент также решает который действие взять, учитывая наблюдения, с помощью представления актера. Агент и сети критика для этого примера вдохновлены [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.