В этом примере показано, как обучить агента глубокого детерминированного политического градиента (DDPG) качаться вверх и балансировать систему тележек, смоделированную в Simscape™ Multibody™.
Дополнительные сведения об агентах DDPG см. в разделе Агенты градиента глубокой детерминированной политики. Пример обучения агента DDPG в MATLAB ® см. в разделе Подготовка агента DDPG к управлению системой двойного интегратора.
Среда обучения армированию для этого примера представляет собой столб, прикрепленный к неактивированному соединению на тележке, которое перемещается по безфрикционной дорожке. Тренировочная цель состоит в том, чтобы сделать стойку стойки вертикальной, не падая, используя минимальное усилие управления.
Откройте модель.
mdl = 'rlCartPoleSimscapeModel';
open_system(mdl)
Система тележек моделируется с помощью Simscape Multibody.

Для этой модели:
Вертикальное равновесное положение полюса 0 радианы, и положение подвешивания вниз pi радианы.
Сигнал силового воздействия от агента к окружающей среде составляет от -15 до 15 Н.
Наблюдения из окружающей среды - это положение и скорость тележки, синус, косинус и производная угла полюса.
Эпизод заканчивается, если тележка перемещается более чем на 3,5 м от исходного положения.
Вознаграждение , предоставляемое на каждом временном интервале, составляет
-100B
Здесь:
- угол смещения от вертикального положения полюса.
- смещение положения от центрального положения тележки.
- контрольное усилие от предыдущего временного шага.
- флаг (1 или 0), указывающий, находится ли корзина вне границ.
Дополнительные сведения об этой модели см. в разделе Загрузка предопределенных сред Simulink.
Создайте предопределенный интерфейс среды для полюса.
env = rlPredefinedEnv('CartPoleSimscapeModel-Continuous')env =
SimulinkEnvWithAgent with properties:
Model : rlCartPoleSimscapeModel
AgentBlock : rlCartPoleSimscapeModel/RL Agent
ResetFcn : []
UseFastRestart : on
Интерфейс имеет непрерывное пространство действия, где агент может прикладывать возможные значения крутящего момента от -15 до 15 Н к полюсу.
Получение информации о наблюдениях и действиях из интерфейса среды.
obsInfo = getObservationInfo(env); numObservations = obsInfo.Dimension(1); actInfo = getActionInfo(env);
Укажите время моделирования Tf и время выборки агента Ts в секундах
Ts = 0.02; Tf = 25;
Зафиксируйте начальное число случайного генератора для воспроизводимости.
rng(0)
Агент DDPG аппроксимирует долгосрочное вознаграждение, учитывая наблюдения и действия, используя представление функции значения критика. Чтобы создать критика, сначала создайте глубокую нейронную сеть с двумя входами (состояние и действие) и одним выходом. Входной размер пути действия: [1 1 1] так как агент может применить действие в качестве одного значения силы к среде. Дополнительные сведения о создании глубокого представления функции значений нейронной сети см. в разделе Создание представлений политик и функций значений.
statePath = [
featureInputLayer(numObservations,'Normalization','none','Name','observation')
fullyConnectedLayer(128,'Name','CriticStateFC1')
reluLayer('Name','CriticRelu1')
fullyConnectedLayer(200,'Name','CriticStateFC2')];
actionPath = [
featureInputLayer(1,'Normalization','none','Name','action')
fullyConnectedLayer(200,'Name','CriticActionFC1','BiasLearnRateFactor',0)];
commonPath = [
additionLayer(2,'Name','add')
reluLayer('Name','CriticCommonRelu')
fullyConnectedLayer(1,'Name','CriticOutput')];
criticNetwork = layerGraph(statePath);
criticNetwork = addLayers(criticNetwork,actionPath);
criticNetwork = addLayers(criticNetwork,commonPath);
criticNetwork = connectLayers(criticNetwork,'CriticStateFC2','add/in1');
criticNetwork = connectLayers(criticNetwork,'CriticActionFC1','add/in2');Просмотр конфигурации сети критиков.
figure plot(criticNetwork)

