rlQValueRepresentation

Представление критика Q-функции-ценности для агентов обучения с подкреплением

Описание

Этот объект реализует аппроксимацию Q-функции-ценности, которая будет использоваться в качестве критика в агенте обучения с подкреплением. Q-функция-ценности является функцией, которая сопоставляет пару действия наблюдения со скалярным значением, представляющим ожидаемые общие долгосрочные вознаграждения, которые агент, как ожидают, накопит, когда это начнет с заданного наблюдения и выполняет данное действие. Критикам Q-функции-ценности поэтому нужны и наблюдения и в действия как входные параметры. После того, как вы создаете rlQValueRepresentation критик, используйте его, чтобы создать агента, использующего критика Q-функции-ценности, такого как rlQAgent, rlDQNAgent, rlSARSAAgent, rlDDPGAgent, или rlTD3Agent. Для получения дополнительной информации о создании представлений смотрите, Создают Представления Функции ценности и политика.

Создание

Описание

Скалярный Выходной критик Q-значения

пример

critic = rlQValueRepresentation(net,observationInfo,actionInfo,'Observation',obsName,'Action',actName) создает Q-функцию-ценности critic.NET глубокая нейронная сеть, используемая в качестве аппроксимации, и должна иметь оба наблюдения и действие как входные параметры и один скалярный выход. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo critic соответственно к входным параметрам observationInfo и actionInfo, содержа наблюдения и спецификации действия. obsName должен содержать имена входных слоев net это сопоставлено со спецификациями наблюдений. Имя действия actName должно быть имя входного слоя net это сопоставлено со спецификациями действия.

пример

critic = rlQValueRepresentation(tab,observationInfo,actionInfo) создает основанный на Q-функции-ценности critic с дискретным действием и пространствами наблюдений из таблицы tab Q-значения. tab rlTable объект, содержащий таблицу со столькими же строк сколько возможные наблюдения и столько же столбцов сколько возможные действия. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo critic соответственно к входным параметрам observationInfo и actionInfo, который должен быть rlFiniteSetSpec объекты, содержащие технические требования для дискретных наблюдений и пространств действий, соответственно.

пример

critic = rlQValueRepresentation({basisFcn,W0},observationInfo,actionInfo) создает основанный на Q-функции-ценности critic использование пользовательской основной функции как базовая аппроксимация. Первый входной параметр является ячейкой 2D элементов, в которой первый элемент содержит указатель basisFcn к пользовательской основной функции и второму элементу содержит начальный вектор веса W0. Здесь основная функция должна иметь оба наблюдения и действие как входные параметры и W0 должен быть вектор-столбец. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo critic соответственно к входным параметрам observationInfo и actionInfo.

Мультивыведите критика Q-значения дискретного пространства действий

пример

critic = rlQValueRepresentation(net,observationInfo,actionInfo,'Observation',obsName) создает мультивыходную Q-функцию-ценности critic для дискретного пространства действий. net глубокая нейронная сеть, используемая в качестве аппроксимации, и должна иметь только наблюдения, как введено и один выходной слой, имеющий столько же элементов сколько количество возможных дискретных действий. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo critic соответственно к входным параметрам observationInfo и actionInfo, содержа наблюдения и спецификации действия. Здесь, actionInfo должен быть rlFiniteSetSpec объект, содержащий технические требования для дискретного пространства действий. Наблюдение называет obsName должны быть имена входных слоев net.

пример

critic = rlQValueRepresentation({basisFcn,W0},observationInfo,actionInfo) создает мультивыходную Q-функцию-ценности critic для дискретного пространства действий с помощью пользовательской основной функции в качестве базовой аппроксимации. Первый входной параметр является ячейкой 2D элементов, в которой первый элемент содержит указатель basisFcn к пользовательской основной функции и второму элементу содержит начальную матрицу веса W0. Здесь основная функция должна иметь только наблюдения как входные параметры и W0 должен иметь столько же столбцов сколько количество возможных действий. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo critic соответственно к входным параметрам observationInfo и actionInfo.

Опции

critic = rlQValueRepresentation(___,options) создает основанный на функции ценности critic использование дополнительной опции установило options, который является rlRepresentationOptions объект. Этот синтаксис устанавливает свойство Options critic к options входной параметр. Можно использовать этот синтаксис с любой из предыдущих комбинаций входных аргументов.

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

