exponenta event banner

getValue

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

Описание

пример

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

пример

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

пример

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

[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-value, указанное как rlQValueRepresentation объект.

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

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

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

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

свернуть все

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

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

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

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

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

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

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

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

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

valueRep = setState(valueRep,state);
Представлен в R2020a