主要内容

rlValueRepresentation

(不推荐)值函数强化学习代理评论家表示

rlValueRepresentation不推荐。使用rlValueFunction代替。有关更多信息,请参见rlValueRepresentation不推荐

描述

对象实现了价值函数的估计值作为一个评论家在强化学习代理。函数是一个函数映射一个观测值为一个标量值。输出代表预期的总长期奖励当代理开始从给定的观察和采取最好的措施。价值函数批评家因此只需要观察(但不是行动)作为输入。当你创建一个rlValueRepresentation评论家,使用它来创建一个代理依靠价值函数评论家,如一个rlACAgent,rlPGAgent,或rlPPOAgent。这个工作流程的一个例子,看到创建演员和评论家表示。创建表示更多的信息,请参阅创建政策和价值功能

创建

描述

例子

评论家= rlValueRepresentation (,observationInfo“观察”,obsName)创建基于价值函数评论家从深层神经网络。这个语法设置ObservationInfo的属性评论家输入observationInfoobsName必须包含的输入层的名字吗

例子

评论家= rlValueRepresentation (选项卡,observationInfo)创建基于价值函数评论家与一个离散观测空间从表的价值选项卡,这是一个rlTable对象包含一个列数组和尽可能多的元素可能的观测。这个语法设置ObservationInfo的属性评论家输入observationInfo

例子

评论家= rlValueRepresentation ({basisFcn,W0},observationInfo)创建基于价值函数评论家使用一个自定义的基函数作为潜在的估计值。第一个输入参数是一个两个元素细胞中第一个元素包含了处理basisFcn一个自定义的基函数,第二个元素包含初始权向量W0。这个语法设置ObservationInfo的属性评论家输入observationInfo

评论家= rlValueRepresentation (___,选项)创建基于价值函数评论家使用额外的选项集选项,这是一个rlRepresentationOptions对象。这个语法设置选项的属性评论家选项输入参数。您可以使用该语法与任何以前的输入参数组合。

输入参数

全部展开

深层神经网络用作底层接近者在评论家,指定为以下之一:

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

rlValueRepresentation复发性深层神经网万博1manbetx络对象支持。

深层神经网络层的列表,请参阅深度学习层的列表。更多信息为强化学习创造深层神经网络,看到的创建政策和价值功能

观察名称指定为一个细胞或字符的字符串数组向量。观察名称必须输入层的名称。这些网络层必须在相同的顺序和使用相同的数据类型和维度中定义的信号ObservationInfo

例子:{' my_obs '}

值表,指定为一个rlTable对象包含一个列向量的长度等于观测的数量。的元素是预期的长期累积奖励当代理开始从给定的观察年代并以最好的行动。这个向量的元素的可学的参数表示。

自定义的基函数,指定为一个函数处理一个用户定义的函数。用户定义函数可以是一个匿名函数或一个函数在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 Actor-critic强化学习代理
rlPGAgent 政策梯度强化学习代理
rlPPOAgent 近端政策优化强化学习代理
getValue 获得估计价值从评论家给定环境的观察和行动

例子

全部折叠

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

obsInfo = rlNumericSpec (1 [4]);

创建一个深层神经网络近似函数值在评论家。网络的输入(这里称为myobs)必须接受一个研制出向量(观测向量定义的obsInfo),输出必须是一个标量(代表预期的价值,累积长期奖励当代理从给定的观察)。

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

使用网络,创建了评论家观测规范对象,网络输入层的名称。

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

检查你的评论家,使用getValue函数返回一个随机的值观察,使用当前的网络权值。

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

现在可以使用评论家(以及演员)创建一个代理依靠评论家(比如一个值函数rlACAgentrlPGAgent)。

创建一个演员表示和评论家表示,您可以用它来定义一个强化学习代理等演员评论家(AC)代理。

对于这个示例,创建演员和评论家表示为一个代理可以对cart-pole训练环境中描述培训交流代理Cart-Pole平衡系统。首先,创建环境。然后,从环境中提取观测和操作规范。你需要这些规范来定义代理和评论家表示。

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

