主要内容

rlValueRepresentation

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

描述

该对象实现了一个值函数近似剂,以在加强学习代理中用作批评者。值函数是将观察到标量值映射的函数。输出代表代理从给定观察开始时的预期总长期奖励,并采取最佳动作。因此,价值函数批评只需要观察(但不是动作)作为输入。创建一个rlValueRepresentation批评家,使用它创建依赖于值函数批评家的代理,例如拉卡金特,rlPGAgentRLP发泡剂。有关此工作流的示例,请参阅创建演员和批评者表示。有关创建表达的详细信息,请参见创建策略和值函数表示.

创造

描述

实例

批评家=rlValueRepresentation(,观测信息","观察",,obsName)创建基于属性的值函数批评家从深层神经网络。此语法设置观察税收性质批评家输入观测信息.obsName必须包含的输入层的名称.

实例

批评家=rlValueRepresentation(标签,观测信息)创建基于属性的值函数批评家用一个离散观测空间,来自价值表标签,这是一个rlTable对象,该对象包含具有尽可能多的元素的列数组观察税收性质批评家输入观测信息.

实例

批评家= rlvaluerepresentation({基础FCN.,W0},观测信息)创建基于属性的值函数批评家使用自定义基函数作为基础逼近器。第一个输入参数是两个元素的单元格,其中第一个元素包含句柄基础FCN.对于自定义基函数,第二个元素包含初始权重向量W0。此语法设置观察税收性质批评家输入观测信息.

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

输入参数

全部展开

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

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

rlValueRepresentation对象支持递归深层金宝app神经网络。

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

观察名称,指定为字符串或字符向量的单元格数组。观察名称必须是中输入层的名称。这些网络层必须与中定义的信号具有相同的顺序、数据类型和尺寸观察税收.

例子:{'my_obs'}

值表,指定为rlTable包含长度等于观察数的列向量的对象。元素是代理从给定观察开始时的预期累积长期回报s该向量的元素是表示的可学习参数。

自定义基函数,指定为用户定义函数的函数句柄。用户定义函数可以是匿名函数,也可以是MATLAB路径上的函数。批评家的输出为c=W'*B哪里W是重量矢量和B是自定义基函数返回的列向量。C是当代理从给定的观察开始并采取可能的最佳行动时的预期累积长期回报。此表示的可学习参数是W.

创建值函数批评家表示时,基函数必须具有以下签名。

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

在这里obs1obsn.观测值的顺序、数据类型和尺寸是否与中定义的信号相同观察税收.

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

基础函数权重的初始值,W,指定为与基函数返回的向量具有相同长度的列向量。

性质

全部展开

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

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

rlValueRepresentation设定观察税收性质批评家输入观测信息.

你可以提取观察税收从现有环境或代理使用获取观测信息.您还可以手动构建规范。

目标函数

拉卡金特 演员-评论家强化学习代理
rlPGAgent 策略梯度强化学习代理
RLP发泡剂 最近策略优化强化学习代理
getValue 获得估计值函数表示

例子

全部崩溃

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

obsInfo=rlNumericSpec([4 1]);

创建一个深度神经网络来逼近批评家中的值函数。网络的输入(此处称为肌瘤)必须接受四元素向量(由定义的观察向量obsInfo),输出必须是标量(值,表示代理从给定观察开始时的预期累积长期奖励)。

net=[featureInputLayer(4,“正常化”,“没有”,“姓名”,“肌瘤”)完全连接层(1,“姓名”,“价值”)];

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

批评家=rlValueRepresentation(净、obsInfo、,“观察”,{“肌瘤”})
critic=rlValueRepresentation with properties:ObservationInfo:[1x1 rl.util.rlNumericSpec]选项:[1x1 rl.option.rlRepresentationOptions]

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

v=getValue(批评家,{rand(4,1)})
五=仅有一个的0.7904

现在,您可以使用批评家(以及参与者)来创建依赖于值函数批评家(例如拉卡金特rlPGAgent).

创建可用于定义强化学习代理(如演员-评论家(AC)代理)的演员表示和评论家表示。

对于本例,请为可以针对中所述的cart-pole环境进行培训的代理创建参与者和评论家表示火车AC代理以平衡车杆系统。首先,创建环境。然后,从环境中提取观察和操作规范。您需要这些规范来定义代理和批评家表示。

env=rlPredefinedEnv(“CartPole离散型”);obsInfo=getObservationInfo(env);actInfo=getActionInfo(env);

对于AC或PG代理使用的状态值函数批评家,输入是观察值,输出应该是标量值,即状态值。例如,使用深度神经网络创建批评家表示,其中一个输出,观察信号对应于x,xdot,西塔Thetadot.如中所述火车AC代理以平衡车杆系统。你可以从obsInfo规格。命名网络层输入“观察”.

numobservation = Obsinfo.dimension(1);批评网络= [FeatureInputLayer(numobservation,“正常化”,“没有”,“姓名”,“观察”)完全连接层(1,“姓名”,“临界CFC”)];

使用指定批评家表示的选项rlRepresentationOptions. 这些选项控制网络参数的学习。对于本例,将学习速率设置为0.05,将渐变阈值设置为1。

repOpts=rlRepresentationOptions(“LearnRate”,5e-2,“梯度阈值”,1);

使用指定的神经网络和选项创建批评家表示。此外,指定批评家的操作和观察信息。将观察名称设置为“观察”,这是临界网络输入层。

critic=rlValueRepresentation(关键网络、obsInfo、,“观察”,{“观察”},报告)
critic=rlValueRepresentation with properties:ObservationInfo:[1x1 rl.util.rlNumericSpec]选项:[1x1 rl.option.rlRepresentationOptions]

类似地,为参与者创建一个网络。AC代理使用参与者表示法决定采取给定观察值的动作。对于参与者,输入是观察值,输出取决于动作空间是离散的还是连续的。对于本例中的参与者,有两种可能的离散动作–10或10到cr对于参与者,使用一个深度神经网络,该网络具有与批评家相同的观察输入,可以输出这两个值肌动蛋白规范。命名输出“行动”.

numAction=numel(actInfo.Elements);actorNetwork=[featureInputLayer(numObservation,“正常化”,“没有”,“姓名”,“观察”)完全连接层(numAction,“姓名”,“行动”)];

使用观察名称和规范以及相同的表示选项创建参与者表示。

actor=rl随机性actor表示(actorNetwork、obsInfo、actInfo、,...“观察”,{“观察”},报告)
actor=rlStochasticActorRepresentation with properties:ActionInfo:[1x1 rl.util.rlFiniteSetSpec]ObservationInfo:[1x1 rl.util.rlNumericSpec]选项:[1x1 rl.option.rlRepresentationOptions]

使用actor和Critical表示创建AC代理。

agentOpts=rlACAgentOptions(...“NumStepsToLookAhead”,32,...“折扣演员”,0.99);代理=rlACAgent(演员、评论家、代理)
代理=具有属性的rlacagent:agentoptions:[1x1 rl.option.rlacagentoptions]

有关显示如何为不同代理类型创建参与者和评论家表示的其他示例,请参见:

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

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

创建一个表,以近似于批评家中的值函数。

vTable=rlTable(obsInfo);

该表是一个列向量,其中每个条目存储每个可能观察的预期累积长期回报,如obsInfo。您可以使用桌子财产的财产易变的对象。每个元素的初始值为零。

vTable.表格
ans=4×10 0 0 0

您还可以将表初始化为任何值,在本例中是一个数组,其中包含来自的所有整数1.4..

vTable.Table=重塑(1:4,4,1)
vTable=rlTable,带属性:Table:[4x1双精度]

使用表和观察规范对象创建批评家。

评论家=rlValueRepresentation(vTable,obsInfo)
critic=rlValueRepresentation with properties:ObservationInfo:[1x1 rl.util.rlFiniteSetSpec]选项:[1x1 rl.option.rlRepresentationOptions]

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

v=getValue(批评家,{7})
v=4

现在,您可以使用批评家(以及参与者)来创建依赖于值函数批评家(例如拉卡金特rlPGAgent代理人).

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

obsInfo=rlNumericSpec([4 1]);

创建一个自定义基函数以近似于批评家中的值函数。自定义基函数必须返回一个列向量。每个向量元素必须是由定义的观察值的函数obsInfo.

MyBasisCfCn=@(myobs)[myobs(2)^2;myobs(3)+exp(myobs(1));abs(myobs(4))]
myBasisFcn=函数\带有值的句柄:@(肌瘤)[肌瘤(2)^2;肌瘤(3)+exp(肌瘤(1));abs(肌瘤(4))]

批评家的输出是标量w'* mybasisfcn(myobs)哪里W是一个权重列向量,其大小必须与自定义基函数输出的大小相同。此输出是代理从给定观察开始并采取最佳可能行动时的预期累积长期回报。W的元素是可学习的参数。

定义初始参数向量。

W0=[3;5;2];

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

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

要检查您的批评者,请使用getValue函数使用当前参数向量返回给定观测值。

v=getValue(批评家,{[2 4 6 8]'})
v = 1x1 dlarray 130.9453

现在,您可以使用评论家(以及演员)创建依赖于值函数批评家(例如拉卡金特rlPGAgent).

创造环境,获取观察和行动信息。

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

为批评家创建递归深层神经网络。要创建递归神经网络,请使用序列输入层作为输入层并包括至少一个第一层.

临界网络=[sequenceInputLayer(numObs,“正常化”,“没有”,“姓名”,“国家”)全连接列(8,“姓名”,“fc”)雷卢耶(“姓名”,“雷卢”)第1层(8,“输出模式”,“顺序”,“姓名”,“lstm”)完全连接层(1,“姓名”,“输出”)];

为批评家创建值函数表示对象。

临界点=rlRepresentationOptions(“LearnRate”,1e-2,“梯度阈值”,1);评论家=rlValueRepresentation(关键网络,obsInfo,...“观察”,“国家”,批评);
在R2020a中引入