主要内容

rlValueRepresentation

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

rlValueRepresentation不推荐。使用rlValueFunction代替。有关更多信息,请参见不建议使用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对象支持循环深度万博1manbetx神经网络。

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

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

例子:{' my_obs '}

值表,指定为rlTable对象,该对象包含长度等于观察数的列向量。的元素当行为主体从给定的观察开始时,预期的累积长期回报是吗年代并采取最好的行动。这个向量的元素是表示的可学习参数。

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

在创建值函数临界表示时,基函数必须具有以下签名。

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

在这里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),输出必须是一个标量(值,表示代理从给定的观察开始时预期的累积长期奖励)。

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

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

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

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

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

现在,您可以使用批评者(以及参与者)来创建依赖于价值函数批评者(例如rlACAgentrlPGAgent).

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

对于本例,为可以针对中描述的车极环境进行训练的代理创建参与者和批评家表示训练交流装置平衡车杆系统.首先,创造环境。然后,从环境中提取观察和行动规范。您需要这些规范来定义代理和批评家表示。

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

对于用于AC或PG代理的状态-值-函数临界器,输入是观察值,输出应该是标量值,即状态值。对于本例,使用具有一个输出的深度神经网络和与之对应的观察信号来创建批评家表示xxdotθ,thetadot如在训练交流装置平衡车杆系统.您可以从obsInfo规范。命名网络层输入“观察”

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

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

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

使用指定的神经网络和选项创建批评家表示。另外,指定批评家的行动和观察信息。设置观察名称为“观察”,是的criticNetwork输入层。

评论= rlValueRepresentation(批评网络,obsInfo,“观察”, {“观察”}, repOpts)
评论= rlValueRepresentation带有属性:ObservationInfo: [1x1 rl.util.]rlNumericSpec]选项:[1x1 rl.option.rlRepresentationOptions]

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

numAction = numel(actInfo.Elements);actorNetwork = [featureInputLayer(numobreservation,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (numAction“名字”“行动”));

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

actor = rlstocticactorrepresentation (actorNetwork,obsInfo,actInfo,...“观察”, {“观察”}, repOpts)
ActionInfo: [1x1 rl.util.]rlFiniteSetSpec] ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

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

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

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

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

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

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

vTable = rlTable(obsInfo);

表格是一个列向量,其中每个条目存储每个可能观察的预期累积长期回报,定义为obsInfo.方法可以访问该表表格的属性虚表对象。每个元素的初始值都是零。

虚表。表格
ans =4×10 0 0 0

还可以将表初始化为任意值,在本例中为包含所有整数的数组14

虚表。表格= reshape(1:4,4,1)
vTable = rlTable的属性:[4x1 double]

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

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

要查看您的评论,请使用getValue函数使用当前表项返回给定观察值。

v = getValue(批评家,{7})
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)
评论= rlValueRepresentation带有属性: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-Discrete”);obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);numObs = obsInfo.Dimension(1);numdiscrete teact = numel(actInfo.Elements);

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

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

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

criticOptions = rlRepresentationOptions(“LearnRate”1飞行,“GradientThreshold”1);评论= rlValueRepresentation(批评网络,obsInfo,...“观察”“状态”, criticOptions);

版本历史

在R2020a中引入

全部展开