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 = [
    imageInputLayer([4 1 1],'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 = [
    imageInputLayer([4 1 1],'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 = 2×1 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