主要内容

rlValueRepresentation

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

描述

该对象实现了一个值函数近似器,用于强化学习代理内的评价。值函数是将观测值映射到标量值的函数。输出表示当代理从给定的观察开始并采取可能的最佳行动时,所期望的总长期回报。因此,价值功能评论家只需要观察(而不是行动)作为输入。在创建rlValueRepresentation批评者,用它来创建依赖价值函数评论家的代理人,例如rlACAgentrlPGAgent,或rlppoagent..有关此工作流程的示例,请参阅创造演员和评论家代表.有关创建表示的更多信息,请参见创建策略和价值功能表示

创建

描述

例子

评论家= rlvaluerepresentation(observationInfo“观察”,obsName创建基于的值函数评论家从深度神经网络.此语法设置了ObservationInfo财产评论家输入observationInfoobsName的输入层的名称

例子

评论家= rlvaluerepresentation(选项卡observationInfo创建基于的值函数评论家与一个离散观测空间,从值表选项卡,这是一个rlTable包含列数组的对象,具有尽可能多的元素作为可能的观察。此语法设置了ObservationInfo财产评论家输入observationInfo

例子

评论家= rlValueRepresentation ({basisFcnW0},observationInfo创建基于的值函数评论家使用自定义基函数作为底层近似器。第一个输入参数是一个双元素单元,其中第一个元素包含句柄basisFcn到自定义基本函数,第二个元素包含初始权重向量W0.此语法设置了ObservationInfo财产评论家输入observationInfo

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

输入参数

全部展开

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

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

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

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

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

例子:{'my_obs'}

值表,指定为rlTable包含具有长度等于观察次数的列向量的对象。元素一世当代理从给定的观察开始时,预期的累积长期报酬是多少S.并采取最好的行动。这个向量的元素是表示的可学习参数。

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

当创建一个价值功能评估表示时,您的基本功能必须具有以下签名。

B = myBasisFunction (obsN obs1, obs2,…)

这里obs1obsN观测是否与中定义的信号具有相同的顺序、相同的数据类型和维度ObservationInfo

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

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

属性

全部展开

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

观察规范,指定为rlFiniteSetSpecrlnumericspec.对象或包含这些对象的混合的数组。这些对象定义了观察信号的尺寸,数据类型和名称等属性。

rlValueRepresentation设置ObservationInfo财产评论家输入observationInfo

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

对象功能

rlACAgent 演员 - 评论家强化学习代理
rlPGAgent 政策梯度强化学习代理
rlppoagent. 近端政策优化强化学习代理
getValue 获得估计值函数表示

例子

全部收缩

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

obsInfo = rlNumericSpec([4 1]);

创建一个深度神经网络来近似批评家内部的价值函数。网络的输入(这里称为myobs)必须接受一个四元向量(由obsinfo.),输出必须是标量(值,表示代理从给定的观察开始时的预期累积长期回报)。

网= [featureInputLayer (4“归一化”'没有任何''名称'“myobs”) fullyConnectedLayer (1,'名称'“价值”));

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

评论家= rlValueRepresentation (obsInfo净,“观察”,{“myobs”})
comment = rlvaluerpresentation with properties: ObservationInfo: [1x1 rl.util.]rlNumericSpec选项:[1x1 rl.option.rlRepresentationOptions]

检查评论家,使用getValue使用当前网络权重返回随机观察值的功能。

v = getValue(评论家,{rand(4,1)})
v =0.7904

现在可以使用评论家(以及参与者)来创建依赖于价值功能评论家的代理(例如rlACAgentrlPGAgent)。

创建一个参与者表示和一个评论家表示,您可以使用它们来定义一个强化学习代理,比如参与者评论家(AC)代理。

对于本例,为一个代理创建参与者和批评者表示,该代理可以根据本文中描述的cart-pole环境进行训练训练空调代理人平衡车杆系统.首先,创造环境。然后,从环境中提取观察和行动规范。您需要这些规范来定义代理和评论家表示。

Env = Rlpredefinedenv(“CartPole-Discrete”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

对于诸如用于AC或PG代理的诸如此类的状态值 - 功能评论,输入是观察,输出应该是标量值,状态值。为此示例,使用一个输出的深神经网络创建批评批评批评表示,并且观察信号对应Xxdotθ.,thetadot中描述的训练空调代理人平衡车杆系统.您可以从中获得观察数obsinfo.规范。命名网络层输入“观察”

numObservation = obsInfo.Dimension (1);criticNetwork = [featureInputLayer(numobation,“归一化”'没有任何''名称'“观察”) fullyConnectedLayer (1,'名称''批评'));

指定使用批评者的选项rlrepresentationOptions..这些选项控制关键网络参数的学习。在本例中,学习率设置为0.05,梯度阈值设置为1。

Repopts = rlrepresentationOptions('学习'5飞行,'gradientthreshold'1);

使用指定的神经网络和选项创建批读表示。此外,指定评论家的行动和观察信息。将观察名称设置为“观察”,这是其中的批判性输入层。

评论家= rlValueRepresentation (criticNetwork obsInfo,“观察”,{“观察”}, repOpts)
comment = rlvaluerpresentation with properties: ObservationInfo: [1x1 rl.util.]rlNumericSpec选项:[1x1 rl.option.rlRepresentationOptions]

类似地,为参与者创建一个网络。AC代理使用参与者表示来决定对给定的观察结果采取什么操作。对于行动者来说,输入是观察值,输出取决于动作空间是离散的还是连续的。对于本例中的参与者,有两个可能的离散动作,-10或10。要创建演员,使用与评论家相同的观察输入的深度神经网络,它可以输出这两个值。的操作数actInfo规范。名字的输出'行动'

numAction =元素个数(actInfo.Elements);actorNetwork = [featureInputLayer(numobation,“归一化”'没有任何''名称'“观察”)全连接列(数量,'名称''行动'));

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

演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,...“观察”,{“观察”}, repOpts)
actor = rlStochasticActorRepresentation with properties:rlFiniteSetSpec: [1x1 rl.util.]rlnumericspec.] Options: [1x1 rl.option.rlRepresentationOptions]

使用参与者和批评者表示创建AC代理。

代理= rlacagentoptions(...“NumStepsToLookAhead”32岁的...“DiscountFactor”,0.99);代理= rlacagent(演员,评论家,代理商)
agent = rlACAgent with properties: AgentOptions: [1x1 rl.option.rlACAgentOptions]

有关如何为不同的代理类型创建actor和critic表示的其他示例,请参见:

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

Obsinfo = rlfinitesetspec([1 3 5 7]);

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

vTable = rlTable (obsInfo);

该表是列向量,其中每个条目存储所定义的每个可能观察的预期累积长期奖励obsinfo..您可以使用使用的表格访问该表表格财产的虚表对象。每个元素的初始值都是零。

vtable.table.
ans =.4×10 0 0 0

您还可以将表初始化为任何值,在这种情况下,包含所有整数的数组14.

vtable.table.= reshape(1:4,4,1)
VTABLE =具有属性的RLTable:表:[4x1双]

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

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

检查评论家,使用getValue函数使用当前表项返回给定观察值。

{7} v = getValue(批评)
v = 4.

现在可以使用评论家(以及参与者)来创建依赖于价值功能评论家的代理(例如rlACAgentrlPGAgent代理)。

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

obsInfo = rlNumericSpec([4 1]);

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

mybasisfcn = @(myobs)[myobs(2)^ 2;Myobs(3)+ exp(myobs(1));ABS(Myobs(4))]
mybasisfcn =function_handle与价值:@(myobs)[myobs(2)^ 2; myobs(3)+ exp(myobs(1)); abs(myobs(4))]

评论家的产出是标量W ' * myBasisFcn (myobs),在那里W.是一个权重列向量,它必须具有与自定义基函数输出相同的大小。该输出是代理从给定的观察开始并采取最佳行动时的预期累积长期回报。W的元素是可学习的参数。

定义一个初始参数向量。

W0 =(3。5;2);

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

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

检查评论家,使用getValue函数使用当前参数向量返回给定观测值。

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

您现在可以使用评论家(以及一个参与者)来创建依赖于价值功能评论家的代理(例如rlACAgentrlPGAgent)。

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

Env = Rlpredefinedenv('cartpole  - 离散');obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);numObs = obsInfo.Dimension (1);numDiscreteAct =元素个数(actInfo.Elements);

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

criticNetwork = [sequenceInputLayer(nummobs,“归一化”'没有任何''名称'“状态”) fullyConnectedLayer (8,'名称'“俱乐部”)剥离('名称'“relu”)LSTMLAYER(8,“OutputMode”'顺序''名称'“lstm”) fullyConnectedLayer (1,'名称''输出'));

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

criticOptions = rlRepresentationOptions ('学习'1飞行,'gradientthreshold'1);评论家= rlValueRepresentation (criticNetwork obsInfo,...“观察”“状态”,批评);
在R2020A中介​​绍