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

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

Для примера на обучении агент PG с базовой линией смотрите, Обучают Агента PG с Базовой линией Управлять Двойным Системным примером Интегратора.

Среда MATLAB тележки с шестом

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

Для этой среды:

  • Восходящим сбалансированным положением маятника является 0 радианами и нисходящим положением зависания является pi радианы

  • Маятник запускается вертикально с начального угла + /- 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 решает который действие взять заданные наблюдения с помощью представления актера. Чтобы создать агента, сначала создайте глубокую нейронную сеть с одним входом (наблюдение) и один выход (действие). Выходная сеть агента размера 2, поскольку агент может применить 2 возможных действия, 10 или-10. Для получения дополнительной информации о создании представления функции ценности глубокой нейронной сети смотрите, Создают Представления Функции ценности и политика.

actorNetwork = [
    imageInputLayer([numObservations 1 1],'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);

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

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

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

  • Отобразите прогресс обучения в диалоговом окне Episode Manager (установите 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)

Обучите агента с помощью 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('MATLABCartpolePG.mat','agent');
end

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

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

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

totalReward = sum(experience.Reward)
totalReward = 500

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

Похожие темы