exponenta event banner

Обучение агента переменного тока балансированию системы Cart-Pole с помощью параллельных вычислений

В этом примере показано, как обучить актера-критика (AC) балансировать систему тележек, смоделированную в MATLAB ®, с помощью асинхронного параллельного обучения. Пример обучения агента без параллельного обучения см. в разделе Обучение агента переменного тока балансированию системы Cart-Pole.

Параллельное обучение актера

При использовании параллельных вычислений с агентами AC каждый работник создает опыт на основе своей копии агента и среды. После каждого N На этапах работник вычисляет градиенты из опыта и отправляет вычисленные градиенты обратно агенту хоста. Агент хоста обновляет свои параметры следующим образом.

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

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

Создание интерфейса среды MATLAB для корзины-полюса

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

env = rlPredefinedEnv("CartPole-Discrete");
env.PenaltyForFalling = -10;

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

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

Зафиксируйте начальное число случайного генератора для воспроизводимости.

rng(0)

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

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

criticNetwork = [
    featureInputLayer(4,'Normalization','none','Name','state')
    fullyConnectedLayer(32,'Name','CriticStateFC1')
    reluLayer('Name','CriticRelu1')
    fullyConnectedLayer(1, 'Name', 'CriticFC')];

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

critic = rlValueRepresentation(criticNetwork,obsInfo,'Observation',{'state'},criticOpts);

Агент AC решает, какое действие предпринять, учитывая наблюдения, используя представление актера. Для создания актёра необходимо создать глубокую нейронную сеть с одним входом (наблюдение) и одним выходом (действие). Выходной размер акторной сети равен 2, так как агент может применить к среде 2 значения силы, -10 и 10.

actorNetwork = [
    featureInputLayer(4,'Normalization','none','Name','state')
    fullyConnectedLayer(32, 'Name','ActorStateFC1')
    reluLayer('Name','ActorRelu1')
    fullyConnectedLayer(2,'Name','action')];

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

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

Для создания агента AC сначала укажите параметры агента AC с помощью rlACAgentOptions.

agentOpts = rlACAgentOptions(...
    'NumStepsToLookAhead',32,...
    'EntropyLossWeight',0.01,...
    'DiscountFactor',0.99);

Затем создайте агента, используя указанное представление актера и параметры агента. Дополнительные сведения см. в разделе rlACAgent.

agent = rlACAgent(actor,critic,agentOpts);

Варианты параллельного обучения

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

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

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

  • Прекратить обучение, когда агент получает среднее совокупное вознаграждение, превышающее 500 10 последовательные эпизоды. В этот момент агент может балансировать маятник в вертикальном положении.

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

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

plot(env)

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

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

  • Установите UseParallel опция для True.

  • Обучение агента параллельно асинхронно путем установки ParallelizationOptions.Mode опция для "async".

  • После каждых 32 шагов каждый работник вычисляет градиенты из опыта и отправляет их на хост.

  • Агент AC требует от работников отправки "gradients" на хост.

  • Для агента переменного тока требуется 'StepsUntilDataIsSent' быть равным agentOptions.NumStepsToLookAhead.

trainOpts.UseParallel = true;
trainOpts.ParallelizationOptions.Mode = "async";
trainOpts.ParallelizationOptions.DataToSendFromWorkers = "gradients";
trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32;

Дополнительные сведения см. в разделе rlTrainingOptions.

Агент поезда

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

Моделирование агента переменного тока

Во время моделирования можно визуализировать систему тележек с помощью функции печати.

plot(env)

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

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

Ссылки

[1] Мних, Владимир, Адриа Пучдомех Бадиа, Мехди Мирза, Алекс Грейвз, Тимоти П. Лилликрап, Тим Харли, Дэвид Сильвер и Корай Кавуккуоглу. ArXiv:1602.01783 [Cs], 16 июня 2016 года. https://arxiv.org/abs/1602.01783.

См. также

|

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