getAction

Получите действие от агента или представления актера заданных наблюдений окружения

Описание

Агент

пример

agentAction = getAction(agent,obs) возвращает действие, выведенное из политики агента обучения с подкреплением, заданные наблюдения окружения.

Представление актера

пример

actorAction = getAction(actorRep,obs) возвращает действие, выведенное из представления политики actorRep заданные наблюдения окружения obs.

[actorAction,nextState] = getAction(actorRep,obs) возвращает обновленное состояние представления актера, когда актёр использует рекуррентную нейронную сеть в качестве функциональной аппроксимации.

Примеры

свернуть все

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

env = rlPredefinedEnv("CartPole-Discrete");
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

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

statePath = [
    featureInputLayer(4,'Normalization','none','Name','state')
    fullyConnectedLayer(24, 'Name', 'CriticStateFC1')
    reluLayer('Name','CriticRelu1')
    fullyConnectedLayer(24,'Name','CriticStateFC2')];
actionPath = [
    featureInputLayer(1,'Normalization','none','Name','action')
    fullyConnectedLayer(24, 'Name', 'CriticActionFC1')];
commonPath = [
    additionLayer(2,'Name','add')
    reluLayer('Name','CriticCommonRelu')
    fullyConnectedLayer(1,'Name','output')];
criticNetwork = layerGraph(statePath);
criticNetwork = addLayers(criticNetwork, actionPath);
criticNetwork = addLayers(criticNetwork, commonPath);    
criticNetwork = connectLayers(criticNetwork,'CriticStateFC2','add/in1');
criticNetwork = connectLayers(criticNetwork,'CriticActionFC1','add/in2');

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

criticOpts = rlRepresentationOptions('LearnRate',0.01,'GradientThreshold',1);
critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...
    'Observation',{'state'},'Action',{'action'},criticOpts);

Задайте опции агента и создайте агента DQN с помощью окружения и критика.

agentOpts = rlDQNAgentOptions(...
    'UseDoubleDQN',false, ...    
    'TargetUpdateMethod',"periodic", ...
    'TargetUpdateFrequency',4, ...   
    'ExperienceBufferLength',100000, ...
    'DiscountFactor',0.99, ...
    'MiniBatchSize',256);
agent = rlDQNAgent(critic,agentOpts);

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

act = getAction(agent,{rand(4,1)})
act = 10

Можно также получить действия для пакета наблюдений. Для примера получите действия для пакета из 10 наблюдений.

actBatch = getAction(agent,{rand(4,1,10)});
size(actBatch)
ans = 1×2

     1    10

actBatch содержит одно действие для каждого наблюдения в пакете, при этом каждое действие является одним из возможных дискретных действий.

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

obsinfo = rlNumericSpec([4 1]);
actinfo = rlNumericSpec([2 1]);
numObs = obsinfo.Dimension(1);
numAct = actinfo.Dimension(1);

Создайте для актёра рецидивирующую глубокую нейронную сеть.

net = [featureInputLayer(4,'Normalization','none','Name','state')
            fullyConnectedLayer(10,'Name','fc1')
            reluLayer('Name','relu1')
            fullyConnectedLayer(20,'Name','CriticStateFC2')
            fullyConnectedLayer(numAct,'Name','action')
            tanhLayer('Name','tanh1')];

Создайте детерминированное представление актера для сети.

actorOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1);
actor = rlDeterministicActorRepresentation(net,obsinfo,actinfo,...
    'Observation',{'state'},'Action',{'tanh1'});

Получите действие от этого актёра для случайной партии из 20 наблюдений.

act = getAction(actor,{rand(4,1,10)})
act = 1x1 cell array
    {2x1x10 single}

act содержит два вычисленных действия для всех 10 наблюдений в пакете.

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

свернуть все

Агент обучения с подкреплением, заданный как один из следующих объектов:

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

Наблюдения окружения, заданные как массив ячеек с таким количеством элементов, сколько существует входных каналов наблюдений. Каждый элемент obs содержит массив наблюдений для одного входного канала наблюдения.

Размерности каждого элемента в obs MO -by- LB -by- LS, где:

  • MO соответствует размерностям связанного входного канала наблюдения.

  • LB - размер пакета. Чтобы задать одно наблюдение, задайте LB = 1. Чтобы задать пакет наблюдений, задайте LB > 1. Если valueRep или qValueRep имеет несколько входных каналов наблюдения, тогда LB должны быть одинаковыми для всех элементов obs.

  • LS задает длину последовательности для рекуррентной нейронной сети. Если valueRep или qValueRep не использует рекуррентной нейронной сети, тогда LS = 1. Если valueRep или qValueRep имеет несколько входных каналов наблюдения, тогда LS должны быть одинаковыми для всех элементов obs.

LB и LS должны быть одинаковыми для обоих act и obs.

Выходные аргументы

свернуть все

Значение действия от агента, возвращаемое как массив с размерностями MA -by- LB -by- LS, где:

  • MA соответствует размерностям связанной спецификации действия.

  • LB - размер пакета.

  • LS - длина последовательности для рекуррентных нейронных сетей. Если бы актёр и критик в agent не используйте рекуррентные нейронные сети, тогда LS = 1.

Примечание

Когда такие агенты, как rlACAgent, rlPGAgent, или rlPPOAgent использовать rlStochasticActorRepresentation актёр с непрерывным пространством действий, ограничения, установленные спецификацией действия, не применяются агентом. В этих случаях необходимо применить ограничения пространства действий в окружении.

Значение действия из представления актера, возвращенное как одноэлементный массив ячеек, который содержит массив измерений MA -by- LB -by- LS, где:

  • MA соответствует размерностям спецификации действия.

  • LB - размер пакета.

  • LS - длина последовательности для рекуррентной нейронной сети. Если actorRep не использует рекуррентной нейронной сети, тогда LS = 1.

Примечание

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

Представление актера обновлённого состояния, возвращается как массив ячеек. Если actorRep не использует рекуррентной нейронной сети, тогда state - пустой массив ячеек.

Можно задать состояние представления равным state использование setState функция. Для примера:

valueRep = setState(actorRep,state);
Введенный в R2020a