exponenta event banner

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

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

Пример подготовки агента PG с базовой структурой см. в разделе Подготовка агента PG с базовой структурой к управлению системой двойного интегратора.

Cart-Pole 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 N.

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

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

См. также

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