主要内容

rlDeterministicActorRepresentation

(不推荐)用于强化学习代理的确定性参与者表示

rlDeterministicActorRepresentation不建议使用。使用rlContinuousDeterministicActor代替。有关更多信息,请参见不建议使用rlDeterministicActorRepresentation

描述

该对象实现了一个函数逼近器,该函数逼近器被用作增强学习代理中的确定性actor连续行动的空间。确定性行为者将观察结果作为输入,并将使预期累积长期回报最大化的行为作为输出返回,从而实现确定性策略。在创建一个rlDeterministicActorRepresentation对象,使用它创建合适的代理,例如rlDDPGAgent代理。有关创建表示的详细信息,请参见创建策略和值函数

创建

描述

例子

演员= rlDeterministicActorRepresentation (observationInfoactionInfo“观察”,obsName“行动”,actName使用深度神经网络创建一个确定性角色作为估计值。此语法设置ObservationInfo而且ActionInfo的属性演员对于输入observationInfo而且actionInfo,分别包含观察和操作的规范。actionInfo必须指定连续操作空间,不支持离散操作空间。金宝appobsName必须包含的输入层的名称与观察规范相关的。动作名actName必须是输出层的名称与动作规范相关联的。

例子

演员= rlDeterministicActorRepresentation ({basisFcnW0},observationInfoactionInfo使用自定义基函数作为基础逼近器创建确定性参与者。第一个输入参数是一个包含两个元素的单元格,其中第一个元素包含句柄basisFcn到自定义基函数,而第二个元素包含初始权值矩阵W0.此语法设置ObservationInfo而且ActionInfo的属性演员分别对应于输入observationInfo而且actionInfo

演员= rlDeterministicActorRepresentation (___选项使用附加选项集创建确定性参与者选项,这是一个rlRepresentationOptions对象。此语法设置选项的属性演员选项输入参数。您可以将此语法用于前面的任何输入-参数组合。

输入参数

全部展开

深度神经网络用作行动者内部的底层逼近器,指定为以下之一:

网络输入层必须与中定义的信号具有相同的顺序和相同的数据类型和维度ObservationInfo.此外,这些输入层的名称必须与中列出的观察名称相匹配obsName

网络输出层必须具有与中定义的信号相同的数据类型和维度ActionInfo.其名称必须是中指定的动作名称actName

rlDeterministicActorRepresentation对象支持循环深度金宝app神经网络。

有关深度神经网络层的列表,请参见深度学习层列表.有关创建用于强化学习的深度神经网络的更多信息,请参见创建策略和值函数

观察名称,指定为字符串或字符向量的单元格数组。观察名称必须是中输入层的名称

例子:{' my_obs '}

操作名称,指定为包含字符向量的单元素单元格数组。的输出层名称

例子:{' my_act '}

自定义基函数,指定为用户定义的MATLAB函数的函数句柄。用户定义的函数可以是匿名函数,也可以是MATLAB路径上的函数。基于当前观察(即参与者的输出)所采取的行动是向量a = W'*B,在那里W权重矩阵是否包含可学习参数和B由自定义基函数返回的列向量。

在创建确定性参与者表示时,基函数必须具有以下签名。

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

在这里obs1obsN中定义的信号的观测顺序和数据类型和维度是否相同observationInfo

例子:@ (obs1 obs2 obs3) [obs3 (2) * obs1 (1) ^ 2;abs (obs2 (5) + obs3 (1)))

基函数权值的初值,W,指定为一个矩阵,其行数与基函数返回的向量的长度相同,列数与动作空间的维数相同。

属性

全部展开

表示选项,指定为rlRepresentationOptions对象。可用的选项包括用于训练的优化器和学习率。

观察规范,规定为rlFiniteSetSpecrlNumericSpec对象或此类对象的数组。这些对象定义了观测信号的维度、数据类型和名称等属性。

rlDeterministicActorRepresentation设置ObservationInfo的属性演员对于输入observationInfo

你可以提取ObservationInfo从现有环境或代理中使用getObservationInfo.您还可以手动构造规范。

连续操作空间的操作规范,指定为rlNumericSpec对象定义操作信号的维度、数据类型和名称等属性。确定性参与者表示不支持离散操作。金宝app

rlDeterministicActorRepresentation设置ActionInfo的属性演员对于输入observationInfo

你可以提取ActionInfo从现有环境或代理中使用getActionInfo.您还可以手动构造规范。

对于自定义基函数表示,动作信号必须是标量、列向量或离散动作。

对象的功能

rlDDPGAgent 深度确定性策略梯度(DDPG)强化学习代理
rlTD3Agent 双延迟深度确定性策略梯度强化学习代理
getAction 从给定环境观察的代理、参与者或策略对象获取操作

例子

全部折叠

创建一个观察规范对象(或者使用getObservationInfo从环境中提取规范对象)。对于本例,将观测空间定义为连续的四维空间,这样单个观测值就是包含四个double的列向量。

obsInfo = rlNumericSpec([4 1]);

创建一个操作规范对象(或者使用getActionInfo从环境中提取规范对象)。对于本例,将操作空间定义为连续的二维空间,这样单个操作就是包含两个double的列向量。

actInfo = rlNumericSpec([2 1]);

为参与者创建一个深度神经网络逼近器。网络的输入(这里称为myobs)必须接受一个四元向量(观察向量是由obsInfo),它的输出必须是动作(这里称为myact),是一个两元向量,定义为actInfo

net = [featureInputLayer(4,“归一化”“没有”“名字”“myobs”) fullyConnectedLayer (2“名字”“myact”));

rlQValueRepresentation,使用网络、观察和动作规范对象,以及网络输入和输出层的名称。

actor = rlDeterministicActorRepresentation(net,obsInfo,actInfo,...“观察”, {“myobs”},“行动”, {“myact”})
actor =带有属性的rlDeterministicActorRepresentation: ActionInfo: [1x1 rl.util.]rlNumericSpec] ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要检查角色,请使用getAction使用当前网络权重从随机观察中返回操作。

act = getAction(actor,{rand(4,1)});行为{1}
ans =2x1个单列向量-0.5054 - 1.5390

现在可以使用参与者创建合适的代理(例如rlACAgentrlPGAgent,或rlDDPGAgent代理)。

创建一个观察规范对象(或者使用getObservationInfo从环境中提取规范对象)。对于本例,将观测空间定义为连续的四维空间,这样单个观测值就是包含3个double的列向量。

obsInfo = rlNumericSpec([3 1]);

确定性参与者不支持离散操作空间。金宝app因此,创建一个连续作用空间规范对象(或者使用getActionInfo从环境中提取规范对象)。对于本例,将操作空间定义为连续的二维空间,这样单个操作就是包含两个double的列向量。

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))

