Обучите агента PG балансировке системы тележки с шестом

Этот пример показывает, как обучить агента градиента политики (PG) для балансировки системы тележки с шестом, смоделированной в MATLAB ®. Дополнительные сведения об агентах PG см. в разделе «Агенты градиента политики ».

Для примера, который обучает агента PG с базовым уровнем, смотрите Обучите агента PG с базовым уровнем для управления системой Double Integrator.

Тележка с шестом MATLAB Окружения

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

Для этого окружения:

  • Положение сбалансированного маятника вверх 0 радианы, и положение свисания вниз pi радианы.

  • Маятник запускается вертикально с начального угла между -0,05 и 0.05 радианами.

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

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

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

  • Вознаграждение + 1 предоставляется за каждый временной шаг, когда шест остается вертикальным. Штраф -5 применяется при падении маятника.

Для получения дополнительной информации об этой модели смотрите Загрузка предопределённых окружений системы управления.

Создайте интерфейс окружения

Создайте предопределенный интерфейс окружения для маятника.

env = rlPredefinedEnv("CartPole-Discrete")
env = 
  CartPoleDiscreteAction with properties:

                  Gravity: 9.8000
                 MassCart: 1
                 MassPole: 0.1000
                   Length: 0.5000
                 MaxForce: 10
                       Ts: 0.0200
    ThetaThresholdRadians: 0.2094
               XThreshold: 2.4000
      RewardForNotFalling: 1
        PenaltyForFalling: -5
                    State: [4x1 double]

Интерфейс имеет дискретное пространство действий, где агент может применить одно из двух возможных значений силы к тележке, -10 или 10 Н.

Получите информацию о наблюдении и действии из интерфейса окружения.

obsInfo = getObservationInfo(env);
numObservations = obsInfo.Dimension(1);
actInfo = getActionInfo(env);

Исправьте начальное значение генератора для повторяемости.

rng(0)

Создание агента PG

Агент PG решает, какое действие взять заданные наблюдения с помощью представления актера. Чтобы создать актёра, сначала создайте глубокую нейронную сеть с одним входом (наблюдение) и одним выходом (действие). Сеть актёра имеет два выхода, что соответствует количеству возможных действий. Для получения дополнительной информации о создании представления политики глубоких нейронных сетей, смотрите, Создают представления политики и функции ценности.

actorNetwork = [
    featureInputLayer(numObservations,'Normalization','none','Name','state')
    fullyConnectedLayer(2,'Name','fc')
    softmaxLayer('Name','actionProb')
    ];

Задайте опции для представления актера используя rlRepresentationOptions.

actorOpts = rlRepresentationOptions('LearnRate',1e-2,'GradientThreshold',1);

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

actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,'Observation',{'state'},actorOpts);

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

agent = rlPGAgent(actor);

Обучите агента

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

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

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

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

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

trainOpts = rlTrainingOptions(...
    'MaxEpisodes', 1000, ...
    'MaxStepsPerEpisode', 200, ...
    'Verbose', false, ...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',195,...
    'ScoreAveragingWindowLength',100); 

Можно визуализировать систему тележки с шестом при помощи plot функция во время обучения или симуляции.

plot(env)

Figure Cart Pole Visualizer contains an axes. The axes contains 6 objects of type line, polygon.

Обучите агента с помощью train функция. Обучение этого агента является интенсивным в вычислительном отношении процессом, который занимает несколько минут. Чтобы сэкономить время при запуске этого примера, загрузите предварительно обученного агента путем установки doTraining на false. Чтобы обучить агента самостоятельно, установите doTraining на true.

doTraining = false;

if doTraining
    % Train the agent.
    trainingStats = train(agent,env,trainOpts);
else
    % Load the pretrained agent for the example.
    load('MATLABCartpolePG.mat','agent');
end

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

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

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

Figure Cart Pole Visualizer contains an axes. The axes contains 6 objects of type line, polygon.

totalReward = sum(experience.Reward)
totalReward = 500

См. также

Похожие темы