rlSACAgent

Мягкий агент обучения с подкреплением критика агента

Описание

Алгоритм мягкого критика агента (SAC) является онлайновым, методом обучения с подкреплением критика агента вне политики без моделей. Алгоритм SAC вычисляет оптимальную политику, которая максимизирует и долгосрочное ожидаемое вознаграждение и энтропию политики. Энтропия политики является мерой неопределенности политики, учитывая состояние. Более высокое энтропийное значение способствует большему количеству исследования. Максимизация и вознаграждение и энтропия балансирует исследование и эксплуатацию среды.

Для получения дополнительной информации смотрите Мягких Агентов Критика Агента.

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

Создание

Описание

Создайте агента из спецификаций наблюдений и спецификаций действия

пример

agent = rlSACAgent(observationInfo,actionInfo) создает агента SAC для среды с заданным наблюдением и спецификациями действия. (observationInfo) и спецификации действия (actionInfo). Представления актёра и критика в использовании агента глубокие нейронные сети по умолчанию создали использование спецификации наблюдений observationInfo и спецификация действия actionInfo.

пример

agent = rlSACAgent(observationInfo,actionInfo,initOptions) создает агента SAC с представлениями глубокой нейронной сети, сконфигурированными с помощью заданных опций инициализации (initOptions).

Создайте агента из представлений актёра и критика

пример

agent = rlSACAgent(actor,critics) создает агента SAC с заданным агентом и сетями критика и опциями агента по умолчанию.

Задайте опции агента

agent = rlSACAgent(___,agentOptions) устанавливает AgentOptions свойство для любого из предыдущих синтаксисов.

Входные параметры

развернуть все

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

Можно извлечь observationInfo существующей средой или использованием агента getObservationInfo. Можно также создать технические требования вручную с помощью rlFiniteSetSpec или rlNumericSpec.

Спецификация действия для непрерывного пространства действий в виде rlNumericSpec свойства определения объекта, такие как размерности, тип данных и имя сигналов действия.

Можно извлечь actionInfo существующей средой или использованием агента getActionInfo. Можно также создать спецификацию вручную с помощью rlFiniteSetSpec или rlNumericSpec.

Опции инициализации представления в виде rlAgentInitializationOptions объект.

Представление сети Actor в виде rlStochasticActorRepresentation объект.

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

Представления сети Critic в виде одного из следующего:

  • rlQValueRepresentation объект — Создает агента SAC с одной Q-функцией-ценности.

  • Двухэлементный вектор-строка из rlQValueRepresentation объекты — Создают агента SAC с двумя функциями ценности критика. Двумя сетями критика должен быть уникальный rlQValueRepresentation объекты с теми же спецификациями наблюдений и спецификациями действия. Представления могут или иметь отличные структуры или ту же структуру, но различными начальными параметрами.

Для агента SAC каждым критиком должен быть rlQValueRepresentation одно выхода объект, который принимает и меры и наблюдения как входные параметры.

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

Свойства

развернуть все

Опции агента в виде rlSACAgentOptions объект.