actor的输出是向量W ' * myBasisFcn (myobs),这是由于给定的观察结果而采取的行动。权重矩阵W包含可学习的参数,并且行数必须与基函数输出的长度相同,列数必须与动作空间的维数相同。

定义一个初始参数矩阵。

W0 = rand(4,2);

创建参与者。第一个参数是一个包含自定义函数句柄和初始权重矩阵的双元素单元格。第二个和第三个参数分别是观察和操作规范对象。

actor = rlDeterministicActorRepresentation({myBasisFcn,W0},obsInfo,actInfo)
actor =带有属性的rlDeterministicActorRepresentation: ActionInfo: [1x1 rl.util.]rlNumericSpec] ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要检查角色,请使用getAction函数使用当前参数矩阵返回给定观测的动作。

a = getAction(actor,{[1 2 3]'});一个{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,“归一化”“没有”“名字”“状态”) fullyConnectedLayer (10“名字”“fc1”) reluLayer (“名字”“relu1”) lstmLayer (8,“OutputMode”“序列”“名字”“ActorLSTM”) fullyConnectedLayer (20“名字”“CriticStateFC2”) fullyConnectedLayer (numAct“名字”“行动”) tanhLayer (“名字”“tanh1”));

为网络创建一个确定的参与者表示。

actorOptions = rlRepresentationOptions(“LearnRate”1 e - 3,“GradientThreshold”1);actor = rlDeterministicActorRepresentation(net,obsinfo,actinfo,...“观察”, {“状态”},“行动”, {“tanh1”});

版本历史

R2020a中引入

全部展开