rlRepresentation

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

Описание

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

пример

rep = rlRepresentation(net,obsInfo,'Observation',obsNames) создает представление для глубокой нейронной сети net. Наблюдение называет obsNames сетевые входные имена слоя. obsInfo содержит соответствующие спецификации наблюдения для учебной среды. Используйте этот синтаксис, чтобы создать представление для критика, который не требует входных параметров действия, таких как критик для rlACAgent или rlPGAgent агент.

пример

rep = rlRepresentation(net,obsInfo,actInfo,'Observation',obsNames,'Action',actNames) создает представление с сигналами действия, заданными именами actNames и спецификация actInfo. Используйте этот синтаксис, чтобы создать представление для любого агента, или для критика, который берет и наблюдение и действие, как введено, такое как критик для rlDQNAgent или rlDDPGAgent агент.

пример

tableCritic = rlRepresentation(tab) создает представление критика для таблицы значения или Q-таблицы tab. Когда вы создаете табличное представление, вы задаете наблюдение и спецификации действия, когда вы создаете tab.

critic = rlRepresentation(basisFcn,W0,obsInfo) создает линейное представление основной функции с помощью указателя на пользовательскую основную функцию basisFcn и начальный вектор веса W0. obsInfo содержит соответствующие спецификации наблюдения для учебной среды. Используйте этот синтаксис, чтобы создать представление для критика, который не требует входных параметров действия, таких как критик для rlACAgent или rlPGAgent агент.

critic = rlRepresentation(basisFcn,W0,oaInfo) создает линейное представление основной функции с помощью массива ячеек спецификации oaInfo, где oaInfo = {obsInfo,actInfo}. Используйте этот синтаксис, чтобы создать представление для критика, который берет и наблюдения и действия как входные параметры, такие как критик для rlDQNAgent или rlDDPGAgent агент.

actor = rlRepresentation(basisFcn,W0,obsInfo,actInfo) создает линейное представление основной функции с помощью заданного наблюдения и спецификаций действия, obsInfo и actInfo, соответственно. Используйте этот синтаксис, чтобы создать представление для агента, который берет наблюдения в качестве входных параметров и генерирует действия.

пример

rep = rlRepresentation(___,repOpts) создает представление с помощью дополнительных опций, которые задают изучение параметров для представления, когда вы обучаете агента. Доступные параметры включают оптимизатор, используемый в обучении и темпе обучения. Используйте rlRepresentationOptions чтобы создать опции устанавливает repOpts. Можно использовать этот синтаксис с любой из предыдущих комбинаций входных аргументов.

Примеры

свернуть все

Создайте представление агента и представление критика, которое можно использовать, чтобы задать агента обучения с подкреплением, такого как агент Критика агента (AC).

В данном примере создайте агента и представления критика для агента, который может быть обучен против полюсной корзиной среды, описанной в, Обучают Агента AC Балансировать полюсную Корзиной Систему. Во-первых, создайте среду. Затем извлеките наблюдение и спецификации действия средой. Вам нужны эти спецификации, чтобы задать представления критика и агент.

env = rlPredefinedEnv("CartPole-Discrete");
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

Для критика состояния функционального значением, такого как используемые в AC или агентах PG, входные параметры являются наблюдениями, и выход должен быть скалярным значением, значением состояния. В данном примере создайте представление критика с помощью глубокой нейронной сети с одним выходом, и с сигналами наблюдения, соответствующими x,xdot,theta,thetadot как описано в Обучают Агента AC Балансировать полюсную Корзиной Систему. Можно получить количество наблюдений от obsInfo спецификация. Назовите сетевой вход 'observation' слоя.

numObservation = obsInfo.Dimension(1);
criticNetwork = [
    imageInputLayer([numObservation 1 1],'Normalization','none','Name','observation')
    fullyConnectedLayer(1,'Name','CriticFC')];

Задайте опции для представления критика с помощью rlRepresentationOptions. Эти опции управляют параметрами изучения сети критика, когда вы обучаете агента, который включает представление критика. В данном примере установите темп обучения на 0,05 и порог градиента к 1.

repOpts = rlRepresentationOptions('LearnRate',5e-2,'GradientThreshold',1);

Создайте представление критика с помощью заданной нейронной сети и опций. Кроме того, укажите информацию действия и наблюдения для критика. Определите имя наблюдения к 'observation', который является именем, вы использовали, когда вы создали сетевой входной слой для criticNetwork.

critic = rlRepresentation(criticNetwork,obsInfo,'Observation',{'observation'},repOpts)
critic = 
  rlLayerRepresentation with properties:

    Options: [1x1 rl.option.rlRepresentationOptions]

Точно так же создайте сеть для агента. Агент AC решает который действие взять данный наблюдения с помощью представления агента. Для агента входные параметры являются наблюдениями, и выход зависит от того, дискретен ли пробел действия или непрерывен. Для агента этого примера существует два возможных дискретных действия, –10 или 10. Таким образом, чтобы создать агента, используйте глубокую нейронную сеть с тем же входом наблюдения как критик, который может вывести эти два значения. Можно получить количество действий от actInfo спецификация. Назовите выход 'action'.

