主要内容

rlQValueRepresentation

强化学习agent的Q值函数批评表示

描述

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

创建

描述

标量输出q值批评家

实例

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

实例

评论家= rlQValueRepresentation (选项卡,observationInfo,actionInfo)创建基于q值的函数评论家具有离散的行动和观察空间从q值表选项卡选项卡是一个rlTable对象,该对象包含一个表,其中包含尽可能多的行和尽可能多的列和可能的操作。该语法设置ObservationInfoActionInfo的属性评论家分别输入observationInfoactionInfo,这一定是rlFiniteSetSpec分别包含离散观察和行动空间的规范的对象。

实例

评论家= rlQValueRepresentation ({basisFcn,W0},observationInfo,actionInfo)创建基于属性的Q值函数评论家使用自定义基函数作为底层逼近器。第一个输入参数是一个包含两个元素的单元格,其中第一个元素包含句柄basisFcn到自定义基函数,第二个元素包含初始权值向量W0.在这里,基本函数必须既有观测值又有作为输入的动作W0必须是一个列向量。该语法设置ObservationInfoActionInfo的属性评论家分别输入observationInfoactionInfo

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

实例

评论家= rlQValueRepresentation (,observationInfo,actionInfo“观察”,obsName)创造多输出核反应能量函数评论家对于离散的动作空间是用作近似器的深度神经网络,必须仅将观测值作为输入,且单个输出层具有尽可能多的元素(尽可能多的离散动作)。此语法设置ObservationInfoActionInfo的属性评论家分别输入observationInfoactionInfo,包括观察和行动规范。在这里,actionInfo必须是一个rlFiniteSetSpec对象,该对象包含离散动作空间的规范。观察的名字obsName的输入层的名称

实例

评论家= rlQValueRepresentation ({basisFcn,W0},observationInfo,actionInfo)创造多输出核反应能量函数评论家对于离散的动作空间使用自定义基函数作为底层逼近器。第一个输入参数是一个包含两个元素的单元格,其中第一个元素包含句柄basisFcn为自定义基函数,第二个元素包含初始权矩阵W0.这里的基函数必须只有观测值作为输入W0必须有尽可能多的列可能的行动的数量。该语法设置ObservationInfoActionInfo的属性评论家分别输入observationInfoactionInfo

选项

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

输入参数

全部展开

深度神经网络用作批评家内部的底层近似器,指定为以下其中之一:

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

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

网络输出层必须具有与中定义的信号相同的数据类型和维数ActionInfo。其名称必须是中指定的操作名称演员名

rlQValueRepresentation对象支持多输出离金宝app散动作空间批评家的递归深度神经网络。

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

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

例子:{' my_obs '}

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

例子:{' my_act '}

q值表,指定为rlTable对象,该对象包含一个数组,该数组具有尽可能多的行和列。元素(s,A.)是采取行动的预期累积的长期回报A.从观察到的状态s.这个数组的元素是批评家的可学习参数。

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

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

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

对于具有离散作用空间的多输出q值批评家,C是一个向量,其中每个元素是agent从给定的观察开始并采取与所考虑元素的位置相对应的动作时的预期累积长期奖励。在这种情况下,基函数必须具有以下签名。

B = myBasisFunction (obsN obs1, obs2,…)

在这里,obs1obsN观测是否与中定义的信号具有相同的顺序、相同的数据类型和维度observationInfo行为与中的操作规范具有相同的数据类型和维度actionInfo

例子:@ (obs1 obs2, act)[行为(2)* obs1 (1) ^ 2;abs (obs2(5) +法案(1)))

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

属性

全部展开

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

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

rlQValueRepresentation设置ObservationInfo性质评论家输入observationInfo

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

动作规格,指定为rlFiniteSetSpecrlNumericSpec对象。这些对象定义属性,如维度、数据类型和动作信号的名称。

rlQValueRepresentation设置ActionInfo性质评论家输入actionInfo

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

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

目标函数

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

例子

全部折叠

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

obsInfo = rlNumericSpec([4 1]);

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

actInfo = rlNumericSpec([2 1]);

建立一个深度神经网络来近似q值函数。网络必须有两个输入,一个用于观察,一个用于动作。观察输入(这里称为myobs)必须接受一个四元向量(由obsInfo).操作输入(这里称为myact)必须接受两元素向量(由定义的动作向量actInfo)。网络的输出必须是标量,表示代理从给定的观察开始并采取给定的操作时的预期累积长期回报。

观测路径层数百分比obsPath = [featureInputLayer (4“归一化”,“没有”,“姓名”,“myobs”) fullyConnectedLayer (1,“姓名”,“obsout”));%动作路径层actPath = [featureInputLayer (2,“归一化”,“没有”,“姓名”,“myact”) fullyConnectedLayer (1,“姓名”,“actout”));%输出层的公共路径comPath = [additionLayer (2,“姓名”,“添加”) fullyConnectedLayer (1,“姓名”,“输出”));给网络对象添加层net=addLayers(layerGraph(obsPath),actPath);net=addLayers(net,comPath);%连接层净=连接层(净,“obsout”,“添加/三机一体”);净=连接层(净,“actout”,“添加/ in2”);%的阴谋网络情节(净)

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

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

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

要检查您的批评者,请使用getValue函数返回使用当前网络权重的随机观察和动作的值。

v = getValue(评论家,{兰德(4,1)},{兰德(2,1)})
v =0.1102

您现在可以使用批评家(以及一个参与者)来创建依赖于q值函数批评家的代理(例如rlQAgent,rlDQNAgent,萨金特,或rlDDPGAgent代理)。

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

