rlDeterministicActorRepresentation

Детерминированное представление актера для агентов обучения с подкреплением

Описание

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

Создание

Описание

пример

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

пример

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

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

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

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

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

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

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

rlDeterministicActorRepresentation объекты поддерживают текущие глубокие нейронные сети.

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

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

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

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

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

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

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

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

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

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

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

Свойства

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

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

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

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

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

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

rlDeterministicActorRepresentation устанавливает ActionInfo свойство actor к входу observationInfo.

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

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

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

rlDDPGAgentГлубоко детерминированный агент обучения с подкреплением градиента политики
rlTD3AgentЗадержанный близнецами глубоко детерминированный агент обучения с подкреплением градиента политики
getActionПолучите действие из агента или представления актера, данного наблюдения среды

Примеры

свернуть все

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

obsInfo = rlNumericSpec([4 1]);

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

actInfo = rlNumericSpec([2 1]);

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

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

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

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

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

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

act = getAction(actor,{rand(4,1)}); act{1}
ans = 2x1 single column vector

   -0.5054
    1.5390

Можно теперь использовать агента, чтобы создать подходящего агента (такого как rlACAgent, rlPGAgent, или rlDDPGAgent агент).

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

obsInfo = rlNumericSpec([3 1]);

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

actInfo = rlNumericSpec([2 1]);

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

myBasisFcn = @(myobs) [myobs(2)^2; myobs(1); 2*myobs(2)+myobs(1); -myobs(3)]
myBasisFcn = function_handle with value:
    @(myobs)[myobs(2)^2;myobs(1);2*myobs(2)+myobs(1);-myobs(3)]

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

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

W0 = rand(4,2);

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

actor = rlDeterministicActorRepresentation({myBasisFcn,W0},obsInfo,actInfo)
actor = 
  rlDeterministicActorRepresentation with properties:

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

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

a = getAction(actor,{[1 2 3]'});
a{1}
ans = 
  2x1 dlarray

    2.0595
    2.3788

Можно теперь использовать агента (вместе с критиком), чтобы создать подходящего агента непрерывного пространства действий.

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

obsinfo = rlNumericSpec([4 1]);
actinfo = rlNumericSpec([2 1]);
numObs = obsinfo.Dimension(1);
numAct = actinfo.Dimension(1);

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

net = [sequenceInputLayer(numObs,'Normalization','none','Name','state')
            fullyConnectedLayer(10,'Name','fc1')
            reluLayer('Name','relu1')
            lstmLayer(8,'OutputMode','sequence','Name','ActorLSTM')
            fullyConnectedLayer(20,'Name','CriticStateFC2')
            fullyConnectedLayer(numAct,'Name','action')
            tanhLayer('Name','tanh1')];

Создайте детерминированное представление актера для сети.

actorOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1);
actor = rlDeterministicActorRepresentation(net,obsinfo,actinfo,...
    'Observation',{'state'},'Action',{'tanh1'});
Введенный в R2020a