numAction = numel(actInfo.Elements); 
actorNetwork = [
    imageInputLayer([4 1 1], 'Normalization','none','Name','observation')
    fullyConnectedLayer(numAction,'Name','action')];

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

actor = rlRepresentation(actorNetwork,obsInfo,actInfo,...
    'Observation',{'observation'},'Action',{'action'},repOpts)
actor = 
  rlLayerRepresentation with properties:

    Options: [1x1 rl.option.rlRepresentationOptions]

Можно теперь использовать агента и представления критика, чтобы создать агента AC.

agentOpts = rlACAgentOptions(...
    'NumStepsToLookAhead',32,...
    'DiscountFactor',0.99);
agent = rlACAgent(actor,critic,agentOpts)
agent = 
  rlACAgent with properties:

    AgentOptions: [1x1 rl.option.rlACAgentOptions]

Для дополнительных примеров, показывающих, как создать агента и представления критика для различных типов агента, см.:

Создайте интерфейс среды.

env = rlPredefinedEnv("BasicGridWorld");

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

qTable = rlTable(getObservationInfo(env),getActionInfo(env));

Создайте представление для Q-таблицы.

tableRep = rlRepresentation(qTable);

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

obsInfo = geObservationInfo(env);
actInfo = getActionInfo(env);

Создайте пользовательскую основную функцию. В этом случае используйте квадратичную основную функцию от, Обучают Пользовательского Агента LQR.

function B = computeQuadraticBasis(x,u,n)
z = cat(1,x,u);
idx = 1;
for r = 1:n
    for c = r:n
        if idx == 1
            B = z(r)*z(c);
        else
            B = cat(1,B,z(r)*z(c));
        end
        idx = idx + 1;
    end
end

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

nQ = size(obj.Q,1);
nR = size(obj.R,1);
n = nQ+nR;

Установите начальный вектор веса.

w0 = 0.1*ones(0.5*(n+1)*n,1);

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

critic = rlRepresentation(@(x,u) computeQuadraticBasis(x,u,n),w0,obsInfo,actInfo);

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

свернуть все

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

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

Имена наблюдения, заданные как массив ячеек из символьных векторов. Имена наблюдения являются сетевыми входными именами слоя, которые вы задаете, когда вы создаете net. Имена в obsNames должен быть в том же порядке как спецификации наблюдения в obsInfo.

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

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

Имя действия, заданное как одноэлементный массив ячеек, который содержит вектор символов. Имя действия является сетевым именем слоя, которое вы задаете, когда вы создаете net. Для сетей критика этот слой является первым слоем входа path действия. Для агентов этот слой является последним слоем действия выход path.

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

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

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

Таблица Value или Q-таблица для критика, заданного как rlTable объект. learnable параметры табличного представления являются элементами tab.

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

При создании:

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

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

    Здесь obs1 к obsN наблюдения в том же порядке и с совпадающим типом данных и размерностями как спецификации наблюдения в obsInfo.

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

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

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

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

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

    Здесь, obs1 к obsN наблюдения в том же порядке и с совпадающим типом данных и размерностями как спецификации наблюдения в obsInfo. Типы данных и размерности спецификации действия в actInfo влияйте на тип данных и размерности f.

Пример: @(x,u) myBasisFunction(x,u)

Начальное значение для линейного массива веса основной функции, W, заданный как одно из следующего:

  • Вектор-столбец — При создании представления критика или представления агента с непрерывным скалярным сигналом действия

  • Массив — При создании представления агента с вектор-столбцом непрерывное действие сигнализирует или дискретный пробел действия.

Наблюдение и спецификации действия для создания линейных представлений критика основной функции, заданных как массив ячеек {obsInfo, actInfo}.

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

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

свернуть все

Представление глубокой нейронной сети, возвращенное как rlLayerRepresentation объект. Используйте это представление, чтобы создать агента для обучения с подкреплением. Для получения дополнительной информации смотрите Агентов Обучения с подкреплением.

Значение или представление критика Q-таблицы, возвращенное как rlTableRepresentation объект. Используйте это представление, чтобы создать агента для обучения с подкреплением. Для получения дополнительной информации смотрите Агентов Обучения с подкреплением.

Линейное представление критика основной функции, возвращенное как и rlLinearBasisRepresentation объект. Используйте это представление, чтобы создать агента для обучения с подкреплением. Для получения дополнительной информации смотрите Агентов Обучения с подкреплением.

Линейное представление агента основной функции, возвращенное как и rlLinearBasisRepresentation объект. Используйте это представление, чтобы создать агента для обучения с подкреплением. Для получения дополнительной информации смотрите Агентов Обучения с подкреплением.

Введенный в R2019a