exponenta event banner

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-за-LB-за-LS, где:

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

  • 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