развернуть все

Глубокая нейронная сеть, используемая в качестве базовой аппроксимации в критике в виде одного из следующего:

Для одного выходных критиков, net должен иметь и наблюдения и действия как входные параметры и скалярный выход, представляя ожидаемое совокупное долгосрочное вознаграждение, когда агент начинает с заданного наблюдения и принимает данные меры. Для мультивыходных критиков дискретного пространства действий, net должен иметь только наблюдения, как введено и один выходной слой, имеющий столько же элементов сколько количество возможных дискретных действий. Каждый выходной элемент представляет ожидаемое совокупное долгосрочное вознаграждение, когда агент начинает с заданного наблюдения и принимает соответствующие меры. Настраиваемые параметры критика являются весами глубокой нейронной сети.

Сетевые входные слои должны быть в том же порядке и с совпадающим типом данных и размерностями как сигналы, заданные в ObservationInfo. Кроме того, имена этих входных слоев должны совпадать с именами наблюдения, перечисленными в obsName.

Сетевой выходной слой должен иметь совпадающий тип данных и размерность как сигнал, заданный в ActionInfo. Его имя должно быть именем действия, заданным в actName.

rlQValueRepresentation объекты поддерживают текущие глубокие нейронные сети для мультивыходных критиков дискретного пространства действий.

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

Наблюдение называет в виде массива ячеек строк или векторов символов. Имена наблюдения должны быть именами входных слоев в net.

Пример: {'my_obs'}

Имя действия в виде одноэлементного массива ячеек, который содержит вектор символов. Это должно быть имя выходного слоя net.

Пример: {'my_act'}

Таблица Q-значения в виде rlTable объект, содержащий массив со столькими же строк сколько возможные наблюдения и столько же столбцов сколько возможные действия. Элемент (sA) ожидаемое совокупное долгосрочное вознаграждение за принимающий меры a от наблюдаемого s состояния. Элементами этого массива являются настраиваемые параметры критика.

Пользовательская основная функция в виде указателя на функцию к пользовательской функции MATLAB. Определяемая пользователем функция может или быть анонимной функцией или функцией на пути MATLAB. Выходом критика является c = W'*B, где W вектор или матрица веса, содержащий настраиваемые параметры и B вектор-столбец, возвращенный пользовательской основной функцией.

Для критика Q-значения одно выхода, c скаляр, представляющий ожидаемое совокупное долгосрочное вознаграждение, когда агент начинает с заданного наблюдения и принимает данные меры. В этом случае ваша основная функция должна иметь следующую подпись.

B = myBasisFunction(obs1,obs2,...,obsN,act)

Для нескольких - выходной критик Q-значения с дискретным пространством действий, c вектор, в котором каждым элементом является ожидаемое совокупное долгосрочное вознаграждение, когда агент начинает с заданного наблюдения и принимает меры, соответствующие положению продуманного элемента. В этом случае ваша основная функция должна иметь следующую подпись.

B = myBasisFunction(obs1,obs2,...,obsN)

Здесь, obs1 к obsN наблюдения в том же порядке и с совпадающим типом данных и размерностями как сигналы, заданные в observationInfo и act имеет совпадающий тип данных и размерности как спецификации действия в actionInfo

Пример: @(obs1,obs2,act) [act(2)*obs1(1)^2; abs(obs2(5)+act(1))]

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

Свойства

развернуть все

Опции представления в виде rlRepresentationOptions объект. Доступные параметры включают оптимизатор, используемый для обучения и скорости обучения.

Спецификации наблюдений в виде rlFiniteSetSpec или rlNumericSpec возразите или массив, содержащий соединение таких объектов. Эти объекты задают свойства, такие как размерности, тип данных и имена сигналов наблюдения.

rlQValueRepresentation устанавливает ObservationInfo свойство critic к входу observationInfo.

Можно извлечь ObservationInfo существующей средой или использованием агента getObservationInfo. Можно также создать технические требования вручную.

Спецификации действия в виде rlFiniteSetSpec или rlNumericSpec объект. Эти объекты задают свойства, такие как размерности, тип данных и имя сигналов действия.

rlQValueRepresentation устанавливает ActionInfo свойство critic к входу actionInfo.

Можно извлечь ActionInfo существующей средой или использованием агента getActionInfo. Можно также создать технические требования вручную.

