exponenta event banner

Подготовка агента DDPG к подкачке и балансировке системы Cart-Pole

В этом примере показано, как обучить агента глубокого детерминированного политического градиента (DDPG) качаться вверх и балансировать систему тележек, смоделированную в Simscape™ Multibody™.

Дополнительные сведения об агентах DDPG см. в разделе Агенты градиента глубокой детерминированной политики. Пример обучения агента DDPG в MATLAB ® см. в разделе Подготовка агента DDPG к управлению системой двойного интегратора.

Модель Simscape из корзины-полюса

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

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

mdl = 'rlCartPoleSimscapeModel';
open_system(mdl)

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

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

  • Вертикальное равновесное положение полюса 0 радианы, и положение подвешивания вниз pi радианы.

  • Сигнал силового воздействия от агента к окружающей среде составляет от -15 до 15 Н.

  • Наблюдения из окружающей среды - это положение и скорость тележки, синус, косинус и производная угла полюса.

  • Эпизод заканчивается, если тележка перемещается более чем на 3,5 м от исходного положения.

  • Вознаграждение rt, предоставляемое на каждом временном интервале, составляет

rt = -0,1 (5startt2 + xt2 + 0,05ut-12) -100B

Здесь:

  • startt - угол смещения от вертикального положения полюса.

  • xt - смещение положения от центрального положения тележки.

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

  • B - флаг (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

Агент 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

Моделирование агента DDPG

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

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

bdclose(mdl)

См. также

| |

Связанные темы