这个批评家只将观察结果作为输入,并生成带有尽可能多的操作元素的向量作为输出。当代理从给定的观察开始并采取与输出向量中元素位置相对应的操作时,每个元素表示预期的累积长期奖励。

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

obsInfo = rlNumericSpec([4 1]);

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

actInfo = rlFiniteSetSpec([7 5 3]);

创建一个深度神经网络近似器来近似批评家内部的q值函数。网络的输入(这里称为myobs)必须接受由定义的四元素向量obsInfo.输出必须是具有尽可能多的可能的离散操作的元素的单个输出层(在本例中为三个,定义为actInfo).

网= [featureInputLayer (4“归一化”,“没有”,“姓名”,“myobs”) fullyConnectedLayer (3“姓名”,“价值”));

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

批评家=rlQValueRepresentation(网络、obsInfo、actInfo、,“观察”, {“myobs”})
批评家= rlQValueRepresentation与属性:ActionInfo: [1x1 rl.util.]。rlFiniteSetSpec: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要检查您的批评者,请使用getValue函数使用当前网络权重返回随机观测值。三种可能的操作各有一个值。

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

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

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

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

创建有限集动作规范对象(或者使用getActionInfo从具有离散动作空间的环境中提取规范对象)。对于本例,将动作空间定义为具有2个可能值的有限集。

actInfo = rlFiniteSetSpec([4 8]);

创建一个表来近似批评家中的值函数。rlTable从观察和操作规范对象创建值表对象。

qTable = rlTable (obsInfo actInfo);

该表为每个可能的观察-操作对存储一个值(表示预期的累积长期奖励)。每一行对应一个观察,每一列对应一个操作。可以使用表格财产的虚表对象。每个元素的初始值都是零。

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

可以将表初始化为任意值,在本例中是一个包含from的整数的数组1.通过8.

qTable.Table =重塑(1:8 4 2)
qTable=rlTable,带属性:Table:[4x2双精度]

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

评论家= rlQValueRepresentation (qTable obsInfo actInfo)
批评家= rlQValueRepresentation与属性:ActionInfo: [1x1 rl.util.]。rlFiniteSetSpec: [1x1 rl.util.]rlFiniteSetSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要检查您的批评者,请使用getValue函数使用当前表项返回给定观察和操作的值。

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

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

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

obsInfo = rlNumericSpec([3 1]);

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

actInfo = rlNumericSpec([2 1]);

创建一个自定义的基础函数来近似批评家的价值函数。自定义基函数必须返回一个列向量。每个向量元素必须是分别定义的观察和动作的函数obsInfoactInfo

myobs = @(myobs,myact) [myobs(2)^2;myobs (1) + exp (myact (1));abs (myact (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];

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

评论家= 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美元252.3926

您现在可以使用批评家(以及一个参与者)来创建依赖于q值函数批评家的代理(例如rlQAgent,rlDQNAgent,萨金特,或rlDDPGAgent代理)。

这个例子展示了如何使用自定义基函数近似器为离散动作空间创建一个多输出q值函数批评家。

这个批评家只将观察结果作为输入,并生成带有尽可能多的操作元素的向量作为输出。当代理从给定的观察开始并采取与输出向量中元素位置相对应的操作时,每个元素表示预期的累积长期奖励。

创建一个观察规范对象(或者使用getObservationInfo从环境中提取规范对象)。例如,将观察空间定义为连续的四维空间,以便单个观察是包含2个双精度的列向量。

obsInfo = rlNumericSpec([2 1]);

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

actInfo = rlFiniteSetSpec([7 5 3]);

创建一个自定义的基础函数来近似批评家的价值函数。自定义基函数必须返回一个列向量。每个向量元素必须是观测值的函数obsInfo

MyBasisCfCn=@(myobs)[myobs(2)^2;myobs(1);exp(myobs(2));abs(myobs(1))]
myBasisFcn=function_handle与价值:@(肌瘤)[肌瘤(2)^2;肌瘤(1);实验(肌瘤(2));abs(肌瘤(1))]

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

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

定义一个初始参数矩阵。

W0 =兰德(4,3);

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

评论家= rlQValueRepresentation ({myBasisFcn, W0}, obsInfo actInfo)
批评家= rlQValueRepresentation与属性:ActionInfo: [1x1 rl.util.]。rlFiniteSetSpec: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要检查您的批评者,请使用getValue函数使用当前参数矩阵返回随机观测值。注意,这三种可能的操作都有一个值。

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

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

创造一个环境,并获得观察和行动信息。

env=rlPredefinedEnv(“CartPole离散型”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);numObs = obsInfo.Dimension (1);numDiscreteAct =元素个数(actInfo.Elements);

为你的批评者创建一个循环的深层神经网络。要创建递归神经网络,请使用sequenceInputLayer作为输入层,并包含至少一个lstmLayer

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

criticNetwork = [sequenceInputLayer(nummobs,“归一化”,“没有”,“姓名”,“状态”)完全连接层(50,“姓名”,“CriticStateFC1”)雷卢耶(“姓名”,“CriticRelu1”) lstmLayer (20“OutputMode”,“顺序”,“姓名”,“CriticLSTM”);fullyConnectedLayer (20,“姓名”,“CriticStateFC2”)雷卢耶(“姓名”,“CriticRelu2”) fullyConnectedLayer (numDiscreteAct“姓名”,“输出”));

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

criticOptions = rlRepresentationOptions (“LearnRate”1 e - 3,“GradientThreshold”1);评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,...“观察”,“状态”, criticOptions);
介绍了R2020a