Буфер опыта в виде ExperienceBuffer объект. Во время обучения агент хранит каждое из своих событий (S, A, R, S') в буфере. Здесь:

  • S является текущим наблюдением за средой.

  • A является мерами, принятыми агентом.

  • R является вознаграждением за принимающий меры A.

  • S' является следующим наблюдением после принимающего меры A.

Для получения дополнительной информации о как демонстрационный опыт агента от буфера во время обучения, смотрите Мягких Агентов Критика Агента.

Функции объекта

trainОбучите агентов обучения с подкреплением в заданной среде
simСимулируйте обученных агентов обучения с подкреплением в заданной среде
getActionПолучите действие из агента или представления актера, данного наблюдения среды
getActorПолучите представление актера от агента обучения с подкреплением
setActorУстановите представление актера агента обучения с подкреплением
getCriticПолучите представление критика от агента обучения с подкреплением
setCriticУстановите представление критика агента обучения с подкреплением
generatePolicyFunctionСоздайте функцию, которая оценивает обученную политику агента обучения с подкреплением

Примеры

свернуть все

Создайте среду и получите спецификации наблюдений и спецификации действия. В данном примере загрузите среду, используемую в примере, Обучают Агента DDPG Управлять Двойной Системой Интегратора. Наблюдения средой являются вектором, содержащим положение и скорость массы. Действие является скаляром, представляющим силу, применился к массе, располагаясь постоянно от-2 к 2 Ньютон.

env = rlPredefinedEnv("DoubleIntegrator-Continuous");
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

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

% rng(0)

Создайте агента SAC из спецификаций наблюдений среды и спецификаций действия.

agent = rlSACAgent(obsInfo,actInfo);

Чтобы проверять вашего агента, используйте getAction возвратить действие в случайное наблюдение.

getAction(agent,{rand(obsInfo(1).Dimension)})
ans = 1x1 cell array
    {[0.0546]}

Можно теперь протестировать и обучить агента в среде.

Создайте среду с непрерывным пространством действий и получите его спецификации наблюдений и спецификации действия. В данном примере загрузите среду, используемую в примере, Обучают Агента DDPG Управлять Двойной Системой Интегратора. Наблюдение средой является вектором, содержащим положение и скорость массы. Действие является скаляром, представляющим силу, применился к массе, располагаясь постоянно от-2 к 2 Ньютон.

env = rlPredefinedEnv("DoubleIntegrator-Continuous");
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

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

initOpts = rlAgentInitializationOptions('NumHiddenUnit',128);

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

% rng(0)

Создайте агента SAC из спецификаций наблюдений среды и спецификаций действия с помощью опций инициализации.

agent = rlSACAgent(obsInfo,actInfo,initOpts);

Извлеките глубокую нейронную сеть из агента.

actorNet = getModel(getActor(agent));

Извлеките глубокие нейронные сети от этих двух критиков. Обратите внимание на то, что getModel(critics) только возвращает первую сеть критика.

critics = getCritic(agent);
criticNet1 = getModel(critics(1));
criticNet2 = getModel(critics(2));

Отобразите слои первой сети критика и проверьте, что каждый скрытый полносвязный слой имеет 128 нейронов.

criticNet1.Layers
ans = 
  10x1 Layer array with layers:

     1   'concat'               Concatenation       Concatenation of 2 inputs along dimension 1
     2   'relu_body'            ReLU                ReLU
     3   'fc_body'              Fully Connected     128 fully connected layer
     4   'body_output'          ReLU                ReLU
     5   'input_1'              Feature Input       2 features
     6   'fc_1'                 Fully Connected     128 fully connected layer
     7   'input_2'              Feature Input       1 features
     8   'fc_2'                 Fully Connected     128 fully connected layer
     9   'output'               Fully Connected     1 fully connected layer
    10   'RepresentationLoss'   Regression Output   mean-squared-error

Постройте сети агента и второго критика.

plot(actorNet)

plot(criticNet2)

Чтобы проверять вашего агента, используйте getAction возвратить действие в случайное наблюдение.

getAction(agent,{rand(obsInfo(1).Dimension)})
ans = 1x1 cell array
    {[-0.9867]}

Можно теперь протестировать и обучить агента в среде.

Создайте среду и получите спецификации наблюдений и спецификации действия. В данном примере загрузите среду, используемую в примере, Обучают Агента DDPG Управлять Двойной Системой Интегратора. Наблюдения средой являются вектором, содержащим положение и скорость массы. Действие является скаляром, представляющим силу, применился к массе, располагаясь постоянно от-2 к 2 Ньютон.

env = rlPredefinedEnv("DoubleIntegrator-Continuous");
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

Получите количество наблюдений и количество действий.

numObs = obsInfo.Dimension(1);
numAct = numel(actInfo);

Создайте два представления критика Q-значения. Во-первых, создайте структуру глубокой нейронной сети критика.

statePath1 = [
    featureInputLayer(numObs,'Normalization','none','Name','observation')
    fullyConnectedLayer(400,'Name','CriticStateFC1')
    reluLayer('Name','CriticStateRelu1')
    fullyConnectedLayer(300,'Name','CriticStateFC2')
    ];
actionPath1 = [
    featureInputLayer(numAct,'Normalization','none','Name','action')
    fullyConnectedLayer(300,'Name','CriticActionFC1')
    ];
commonPath1 = [
    additionLayer(2,'Name','add')
    reluLayer('Name','CriticCommonRelu1')
    fullyConnectedLayer(1,'Name','CriticOutput')
    ];

criticNet = layerGraph(statePath1);
criticNet = addLayers(criticNet,actionPath1);
criticNet = addLayers(criticNet,commonPath1);
criticNet = connectLayers(criticNet,'CriticStateFC2','add/in1');
criticNet = connectLayers(criticNet,'CriticActionFC1','add/in2');

Критик представления критика. Используйте ту же структуру сети для обоих критиков. Агент SAC инициализирует эти две сети с помощью различных параметров по умолчанию.

criticOptions = rlRepresentationOptions('Optimizer','adam','LearnRate',1e-3,... 
                                        'GradientThreshold',1,'L2RegularizationFactor',2e-4);
critic1 = rlQValueRepresentation(criticNet,obsInfo,actInfo,...
    'Observation',{'observation'},'Action',{'action'},criticOptions);
critic2 = rlQValueRepresentation(criticNet,obsInfo,actInfo,...
    'Observation',{'observation'},'Action',{'action'},criticOptions);

Создайте глубокую нейронную сеть агента. Не добавляйте tanhLayer или scalingLayer в среднем выходе path. Агент SAC внутренне преобразовывает неограниченное Распределение Гаусса к ограниченному распределению, чтобы вычислить функцию плотности вероятности и энтропию правильно.

statePath = [
    featureInputLayer(numObs,'Normalization','none','Name','observation')
    fullyConnectedLayer(400, 'Name','commonFC1')
    reluLayer('Name','CommonRelu')];
meanPath = [
    fullyConnectedLayer(300,'Name','MeanFC1')
    reluLayer('Name','MeanRelu')
    fullyConnectedLayer(numAct,'Name','Mean')
    ];
stdPath = [
    fullyConnectedLayer(300,'Name','StdFC1')
    reluLayer('Name','StdRelu')
    fullyConnectedLayer(numAct,'Name','StdFC2')
    softplusLayer('Name','StandardDeviation')];

concatPath = concatenationLayer(1,2,'Name','GaussianParameters');

actorNetwork = layerGraph(statePath);
actorNetwork = addLayers(actorNetwork,meanPath);
actorNetwork = addLayers(actorNetwork,stdPath);
actorNetwork = addLayers(actorNetwork,concatPath);
actorNetwork = connectLayers(actorNetwork,'CommonRelu','MeanFC1/in');
actorNetwork = connectLayers(actorNetwork,'CommonRelu','StdFC1/in');
actorNetwork = connectLayers(actorNetwork,'Mean','GaussianParameters/in1');
actorNetwork = connectLayers(actorNetwork,'StandardDeviation','GaussianParameters/in2');

Создайте стохастическое представление актера с помощью глубокой нейронной сети.

actorOptions = rlRepresentationOptions('Optimizer','adam','LearnRate',1e-3,...
                                       'GradientThreshold',1,'L2RegularizationFactor',1e-5);

actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,actorOptions,...
    'Observation',{'observation'});

Задайте опции агента.

agentOptions = rlSACAgentOptions;
agentOptions.SampleTime = env.Ts;
agentOptions.DiscountFactor = 0.99;
agentOptions.TargetSmoothFactor = 1e-3;
agentOptions.ExperienceBufferLength = 1e6;
agentOptions.MiniBatchSize = 32;

Создайте агента SAC с помощью агента, критиков и опций.

agent = rlSACAgent(actor,[critic1 critic2],agentOptions);

Чтобы проверять вашего агента, используйте getAction возвратить действие в случайное наблюдение.

getAction(agent,{rand(obsInfo(1).Dimension)})
ans = 1x1 cell array
    {[0.1259]}

Можно теперь протестировать и обучить агента в среде.

Введенный в R2019a