getValue

Получите расчетное представление функции ценности

Описание

пример

value = getValue(valueRep,obs) возвращает предполагаемую функцию ценности для представления функции ценности состояния valueRep заданные наблюдения окружения obs.

пример

value = getValue(qValueRep,obs) возвращает предполагаемые функции ценности состояния активности для множественного представления функции Q-значения qValueRep заданные наблюдения окружения obs. В этом случае qValueRep имеет столько выходов, сколько возможных дискретных действий, и getValue возвращает функцию «состояние-значение» для каждого действия.

пример

value = getValue(qValueRep,obs,act) возвращает предполагаемую функцию ценности состояния активности для представления функции Q-значения с одним выводом qValueRep заданные наблюдения окружения obs и действия act. В этом случае, getValue возвращает функцию «состояние-значение» для заданных входов наблюдений и действий.

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

Примеры

свернуть все

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

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

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

criticNetwork = [
    featureInputLayer(4,'Normalization','none','Name','state')
    fullyConnectedLayer(8,'Name','fc')
    reluLayer('Name','relu')
    fullyConnectedLayer(1,'Name','output')];

Создайте объект представления функции ценности для критика.

criticOptions = rlRepresentationOptions('LearnRate',1e-2,'GradientThreshold',1);
critic = rlValueRepresentation(criticNetwork,obsInfo,...
    'Observation','state',criticOptions);

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

val = getValue(critic,{rand(4,1)})
val = single
    -0.0899

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

batchVal = getValue(critic,{rand(4,1,20)});
size(batchVal)
ans = 1×2

     1    20

valBatch содержит одну оценку функции ценности для каждого наблюдения в пакете.

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

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);

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

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

    0.0139
   -0.1851

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

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

batchVal = getValue(critic,{rand(4,1,10)});
size(batchVal)
ans = 1×2

     2    10

batchVal содержит две оценки функции ценности для каждого наблюдения в пакете.

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

obsinfo = [rlNumericSpec([8 3]), rlNumericSpec([4 1])];

Создайте спецификацию действия.

actinfo = rlNumericSpec([2 1]);

Создайте глубокую нейронную сеть для критика. Эта сеть имеет три входных канала (два для наблюдений и один для действий).

observationPath1 = [
    imageInputLayer([8 3 1],'Normalization','none','Name','state1')
    fullyConnectedLayer(10, 'Name', 'fc1')
    additionLayer(3,'Name','add')
    reluLayer('Name','relu1')
    fullyConnectedLayer(10,'Name','fc4')
    reluLayer('Name', 'relu2')
    fullyConnectedLayer(1,'Name','fc5')];
observationPath2 = [
    imageInputLayer([4 1 1],'Normalization','none','Name','state2')
    fullyConnectedLayer(10, 'Name','fc2')];
actionPath = [
    imageInputLayer([2 1 1],'Normalization','none','Name','action');
    fullyConnectedLayer(10, 'Name', 'fc3')];
net = layerGraph(observationPath1);
net = addLayers(net,observationPath2);
net = addLayers(net,actionPath);
net = connectLayers(net,'fc2','add/in2');
net = connectLayers(net,'fc3','add/in3');

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

c = rlQValueRepresentation(net,obsinfo,actinfo,...
    'Observation',{'state1','state2'},'Action',{'action'});

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

batchobs_ch1 = rand(8,3,64);
batchobs_ch2 = rand(4,1,64);

Создайте набор случайных действий размера пакета 64.

batchact = rand(2,1,64,1);

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

qvalue = getValue(c,{batchobs_ch1,batchobs_ch2},{batchact});

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

свернуть все

Представление функции ценности, заданное как rlValueRepresentation объект.

Представление функции 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.

Действие, заданное как одноэлементный массив ячеек, содержащий массив значений действий.

Размерности этого массива MA -by- LB -by- LS, где:

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

  • LB - размер пакета. Чтобы задать одно наблюдение, задайте LB = 1. Чтобы задать пакет наблюдений, задайте LB > 1.

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

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

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

свернуть все

Функция предполагаемого значения, возвращенная как массив с размерностями N -by- LB -by- LS, где:

  • N - количество выходов сети критика.

    • Для представления значения состояния (valueRep), N = 1.

    • Для представления значения состояния активности вывода (qValueRep), N = 1.

    • Для представления значения состояния активности с мультивыходами (qValueRep), N - количество дискретных действий.

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

  • LS - длина последовательности для рекуррентной нейронной сети.

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

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

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