Для пользовательских представлений основной функции сигнал действия должен быть скаляром, вектор-столбцом или дискретным действием.

Функции объекта

rlDDPGAgentГлубоко детерминированный агент обучения с подкреплением градиента политики
rlTD3AgentЗадержанный близнецами глубоко детерминированный агент обучения с подкреплением градиента политики
rlDQNAgentГлубокий агент обучения с подкреплением Q-сети
rlQAgentАгент обучения с подкреплением Q-изучения
rlSARSAAgentАгент обучения с подкреплением SARSA
rlSACAgentМягкий агент обучения с подкреплением критика агента
getValueПолучите представление функции ориентировочной стоимости
getMaxQValueПолучите максимальную оценку функции ценности состояния для представления Q-функции-ценности с дискретным пространством действий

Примеры

свернуть все

Создайте объект спецификации наблюдений (или альтернативно используйте getObservationInfo чтобы извлечь спецификацию возражают средой). В данном примере задайте пространство наблюдений как непрерывный четырехмерный пробел, так, чтобы одно наблюдение было вектор-столбцом, содержащим четыре, удваивается.

obsInfo = rlNumericSpec([4 1]);

Создайте объект спецификации действия (или альтернативно используйте getActionInfo чтобы извлечь спецификацию возражают средой). В данном примере задайте пространство действий как непрерывное двумерное пространство, так, чтобы одно действие было вектор-столбцом, содержащим два, удваивается.

actInfo = rlNumericSpec([2 1]);

Создайте глубокую нейронную сеть, чтобы аппроксимировать Q-функцию-ценности. Сеть должна иметь два входных параметров, один для наблюдения и один для действия. Вход наблюдения (здесь названный myobs) должен принять четырехэлементный вектор (вектор наблюдения, заданный obsInfo). Вход действия (здесь названный myact) должен принять двухэлементный вектор (вектор действия, заданный actInfo). Выход сети должен быть скаляром, представляя ожидаемое совокупное долгосрочное вознаграждение, когда агент начинает с заданного наблюдения и принимает данные меры.

% observation path layers
obsPath = [featureInputLayer(4, 'Normalization','none','Name','myobs') 
    fullyConnectedLayer(1,'Name','obsout')];

% action path layers
actPath = [featureInputLayer(2, 'Normalization','none','Name','myact') 
    fullyConnectedLayer(1,'Name','actout')];

% common path to output layers
comPath = [additionLayer(2,'Name', 'add')  fullyConnectedLayer(1, 'Name', 'output')];

% add layers to network object
net = addLayers(layerGraph(obsPath),actPath); 
net = addLayers(net,comPath);

% connect layers
net = connectLayers(net,'obsout','add/in1');
net = connectLayers(net,'actout','add/in2');

% plot network
plot(net)

Figure contains an axes object. The axes object contains an object of type graphplot.

Создайте критика с rlQValueRepresentation, с помощью сети, наблюдений и объектов спецификации действия, а также имен сетевых входных слоев.

critic = rlQValueRepresentation(net,obsInfo,actInfo, ...
    'Observation',{'myobs'},'Action',{'myact'})
critic = 
  rlQValueRepresentation with properties:

         ActionInfo: [1x1 rl.util.rlNumericSpec]
    ObservationInfo: [1x1 rl.util.rlNumericSpec]
            Options: [1x1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{rand(4,1)},{rand(2,1)})
v = single
    0.1102

Можно теперь использовать критика (наряду с с агентом), чтобы создать агента, использующего критика Q-функции-ценности (такого как rlQAgent, rlDQNAgent, rlSARSAAgent, или rlDDPGAgent агент).

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

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

Создайте объект спецификации наблюдений (или альтернативно используйте getObservationInfo чтобы извлечь спецификацию возражают средой). В данном примере задайте пространство наблюдений как непрерывный четырехмерный пробел, так, чтобы одно наблюдение было вектор-столбцом, содержащим четыре, удваивается.

obsInfo = rlNumericSpec([4 1]);

Создайте объект спецификации действия конечного множества (или альтернативно используйте getActionInfo чтобы извлечь спецификацию возражают средой с дискретным пространством действий). В данном примере задайте пространство действий как конечное множество, состоящее из трех возможных значений (названный 7, 5, и 3 в этом случае).

actInfo = rlFiniteSetSpec([7 5 3]);

