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