等state-value-function批评那些用于AC或PG代理,输入是观察和输出应该是一个标量值,状态值。对于这个示例,创建评论家表示使用深神经网络和一个输出,并与观测信号对应x,xdot,θ,thetadot中描述的培训交流代理Cart-Pole平衡系统。您可以获得的观测数量obsInfo规范。网络层的输入名称“观察”

numObservation = obsInfo.Dimension (1);criticNetwork = [featureInputLayer numObservation,“归一化”,“没有”,“名字”,“观察”)fullyConnectedLayer (1,“名字”,“CriticFC”));

使用指定选项评论家表示rlRepresentationOptions。这些选项控制了评论家的学习网络参数。对于这个示例,将学习速率为0.05和梯度阈值为1。

repOpts = rlRepresentationOptions (“LearnRate”5飞行,“GradientThreshold”1);

创建一个使用指定的评论家表示神经网络和选项。同时,指定的操作和观察信息评论家。设置观测的名字“观察”的,也就是criticNetwork输入层。

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

类似地,创建一个网络的演员。AC代理决定哪些操作使用演员表示给定的观测。对于一个演员来说,输入的观察,和输出取决于空间是离散或连续的动作。演员的这个例子中,有两个可能的离散动作,-10年或10。创建演员,使用深度观察相同的神经网络输入的评论家,能够输出这两个值。您可以获得的行为的数量actInfo规范。名字的输出“行动”

numAction =元素个数(actInfo.Elements);actorNetwork = [featureInputLayer numObservation,“归一化”,“没有”,“名字”,“观察”)fullyConnectedLayer (numAction“名字”,“行动”));

使用观察创建演员表示名称和规格和相同的表示选项。

演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,“观察”,{“观察”},repOpts)
演员= rlStochasticActorRepresentation属性:ActionInfo: [1 x1 rl.util。rlFiniteSetSpec] ObservationInfo: [1 x1 rl.util。rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

创建一个AC代理使用演员和评论家表示。

agentOpts = rlACAgentOptions (“NumStepsToLookAhead”32岁的“DiscountFactor”,0.99);代理= rlACAgent(演员、评论家、agentOpts)
代理= rlACAgent属性:AgentOptions: [1 x1 rl.option.rlACAgentOptions]

额外的例子显示如何创建演员和评论家表示为不同的代理类型,见:

创建一个有限集观测规范对象(或者使用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属性:表:[4 x1双)

使用表格创建评论家和观测规范对象。

评论家= rlValueRepresentation (vTable obsInfo)
评论家= rlValueRepresentation属性:ObservationInfo: [1 x1 rl.util。rlFiniteSetSpec]选项:[1 x1 rl.option.rlRepresentationOptions]

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

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

现在可以使用评论家(以及演员)创建一个代理依靠评论家(比如一个值函数rlACAgentrlPGAgent代理)。

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

obsInfo = rlNumericSpec (1 [4]);

创建一个定制的基函数近似函数值在评论家。自定义基函数必须返回一个列向量。每个向量的元素必须是一个函数定义的观察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)
评论家= rlValueRepresentation属性:ObservationInfo: [1 x1 rl.util。rlNumericSpec]选项:[1 x1 rl.option.rlRepresentationOptions]

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

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

您现在可以使用评论家(以及一个演员)创建一个代理依靠评论家(比如一个值函数rlACAgentrlPGAgent)。

创建一个环境和获得观察和操作信息。

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

创建一个周期性的深层神经网络的评论家。创建一个递归神经网络,使用sequenceInputLayer作为输入层,包括至少一个lstmLayer

criticNetwork = [sequenceInputLayer numObs,“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (8,“名字”,“俱乐部”)reluLayer (“名字”,“relu”)lstmLayer (8,“OutputMode”,“序列”,“名字”,“lstm”)fullyConnectedLayer (1,“名字”,“输出”));

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

criticOptions = rlRepresentationOptions (“LearnRate”1飞行,“GradientThreshold”1);评论家= rlValueRepresentation (criticNetwork obsInfo,“观察”,“状态”,criticOptions);

版本历史

介绍了R2020a

全部展开

不推荐在R2022a开始