Создайте аппроксимацию глубокой нейронной сети, чтобы аппроксимировать Q-функцию-ценности в критике. Вход сети (здесь названный myobs) должен принять четырехэлементный вектор, как задано obsInfo. Выход должен быть одним выходным слоем, имеющим столько же элементов сколько количество возможных дискретных действий (три в этом случае, как задано actInfo).

net = [featureInputLayer(4,'Normalization','none','Name','myobs') 
       fullyConnectedLayer(3,'Name','value')];

Создайте критика, использующего сеть, объект спецификации наблюдений и имя сетевого входного слоя.

critic = rlQValueRepresentation(net,obsInfo,actInfo,'Observation',{'myobs'})
critic = 
  rlQValueRepresentation with properties:

         ActionInfo: [1x1 rl.util.rlFiniteSetSpec]
    ObservationInfo: [1x1 rl.util.rlNumericSpec]
            Options: [1x1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{rand(4,1)})
v = 3x1 single column vector

    0.7232
    0.8177
   -0.2212

Можно теперь использовать критика (наряду с агентом), чтобы создать агента дискретного пространства действий, использующего критика Q-функции-ценности (такого как rlQAgent, rlDQNAgent, или rlSARSAAgent агент).

Создайте объект спецификации наблюдений конечного множества (или альтернативно используйте getObservationInfo чтобы извлечь спецификацию возражают средой с дискретным пространством наблюдений). Поскольку этот пример задает пространство наблюдений как конечное множество с 4 возможных значений.

obsInfo = rlFiniteSetSpec([7 5 3 1]);

Создайте объект спецификации действия конечного множества (или альтернативно используйте getActionInfo чтобы извлечь спецификацию возражают средой с дискретным пространством действий). Поскольку этот пример задает пространство действий как конечное множество с 2 возможными значениями.

actInfo = rlFiniteSetSpec([4 8]);

Составьте таблицу, чтобы аппроксимировать функцию ценности в критике. rlTable создает объект таблицы значения из объектов спецификаций действия и спецификаций наблюдений.

qTable = rlTable(obsInfo,actInfo);

Таблица хранит значение (представляющий ожидаемое совокупное долгосрочное вознаграждение) для каждой возможной пары действия наблюдения. Каждая строка соответствует наблюдению, и каждый столбец соответствует действию. Можно получить доступ к таблице с помощью Table свойство vTable объект. Начальное значение каждого элемента является нулем.

qTable.Table
ans = 4×2

     0     0
     0     0
     0     0
     0     0

Можно инициализировать таблицу к любому значению, в этом случае, массив, содержащий целое число от 1 через 8.

qTable.Table=reshape(1:8,4,2)
qTable = 
  rlTable with properties:

    Table: [4x2 double]

Создайте критика, использующего таблицу, а также объекты спецификации действия и наблюдения.

critic = rlQValueRepresentation(qTable,obsInfo,actInfo)
critic = 
  rlQValueRepresentation with properties:

         ActionInfo: [1x1 rl.util.rlFiniteSetSpec]
    ObservationInfo: [1x1 rl.util.rlFiniteSetSpec]
            Options: [1x1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{5},{8})
v = 6

Можно теперь использовать критика (наряду с с агентом), чтобы создать агента дискретного пространства действий, использующего критика Q-функции-ценности (такого как rlQAgent, rlDQNAgent, или rlSARSAAgent агент).

Создайте объект спецификации наблюдений (или альтернативно используйте getObservationInfo чтобы извлечь спецификацию возражают средой). В данном примере задайте пространство наблюдений как непрерывный четырехмерный пробел, так, чтобы одно наблюдение было вектор-столбцом, содержащим 3, удваивается.

obsInfo = rlNumericSpec([3 1]);

Создайте объект спецификации действия (или альтернативно используйте getActionInfo чтобы извлечь спецификацию возражают средой). В данном примере задайте пространство действий как непрерывное двумерное пространство, так, чтобы одно действие было вектор-столбцом, содержащим 2, удваивается.

actInfo = rlNumericSpec([2 1]);

Создайте пользовательскую основную функцию, чтобы аппроксимировать функцию ценности в критике. Пользовательская основная функция должна возвратить вектор-столбец. Каждым векторным элементом должна быть функция наблюдений и действий, соответственно заданных obsInfo и actInfo.

