getMaxQValue

Получите максимальную оценку функции состояния для представления функции Q-значения с дискретным пространством действий

Описание

пример

[maxQ,maxActionIndex] = getMaxQValue(qValueRep,obs) возвращает максимальную предполагаемую функцию значения состояния для представления функции Q-значения qValueRep заданные наблюдения окружения obs. getMaxQValue определяет дискретное действие, для которого оценка Q-значения является наибольшей, и возвращает это значение Q (maxQ) и соответствующий индекс действия (maxActionIndex).

[maxQ,maxActionIndex,state] = getMaxQValue(___) возвращает состояние представления. Используйте этот синтаксис при qValueRep является рекуррентной нейронной сетью.

Примеры

свернуть все

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

env = rlPredefinedEnv('CartPole-Discrete');
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);
numObs = obsInfo.Dimension(1);
numDiscreteAct = numel(actInfo.Elements);

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

criticNetwork = [
    featureInputLayer(4,'Normalization','none','Name','state')
    fullyConnectedLayer(50, 'Name', 'CriticStateFC1')
    reluLayer('Name','CriticRelu1')
    fullyConnectedLayer(20,'Name','CriticStateFC2')
    reluLayer('Name','CriticRelu2')
    fullyConnectedLayer(numDiscreteAct,'Name','output')];

Создайте представление для вашего критика, используя рекуррентную нейронную сеть.

criticOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1);
critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...
    'Observation','state',criticOptions);

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

obs = rand(4,1);
val = getValue(critic,{obs})
val = 2x1 single column vector

    0.0139
   -0.1851

val содержит две оценки функции ценности, по одной для каждого возможного дискретного действия.

Можно получить максимальную оценку функции Q-значения для всех дискретных действий.

[maxVal,maxIndex] = getMaxQValue(critic,{obs})
maxVal = single
    0.0139
maxIndex = 1

maxVal соответствует максимальному значению в val.

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

[batchVal,batchIndex] = getMaxQValue(critic,{rand(4,1,10)});

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

свернуть все

Представление Q-значения, заданное как rlQValueRepresentation объект.

Наблюдения окружения, заданные как массив ячеек с таким количеством элементов, сколько существует входных каналов наблюдений. Каждый элемент 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.

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

свернуть все

Максимальная оценка Q-значения для всех возможных дискретных действий, возвращенная как массив 1-by- LB -by- LS, где:

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

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

Индекс действия, соответствующий максимальному значению Q, возвращается как массив 1-by- LB -by- LS, где:

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

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

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

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

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