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

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

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

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

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

robotParametersRL

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

mdl = 'rlWalkingBipedRobot';
open_system(mdl)

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

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

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

  • Контакт ноги моделируется, пользуясь Библиотекой Сил контакта Simscape Multibody.

  • Агент может управлять 3 отдельными соединениями, лодыжкой, коленом и бедром, на обоих участках робота путем применения сигналов крутящего момента от -3 к 3 Nm. Фактические вычисленные сигналы действия нормированы между -1 и 1.

Среда предоставляет 29 наблюдений агенту. Наблюдения:

  • Y (ответвление) и Z (вертикальные) переводы центра туловища массы. Перевод в направлении Z нормирован к подобной области значений как другие наблюдения.

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

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

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

  • Угловые положения и скорости 3 соединений (лодыжка, колено, бедро) на обоих участках.

  • Значения действия от предыдущего временного шага.

Эпизод завершает работу если:

  • Центр туловища робота массы меньше 0,1 м в (упавшем) направлении Z или больше чем 1 м в направлении Y (боковое движение).

  • Абсолютное значение или списка, подачи или отклонения от курса больше 0,7854 радианов.

Премиальная функция rt если на каждом временном шаге, вдохновлен [1]. Эта премиальная функция поощряет агента продвигаться путем обеспечения положительного вознаграждения за положительную прямую скорость. Это также поощряет агента избегать завершения эпизода путем обеспечения постоянного вознаграждения (25TsTf ) на каждом временном шаге. Другие условия в премиальной функции являются штрафами за существенные изменения в боковых и вертикальных переводах, и для использования избыточного усилия по управлению.

rt=vx-3y2-50zˆ2+25TsTf -0.02iut-1i2

где:

  • vx скорость перевода в направлении X (вперед к цели) робота.

  • y боковое смещение перевода робота от целевой траектории прямой линии.

  • zˆ нормированное вертикальное перемещение перевода центра робота массы.

  • ut-1i крутящий момент от соединения i от предыдущего временного шага.

  • Ts шаг расчета среды.

  • Tf итоговое время симуляции среды.

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

Создайте спецификацию наблюдения.

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

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

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

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

[criticNetwork,actorNetwork] = createNetworks(numObs,numAct);

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

figure
plot(criticNetwork)

Задайте опции для критика и представлений агента с помощью rlRepresentationOptions.

criticOptions = rlRepresentationOptions('Optimizer','adam','LearnRate',1e-3,... 
                                        'GradientThreshold',1,'L2RegularizationFactor',2e-4);
actorOptions = rlRepresentationOptions('Optimizer','adam','LearnRate',1e-4,...
                                       'GradientThreshold',1,'L2RegularizationFactor',1e-5);

Создайте критика и представления агента с помощью заданных глубоких нейронных сетей и опций. Необходимо также указать информацию действия и наблюдения для каждого представления, которое вы уже получили из интерфейса среды. Для получения дополнительной информации смотрите rlRepresentation.

critic = rlRepresentation(criticNetwork,obsInfo,actInfo,'Observation',{'observation'},'Action',{'action'},criticOptions);
actor  = rlRepresentation(actorNetwork,obsInfo,actInfo,'Observation',{'observation'},'Action',{'ActorTanh1'},actorOptions);

Чтобы создать агента DDPG, сначала задайте опции агента DDPG с помощью rlDDPGAgentOptions.

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

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

agent = rlDDPGAgent(actor,critic,agentOptions);

Опции обучения

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

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

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

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

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

Для получения дополнительной информации смотрите rlTrainingOptions.

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

Задайте следующие опции обучения, чтобы обучить агента в параллельном учебном режиме. Если вам не установили программное обеспечение 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('rlWalkingBipedRobotDDPG.mat','agent')
end

Симулируйте агента DDPG

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

rng(0)

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

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

Ссылки

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

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

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

Похожие темы