myBasisFcn = @(myobs,myact) [myobs(2)^2; myobs(1)+exp(myact(1)); abs(myact(2)); myobs(3)]
myBasisFcn = function_handle with value:
    @(myobs,myact)[myobs(2)^2;myobs(1)+exp(myact(1));abs(myact(2));myobs(3)]

Выходом критика является скалярный W'*myBasisFcn(myobs,myact), где W вектор-столбец веса, который должен иметь тот же размер пользовательской основной функции выход. Этот выход является ожидаемым совокупным долгосрочным вознаграждением, когда агент начинает с заданного наблюдения и принимает самые лучшие меры. Элементами W являются настраиваемые параметры.

Задайте начальный вектор параметра.

W0 = [1;4;4;2];

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

critic = rlQValueRepresentation({myBasisFcn,W0},obsInfo,actInfo)
critic = 
  rlQValueRepresentation with properties:

         ActionInfo: [1×1 rl.util.rlNumericSpec]
    ObservationInfo: [1×1 rl.util.rlNumericSpec]
            Options: [1×1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{[1 2 3]'},{[4 5]'})
v = 
  1×1 dlarray

  252.3926

Можно теперь использовать критика (наряду с с агентом), чтобы создать агента, использующего критика Q-функции-ценности (такого как rlQAgent, rlDQNAgent, rlSARSAAgent, или rlDDPGAgent агент).

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

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

Создайте объект спецификации наблюдений (или альтернативно используйте getObservationInfo чтобы извлечь спецификацию возражают средой). В данном примере задайте пространство наблюдений как непрерывный четырехмерный пробел, так, чтобы одно наблюдение было вектор-столбцом, содержащим 2, удваивается.

obsInfo = rlNumericSpec([2 1]);

Создайте объект спецификации действия конечного множества (или альтернативно используйте getActionInfo чтобы извлечь спецификацию возражают средой с дискретным пространством действий). В данном примере задайте пространство действий как конечное множество, состоящее из 3 возможных значений (названный 7, 5, и 3 в этом случае).

actInfo = rlFiniteSetSpec([7 5 3]);

Создайте пользовательскую основную функцию, чтобы аппроксимировать функцию ценности в критике. Пользовательская основная функция должна возвратить вектор-столбец. Каждым векторным элементом должна быть функция наблюдений, заданных obsInfo.

myBasisFcn = @(myobs) [myobs(2)^2; myobs(1); exp(myobs(2)); abs(myobs(1))]
myBasisFcn = function_handle with value:
    @(myobs)[myobs(2)^2;myobs(1);exp(myobs(2));abs(myobs(1))]

Выход критика является вектором c = W'*myBasisFcn(myobs), где W матрица веса, которая должна иметь столько же строк сколько продолжительность основной функции выход, и столько же столбцов сколько количество возможных действий.

Каждым элементом c является ожидаемое совокупное долгосрочное вознаграждение, когда агент начинает с заданного наблюдения и принимает меры, соответствующие положению продуманного элемента. Элементами W являются настраиваемые параметры.

Задайте начальную матрицу параметра.

W0 = rand(4,3);

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

critic = rlQValueRepresentation({myBasisFcn,W0},obsInfo,actInfo)
critic = 
  rlQValueRepresentation with properties:

         ActionInfo: [1x1 rl.util.rlFiniteSetSpec]
    ObservationInfo: [1x1 rl.util.rlNumericSpec]
            Options: [1x1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{rand(2,1)})
v = 
  3x1 dlarray

    2.1395
    1.2183
    2.3342

Можно теперь использовать критика (наряду с агентом), чтобы создать агента дискретного пространства действий, использующего критика Q-функции-ценности (такого как rlQAgent, rlDQNAgent, или rlSARSAAgent агент).

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

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

Создайте текущую глубокую нейронную сеть для своего критика. Чтобы создать рекуррентную нейронную сеть, используйте sequenceInputLayer как входной слой и включают по крайней мере один lstmLayer.

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

criticNetwork = [
    sequenceInputLayer(numObs,'Normalization','none','Name','state')
    fullyConnectedLayer(50, 'Name', 'CriticStateFC1')
    reluLayer('Name','CriticRelu1')
    lstmLayer(20,'OutputMode','sequence','Name','CriticLSTM');
    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);
Введенный в R2020a