主要内容

rlQValueRepresentation

强化学习主体的q值函数批判表示

描述

该对象实现了一个q值函数近似器,用于强化学习代理内的批评。q值函数是一个函数,它将观察-动作对映射到一个标量值,该标量值表示agent从给定的观察开始并执行给定的动作时所期望积累的总长期回报。因此,q值函数评论家需要观察和行动作为输入。在创建rlQValueRepresentation批评家,用它来创建一个依赖于q值函数批评家的代理,例如rlQAgentrlDQNAgent萨金特rlDDPGAgent,或rlTD3Agent.有关创建表示的更多信息,请参阅创建策略和值函数表示

创建

描述

标量输出Q值批评家

例子

评论家= rlQValueRepresentation (observationInfoactionInfo“观察”,obsName“行动”,actName创建Q值函数评论家是作为近似器使用的深度神经网络,并且必须既有观测值和动作作为输入,又有单个标量输出。该语法设置观测信息行动信息特性评论家分别对应于输入observationInfoactionInfo,包括观察和行动规范。obsName的输入层的名称与观察规范相关的。动作名称actName必须是输入层的名称与操作规范相关联的。

例子

评论家= rlQValueRepresentation (标签observationInfoactionInfo基于属性创建Q值函数评论家离散的行动和观察空间从q值表标签标签是A.rlTable对象,该对象包含一个表,该表包含尽可能多的行和尽可能多的列观测信息行动信息特性评论家分别对应于输入observationInfoactionInfo,必须是rlfinitesetspec.分别包含离散观测和动作空间规范的对象。

例子

评论家= rlqvaluerepresentation({basisFcnW0.},observationInfoactionInfo创建一个基于q值的函数评论家使用自定义基函数作为基础近似器。第一个输入参数是两个元素的单元格,其中第一个元素包含句柄basisFcn对于自定义基函数,第二个元素包含初始权重向量W0.在此,基函数必须同时具有观察值和动作作为输入和输出W0.必须是列向量。该语法设置观测信息行动信息特性评论家分别对应于输入observationInfoactionInfo

多输出离散动作空间Q值批评家

例子

评论家= rlQValueRepresentation (observationInfoactionInfo“观察”,obsName创建多输出Q值函数评论家对于离散的动作空间是作为近似器使用的深度神经网络,必须只有观测值作为输入,而单个输出层具有尽可能多的可能离散动作的元素数量。该语法设置观测信息行动信息特性评论家分别对应于输入observationInfoactionInfo,包括观察和行动规范。在这里,actionInfo一定是一个rlfinitesetspec.包含离散动作空间规范的对象。观察名称obsName必须是的输入层的名称

例子

评论家= rlqvaluerepresentation({basisFcnW0.},observationInfoactionInfo创建多输出Q值函数评论家对于离散的动作空间使用自定义基函数作为基础近似器。第一个输入参数是两个元素的单元格,其中第一个元素包含句柄basisFcn对于自定义基函数,第二个元素包含初始权重矩阵W0.在此,基函数必须仅将观测值作为输入,并且W0.必须具有尽可能多的列作为可能的动作的数量。该语法设置观测信息行动信息特性评论家分别对应于输入observationInfoactionInfo

选项

评论家= rlQValueRepresentation (___选项创建基于属性的值函数评论家使用附加选项集选项,这是一个rlRepresentationOptions此语法设置选项的属性评论家选项输入参数。您可以将此语法与前面的任何输入参数组合一起使用。

输入参数

展开全部

深度神经网络用作critic中的基本近似器,具体如下:

单输出评论家,必须将观察和操作作为输入,以及标量输出,表示当代理从给定的观察开始并采取给定的操作时的预期累积长期回报。为多输出离散动作空间评论家,必须只有观察作为输入和一个单一的输出层有尽可能多的元素可能的离散动作的数量。每个输出元素表示代理从给定的观察开始并采取相应操作时的预期累积长期回报。批评家的可学习参数就是深度神经网络的权值。

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

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

rlQValueRepresentation对象支持多输出离万博1manbetx散动作空间批评的经常性深神经网络。

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

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

例子:{'my_obs'}

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

例子:{'my_act'}

Q值表,指定为rlTable对象,该对象包含一个数组,其中包含尽可能多的行和尽可能多的列和可能的操作。元素(年代一个)是采取行动的预期累积长期奖励一个来自观察到的状态年代.这个数组的元素是批评家的可学习参数。

自定义基函数,指定为用户定义的MATLAB函数的函数句柄。用户定义的函数可以是匿名函数或MATLAB路径上的函数。批评家的输出为c = w'* b, 在哪里W权值向量或矩阵是否包含可学习参数,和B是自定义基函数返回的列向量。

对于单输出q值批评家,c是一个标量,表示代理从给定的观察开始并采取给定的动作时的预期累积长期报酬。在这种情况下,基函数必须具有以下签名。

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

对于具有离散动作空间的多输出Q值批评家,c是当代理从给定的观察开始时,每个元素是当代理开始时的预期累积长期奖励,并且采用对应于所考虑的元素的位置的动作。在这种情况下,基函数必须具有以下签名。

B = myBasisFunction (obsN obs1, obs2,…)

在这里,obs1.obsN是以相同的顺序观察和与定义的信号相同的数据类型和尺寸observationInfo行为具有与?中的操作规范相同的数据类型和维度actionInfo

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

基函数权重的初始值,W.对于单输出q值批评家,W是与基函数返回的向量长度相同的列向量。对于具有离散动作空间的多输出Q值批评家,W是一个矩阵,它必须有与基函数输出长度相同的行,以及与可能的操作数量相同的列。

特性

展开全部

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

观察规范,指定为rlfinitesetspec.rlNumericSpec对象或包含这些对象的混合的数组。这些对象定义了一些属性,比如维度、数据类型和观察信号的名称。

rlQValueRepresentation设定观测信息的属性评论家输入observationInfo

你可以提取观测信息从现有环境或代理使用获取观测信息。您也可以手动构造规范。

操作规范,指定为rlfinitesetspec.rlNumericSpec对象。这些对象定义动作信号的维度、数据类型和名称等属性。

rlQValueRepresentation设定行动信息的属性评论家输入actionInfo

你可以提取行动信息从现有环境或代理使用getActionInfo。您也可以手动构造规范。

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

对象的功能

rlDDPGAgent 深度确定性策略梯度强化学习主体
rlTD3Agent 双延迟深层确定性策略梯度强化学习agent
rlDQNAgent 深度q -网络强化学习代理
rlQAgent Q-learning强化学习代理
萨金特 SARSA强化学习代理
rlSACAgent 软演员 - 评论家强化学习代理
GetValue. 获得估计值函数表示
getMaxQValue 通过离散动作空间获取Q值函数表示的最大状态值函数估计

例子

全部崩溃

创建观察规范对象(或者使用获取观测信息从环境中提取规范对象)。对于该示例,将观察空间定义为连续的四维空间,因此单个观察是包含四个双打的列向量。

Obsinfo = rlnumericspec([4 1]);

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

actInfo=rlNumericSpec([21]);

创建一个深度神经网络来近似Q值函数。该网络必须有两个输入,一个用于观察,一个用于行动。观察输入(此处称为myobs)必须接受一个四元向量(由obsInfo).操作输入(此处称为我的行为)必须接受一个双元素向量(由Actinfo.).网络的输出必须是一个标量,表示agent从给定的观测开始并采取给定的行动时的预期累积长期回报。

观测路径层数百分比obsPath = [featureInputLayer (4'正常化'“没有”“名字”“myobs”)全康连接层(1,“名字”“obsout”)];%动作路径层actPath=[featureInputLayer(2,'正常化'“没有”“名字”“我的行为”)全康连接层(1,“名字”“actout”)];输出图层%常见路径comPath=[additionLayer(2,“名字”“添加”)全康连接层(1,“名字”“输出”)];给网络对象添加层网= addLayers (layerGraph (obsPath) actPath);网= addLayers(净,comPath);%连接层网= connectLayers(网络,“obsout”“添加/in1”);网= connectLayers(网络,“actout”“添加/ in2”);%的阴谋网络情节(网)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

创造批评家rlQValueRepresentation,使用网络,观察和动作规范对象,以及网络输入层的名称。

评论家= rlQValueRepresentation(净、obsInfo actInfo,...“观察”,{“myobs”},“行动”,{“我的行为”})
批评家= rlQValueRepresentation与属性:ActionInfo: [1x1 rl.util.]。rlNumericSpec . ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要检查你的批评家,使用GetValue.函数使用当前网络权重返回随机观察和操作的值。

v=getValue(批评家,{rand(4,1)},{rand(2,1)})
v =0.1102

现在,您可以使用批评家(以及演员)创建依赖于Q值函数批评家(例如rlQAgentrlDQNAgent萨金特,或rlDDPGAgent代理)。

这个例子展示了如何使用深度神经网络近似器为离散动作空间创建一个多输出q值函数批评家。

此评论家仅将观察视为输入,并将输出作为可能的动作的传输作为输出矢量。当代理从给定的观察开始时,每个元素表示预期的累积长期奖励,并且采用对应于输出向量中的元素的位置的动作。

创建观察规范对象(或者使用获取观测信息从环境中提取规范对象)。对于该示例,将观察空间定义为连续的四维空间,因此单个观察是包含四个双打的列向量。

Obsinfo = rlnumericspec([4 1]);

创建一个有限设定的动作规格对象(或可选使用)getActionInfo从具有离散动作空间的环境中提取规范对象)。对于本例,将动作空间定义为由三个可能值(命名为753.在这种情况下)。

actInfo=rlFiniteSetSpec([7 5 3]);

创建一个深度神经网络逼近器来逼近批评家中的Q值函数。网络的输入(这里称为myobs)必须接受四个元素的向量,如obsInfo.输出必须是单个输出层,其具有与可能的离散动作的数量一样多的元素(在这种情况下三个定义)Actinfo.).

网= [featureInputLayer (4'正常化'“没有”“名字”“myobs”)全康连接层(3,“名字”“价值”)];

使用网络、观察规范对象和网络输入层的名称创建批评家。

评论家= rlQValueRepresentation(净、obsInfo actInfo,“观察”,{“myobs”})
critic=rlQValueRepresentation with properties:ActionInfo:[1x1 rl.util.rlFiniteSetSpec]ObservationInfo:[1x1 rl.util.rlNumericSpec]选项:[1x1 rl.option.rlRepresentationOptions]

要检查你的批评家,使用GetValue.函数返回使用当前网络权重的随机观测值。这三种可能的操作都有一个值。

v=getValue(批评家,{rand(4,1)})
v =3x1单列向量0.7232 0.8177 -0.2212

您现在可以使用评论家(以及演员)来创建一个离散的动作空间代理,依赖于Q值函数评论家(例如rlQAgentrlDQNAgent,或萨金特代理)。

创建一个有限集观察规范对象(或者使用获取观测信息从具有离散观测空间的环境中提取规范对象)。对于本例,将观测空间定义为具有4个可能值的有限集。

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

创建一个有限设定的动作规格对象(或可选使用)getActionInfo从具有离散操作空间的环境中提取规范对象)。在这个例子中,将动作空间定义为具有2个可能值的有限集。

actInfo=rlFiniteSetSpec([4 8]);

创建一个表以近似批评者内的价值函数。rlTable从观察和操作规范对象创建值表对象。

QTable = RLTable(ObsInfo,Actinfo);

该表存储每个可能的观察操作对的值(表示预期的累积长期奖励)。每行对应于观察,并且每列对应于动作。您可以使用使用的表格访问该表桌子财产vtable.对象。每个元素的初始值为零。

qTable.表格
ans=4×20 0 0 0 0 0 0 0

您可以将该表初始化为任何值,在本例中为包含1通过8

qTable.Table=重塑(1:8,4,2)
qTable = rlTable with properties: Table: [4x2 double]

使用该表以及观察和行动规范对象创建批评家。

批评家=rlQValueRepresentation(qTable、obsInfo、actInfo)
critic=rlQValueRepresentation with properties:ActionInfo:[1x1 rl.util.rlFiniteSetSpec]观测信息:[1x1 rl.util.rlFiniteSetSpec]选项:[1x1 rl.option.rlRepresentationOptions]

要检查你的批评家,使用GetValue.函数使用当前表项返回给定观察和操作的值。

v = getValue(评论家,{5},{8})
v = 6

现在,您可以使用评论家(以及一个演员)来创建一个依赖于q值函数评论家(例如rlQAgentrlDQNAgent,或萨金特代理)。

创建观察规范对象(或者使用获取观测信息从环境中提取规范对象)。对于该示例,将观察空间定义为连续的四维空间,因此单个观察是包含3个双打的列向量。

obsInfo=rlNumericSpec([3 1]);

创建操作规范对象(或者使用getActionInfo从环境中提取规范对象)。对于本例,将动作空间定义为连续的二维空间,以便单个动作是包含2个双精度的列向量。

actInfo=rlNumericSpec([21]);

创建自定义基础函数以近似批评者内的价值函数。自定义基函数必须返回列向量。每个矢量元素必须是分别定义的观测和动作的函数obsInfoActinfo.

mybasisfcn = @(myobs,myact)[myobs(2)^ 2;Myobs(1)+ exp(ydact(1));ABS(yryact(2));Myobs(3)]
myBasisFcn =function_handle与价值:@ (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)
批评家= rlQValueRepresentation with properties:ObservationInfo: [1×1 rl.util.]rlNumericSpec] Options: [1×1 rl.option.rlRepresentationOptions]

要检查你的批评家,使用GetValue.函数使用当前参数向量返回给定观察-操作对的值。

v = getValue(批评家,{[1 2 3]'},{[4 5]'})
v = 1×1 dlarray 252.3926

现在,您可以使用批评家(以及演员)创建依赖于Q值函数批评家(例如rlQAgentrlDQNAgent萨金特,或rlDDPGAgent代理)。

此示例显示如何使用自定义基本函数近似模拟创建多输出Q值功能批评批评批评。

此评论家仅将观察视为输入,并将输出作为可能的动作的传输作为输出矢量。当代理从给定的观察开始时,每个元素表示预期的累积长期奖励,并且采用对应于输出向量中的元素的位置的动作。

创建观察规范对象(或者使用获取观测信息从环境中提取规范对象)。在本例中,将观测空间定义为连续的四维空间,因此单个观测是包含2个双精度的列向量。

obsInfo=rlNumericSpec([2 1]);

创建一个有限设定的动作规格对象(或可选使用)getActionInfo从具有离散操作空间的环境中提取规范对象)。对于本例,将操作空间定义为一个有限集,包含3个可能的值(命名为753.在这种情况下)。

actInfo=rlFiniteSetSpec([7 5 3]);

创建自定义基础函数以近似批评者内的价值函数。自定义基函数必须返回列向量。每个向量元素必须是所定义的观察的函数obsInfo

myobs = @(myobs) [myobs(2)^2;myobs (1);exp (myobs (2));abs (myobs (1)))
myBasisFcn =function_handle与价值:@ (myobs) [myobs (2) ^ 2; myobs (1); exp (myobs (2)); abs (myobs (1)))

评论家的输出是矢量c= w'* mybasisfcn(myobs), 在哪里W是一个权值矩阵,它必须具有与基函数输出长度相同的行数,与可能的操作数量相同的列数。

c中的每一个元素都是agent从给定的观察开始并采取与所考虑元素位置相对应的动作时所期望的累积长期报酬。W的元素是可学习的参数。

定义初始参数矩阵。

W0=兰特(4,3);

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

critic=rlQValueRepresentation({myBasisFcn,W0},obsInfo,actInfo)
critic=rlQValueRepresentation with properties:ActionInfo:[1x1 rl.util.rlFiniteSetSpec]ObservationInfo:[1x1 rl.util.rlNumericSpec]选项:[1x1 rl.option.rlRepresentationOptions]

要检查你的批评家,使用GetValue.函数使用当前参数矩阵返回随机观测值。请注意,三种可能的操作各有一个值。

v = getValue(评论家,{rand(2,1)})
V = 3x1 dlarray 2.1395 1.2183 2.3342

您现在可以使用评论家(以及演员)来创建一个离散的动作空间代理,依赖于Q值函数评论家(例如rlQAgentrlDQNAgent,或萨金特代理)。

创建环境并获取观察和行动信息。

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

为您的评论家创建一个经常性的深神经网络。要创建经常性的神经网络,请使用asequenceInputLayer作为输入层,并至少包括一个lstmlayer.

创建用于多输出q值函数表示的递归神经网络。

临界网络=[sequenceInputLayer(numObs,'正常化'“没有”“名字”“国家”) fullyConnectedLayer (50,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticRelu1”)第1层(20,'OutputMode'“序列”“名字”“CriticLSTM”);完全连接层(20,“名字”“CriticStateFC2”) reluLayer (“名字”'transrelu2')完全连接层(numDiscreteAct,“名字”“输出”)];

使用递归神经网络为您的批评者创建一个表示。

临界点=rlRepresentationOptions(“LearnRate”1 e - 3,“梯度阈值”,1);评论家= rlqvalueerepresentation(批评,undernfo,Actinfo,...“观察”“国家”,批评);
在R2020a中引入