Укажите параметры критического представления с помощью rlRepresentationOptions.
criticOptions = rlRepresentationOptions('LearnRate',1e-03,'GradientThreshold',1);
Создайте критическое представление, используя заданную глубокую нейронную сеть и опции. Необходимо также указать сведения о действиях и наблюдениях для критика, которые уже получены из интерфейса среды. Дополнительные сведения см. в разделе rlQValueRepresentation.
critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,... 'Observation',{'observation'},'Action',{'action'},criticOptions);
Агент DDPG решает, какое действие предпринять, учитывая наблюдения, используя представление актера. Для создания актёра сначала создать глубокую нейронную сеть с одним входом (наблюдение) и одним выходом (действие).
Сконструировать актера аналогично критику. Дополнительные сведения см. в разделе rlDeterministicActorRepresentation.
actorNetwork = [
featureInputLayer(numObservations,'Normalization','none','Name','observation')
fullyConnectedLayer(128,'Name','ActorFC1')
reluLayer('Name','ActorRelu1')
fullyConnectedLayer(200,'Name','ActorFC2')
reluLayer('Name','ActorRelu2')
fullyConnectedLayer(1,'Name','ActorFC3')
tanhLayer('Name','ActorTanh1')
scalingLayer('Name','ActorScaling','Scale',max(actInfo.UpperLimit))];
actorOptions = rlRepresentationOptions('LearnRate',5e-04,'GradientThreshold',1);
actor = rlDeterministicActorRepresentation(actorNetwork,obsInfo,actInfo,...
'Observation',{'observation'},'Action',{'ActorScaling'},actorOptions);Для создания агента DDPG сначала укажите параметры агента DDPG с помощью rlDDPGAgentOptions.
agentOptions = rlDDPGAgentOptions(... 'SampleTime',Ts,... 'TargetSmoothFactor',1e-3,... 'ExperienceBufferLength',1e6,... 'MiniBatchSize',128); agentOptions.NoiseOptions.StandardDeviation = 0.4; agentOptions.NoiseOptions.StandardDeviationDecayRate = 1e-5;
Затем создайте агента, используя указанное представление актера, представление критика и параметры агента. Дополнительные сведения см. в разделе rlDDPGAgent.
agent = rlDDPGAgent(actor,critic,agentOptions);
Для обучения агента сначала укажите варианты обучения. В этом примере используются следующие параметры.
Запускать каждый учебный эпизод максимум для 2000 эпизодов, причем каждый эпизод длится максимум ceil(Tf/Ts) временные шаги.
Отображение хода обучения в диалоговом окне «Менеджер эпизодов» (установите Plots и отключите отображение командной строки (установите Verbose опция для false).
Прекратите обучение, когда агент получит среднее совокупное вознаграждение больше -400 в течение пяти последовательных эпизодов. В этот момент агент может быстро сбалансировать столб в вертикальном положении, используя минимальное усилие управления.
Сохраните копию агента для каждого эпизода, где совокупное вознаграждение больше -400.
Дополнительные сведения см. в разделе rlTrainingOptions.
maxepisodes = 2000; maxsteps = ceil(Tf/Ts); trainingOptions = rlTrainingOptions(... 'MaxEpisodes',maxepisodes,... 'MaxStepsPerEpisode',maxsteps,... 'ScoreAveragingWindowLength',5,... 'Verbose',false,... 'Plots','training-progress',... 'StopTrainingCriteria','AverageReward',... 'StopTrainingValue',-400,... 'SaveAgentCriteria','EpisodeReward',... 'SaveAgentValue',-400);
Обучение агента с помощью train функция. Обучение этому процессу агента требует большого объема вычислений и занимает несколько часов. Чтобы сэкономить время при выполнении этого примера, загрузите предварительно подготовленный агент путем установки doTraining кому false. Чтобы обучить агента самостоятельно, установите doTraining кому true.
doTraining = false; if doTraining % Train the agent. trainingStats = train(agent,env,trainingOptions); else % Load the pretrained agent for the example. load('SimscapeCartPoleDDPG.mat','agent') end

Для проверки работоспособности обучаемого агента смоделируйте его в среде тележки. Дополнительные сведения о моделировании агентов см. в разделе rlSimulationOptions и sim.
simOptions = rlSimulationOptions('MaxSteps',500);
experience = sim(env,agent,simOptions);
bdclose(mdl)
rlDDPGAgent | rlSimulinkEnv | train