主要内容

rlRepresentation

(不推荐)用于强化学习代理的模型表示

rlRepresentation不建议使用。使用rlValueRepresentationrlQValueRepresentationrlDeterministicActorRepresentation,或rlStochasticActorRepresentation代替。有关更多信息,请参见兼容性的考虑

描述

使用rlRepresentation为强化学习代理的行动者或评论家创建函数近似表示。为此,您可以为训练环境指定观察和操作信号,以及影响使用该表示的代理的训练的选项。有关创建表示的详细信息,请参见创建策略和值函数表示

例子

代表= rlRepresentation (obsInfo“观察”,obsNames为深度神经网络创建一个表示法.观察名称obsNames是网络输入层名称。obsInfo包含训练环境的相应观测规范。使用此语法可为评论家创建不需要操作输入的表示,例如为评论家创建rlACAgentrlPGAgent代理。

例子

代表= rlRepresentation (obsInfoactInfo“观察”,obsNames“行动”,actNames使用名称指定的操作信号创建表示actNames和规范actInfo.使用此语法可以为任何参与者创建表示,或者为同时将观察和操作作为输入的评论家创建表示,例如为的评论家rlDQNAgentrlDDPGAgent代理。

例子

tableCritic= rlRepresentation (选项卡为值表或Q表创建评论家表示选项卡.创建表表示时,在创建时指定观察和操作规范选项卡

评论家= rlRepresentation (basisFcnW0obsInfo使用自定义基函数的句柄创建线性基函数表示basisFcn和初始权向量W0obsInfo包含训练环境的相应观测规范。使用此语法可为评论家创建不需要操作输入的表示,例如为评论家创建rlACAgentrlPGAgent代理。

评论家= rlRepresentation (basisFcnW0oaInfo使用规范单元格数组创建线性基函数表示oaInfo,在那里oaInfo{obsInfo, actInfo}.使用此语法可以为评论家创建一个表示,该表示将观察和操作作为输入,例如评论家rlDQNAgentrlDDPGAgent代理。

演员= rlRepresentation (basisFcnW0obsInfoactInfo使用指定的观察和操作规范创建线性基函数表示,obsInfo而且actInfo,分别。使用此语法为参与者创建表示,该参与者将观察结果作为输入并生成操作。

例子

代表= rlRepresentation (___repOpts使用附加选项创建表示,这些选项在训练代理时为表示指定学习参数。可用的选项包括用于训练的优化器和学习率。使用rlRepresentationOptions创建选项集repOpts.您可以将此语法用于前面的任何输入-参数组合。

例子

全部折叠

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

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

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

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

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

使用指定评论家表示的选项rlRepresentationOptions.当你训练一个包含评论家表示的代理时,这些选项控制评论家网络学习的参数。在本例中,设置学习率为0.05,梯度阈值为1。

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

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

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

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

numAction = nummel (actInfo.Elements);actorNetwork = [imageInputLayer([4 1 1],“归一化”“没有”“名字”“观察”) fullyConnectedLayer (numAction“名字”“行动”));

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

actor = rlRepresentation(actorNetwork,obsInfo,actInfo,...“观察”, {“观察”},“行动”, {“行动”}, repOpts)
actor = rlStochasticActorRepresentation,带有属性:Options: [1x1 rl.option.]rlRepresentationOptions] ObservationInfo: [1x1 rl.util.]rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec]

您现在可以使用参与者和评论家表示来创建AC代理。

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

下面的例子展示了如何创建一个Q表表示:

创建环境接口。

环境= rlPredefinedEnv(“BasicGridWorld”);

使用来自环境的操作和观察规范创建Q表。

qTable = rlTable(getObservationInfo(env),getActionInfo(env));

为Q表创建一个表示。

tableRep = rlRepresentation(qTable);

这个例子展示了如何创建一个线性基函数的临界表示。

假设你有一个环境,env.方法中使用的环境培训自定义LQR代理的例子。

负载myLQREnv.mat

从环境中获取观察和动作规范。

obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);

创建一个自定义基函数。在这种情况下,使用二次基函数培训自定义LQR代理

设置基函数所需的维数和参数。

N = 6;

设置初始权值向量。

W0 = 0.1*ones(0.5*(n+1)*n,1);

使用自定义基函数的句柄创建表示。

批评家= rlRepresentation(@(x,u) computeQuadraticBasis(x,u,n),w0,{obsInfo,actInfo});

函数来计算二次基培训自定义LQR代理

函数B = computeQuadraticBasis(x,u,n) z = cat(1,x,u);Idx = 1;R = 1:nC = r:n如果idx == 1 B = z(r)*z(c);其他的B = cat(1,B,z(r)*z(c));结束Idx = Idx + 1;结束结束结束

输入参数

全部折叠

用于演员或评论家的深度神经网络,指定为以下之一:

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

观察名称,指定为字符向量的单元格数组。观察名称是在创建时指定的网络输入层名称.里面的名字obsNames必须与观察规范的顺序一致obsInfo

例子:{“观察”}

观察规范,指定为强化学习规范对象或规范对象的数组。你可以提取obsInfo从现有环境中使用getObservationInfo.或者,您可以使用spec命令手动构造规格,例如rlFiniteSetSpecrlNumericSpec.本规范定义了观测信号的尺寸和名称等观测信息。

操作名称,指定为包含字符向量的单元素单元格数组。动作名称是创建时指定的网络层名称.对于评论家网络,这一层是动作输入路径的第一层。对于参与者,这一层是操作输出路径的最后一层。

例子:{'行动'}

动作规范,指定为强化学习规范对象。你可以提取actInfo从现有环境中使用getActionInfo.或者,您可以使用spec命令手动构造规范,例如rlFiniteSetSpecrlNumericSpec.该规范定义了动作信号的尺寸和名称等有关动作的信息。

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

值表或评论家的Q表,指定为rlTable对象。表表示的可学习参数是的元素选项卡

自定义基函数,指定为用户定义函数的函数句柄。对于线性基函数表示法,该表示法的输出为f = W'B,在那里W权重数组和B由自定义基函数返回的列向量。线性基函数表示法的可学习参数是的元素W

当创建:

  • 只有观察输入的批评表示,你的基函数必须有以下签名。

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

    在这里obs1obsN观测的顺序、数据类型和维度是否与观测规格相同obsInfo

  • 具有观察和动作输入的评论家表示,您的基函数必须具有以下签名。

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

    在这里obs1obsN观测数据的顺序、数据类型和维度是否与第一个元素中的观测数据规格相同oaInfo,行为的第二个元素中的操作规范具有相同的数据类型和维度oaInfo

  • 作为参与者表示法,您的基函数必须具有以下签名。

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

    在这里,obs1obsN观测的顺序、数据类型和维度是否与观测规格相同obsInfo.中的操作规范的数据类型和维度actInfo的数据类型和维数f

例子:@ (x, u) myBasisFunction (x, u)

线性基函数权数组的初值,W,指定为以下其中之一:

  • 列向量——在创建带有连续标量动作信号的评论家表示或参与者表示时

  • 数组——在使用列向量连续动作信号或离散动作空间创建参与者表示时。

用于创建线性基函数批评表示的观察和操作规范,指定为单元格数组obsInfoactInfo

表示选项,指定为创建时使用的选项集rlRepresentationOptions.可用的选项包括用于训练的优化器和学习率。看到rlRepresentationOptions获取详细信息。

输出参数

全部折叠

深度神经网络表示,返回为rlLayerRepresentation对象。使用这个表示来创建一个用于强化学习的代理。有关更多信息,请参见强化学习代理

值或Q表评论表示,返回为rlTableRepresentation对象。使用这个表示来创建一个用于强化学习的代理。有关更多信息,请参见强化学习代理

线性基函数的临界表示,返回为和rlLinearBasisRepresentation对象。使用这个表示来创建一个用于强化学习的代理。有关更多信息,请参见强化学习代理

线性基函数参与者表示,返回为和rlLinearBasisRepresentation对象。使用这个表示来创建一个用于强化学习的代理。有关更多信息,请参见强化学习代理

兼容性的考虑

全部展开

不建议从R2020a开始

在R2019a中引入