В этом примере показано, как обучить робота в четыре раза ходить с использованием агента глубокого детерминированного градиента политики (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 Н· м для каждого соединения.
Следующее вознаграждение предоставляется агенту на каждом временном шаге во время обучения. Эта функция поощрения побуждает агента двигаться вперед, предоставляя положительное вознаграждение за положительную скорость вперед. Он также призывает агента избегать досрочного прекращения, предоставляя постоянное вознаграждение () на каждом временном шаге. Остальные термины в функции вознаграждения - это штрафы, которые препятствуют нежелательным состояниям, таким как большие отклонения от желаемой высоты и ориентации или использование чрезмерных крутящих моментов соединения.
(t-1) ^2
где
) - скорость центра масс туловища в направлении х.
и - время выборки и конечное время моделирования среды соответственно.
- масштабная погрешность по высоте центра масс туловища от требуемой высоты 0,75 м.
- угол наклона туловища.
) - значение действия для 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 аппроксимирует долгосрочное вознаграждение, данное наблюдениям и действиям, используя представление функции значения критика. Агент также решает, какое действие предпринять с учетом наблюдений, используя представление актера. Актерские и критические сети для этого примера вдохновлены [2].
Дополнительные сведения о создании глубокого представления функции значений нейронной сети см. в разделе Создание представлений политик и функций значений. Пример создания нейронных сетей для агентов DDPG см. в документе Train DDPG Agent to Control Double Integrator System.
Создайте сети в рабочем пространстве 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);
Для обучения агента сначала укажите следующие варианты обучения:
Запускать каждый учебный эпизод максимум для 10000 эпизодов, причем каждый эпизод длится максимум maxSteps временные шаги.
Отображение хода обучения в диалоговом окне «Менеджер эпизодов» (установите 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™ см. в документах Train Biped Robot to Walk с использованием агентов обучения усилению и Train Humanoid Walker (Simscape Multibody) соответственно.
[1] Heess, Nicolas, Dhruva TB, Srinivasan Sriram, Jay Lemmon, Josh Merel, Greg Wayne, Yuval Tasa и др. ArXiv:1707.02286 [Cs], 10 июля 2017 года. https://arxiv.org/abs/1707.02286.
[2] Лилликрап, Тимоти П., Джонатан Дж. Хант, Александр Притцель, Николас Хесс, Том Эрез, Юваль Тасса, Дэвид Сильвер и Даан Верстра. «Непрерывный контроль с глубоким усилением обучения». ArXiv:1509.02971 [Cs, Stat], 5 июля 2019 года. https://arxiv.org/abs/1509.02971.