主要内容

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使用指定的观察和操作规范创建一个线性基函数表示,obsInfoactInfo,分别。使用此语法创建参与者的表示,该参与者将观察结果作为输入并生成操作。

例子

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

例子

全部折叠

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

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

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

对于AC或PG代理使用的状态-值-功能评价,输入是观察值,输出应该是标量值,即状态值。对于本例,使用具有一个输出的深度神经网络来创建批评表示,并与对应的观测信号相对应x, xdot,θ,thetadot中描述的训练空调代理人平衡车杆系统.你可以从obsInfo规范。命名网络层输入“观察”

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

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

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

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

评论家= rlRepresentation (criticNetwork obsInfo,“观察”, {“观察”}, repOpts)
批评家= rlValueRepresentation with properties: Options: [1x1 rl.option.]ObservationInfo: [1x1 rl.util.]rlNumericSpec] ActionInfo: {1x0 cell}

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

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

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

演员= rlRepresentation (actorNetwork obsInfo actInfo,...“观察”, {“观察”},“行动”, {“行动”}, repOpts)
actor = rlStochasticActorRepresentation with properties:ObservationInfo: [1x1 rl.util.]rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec]

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

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

这个例子展示了如何创建一个Q表表示:

创建环境接口。

env = 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 * (0.5 * (n + 1) * n, 1);

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

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

函数来计算二次基火车定制LQR代理

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

输入参数

全部折叠

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

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

观察名称,指定为字符向量的单元格数组。观察名称是您在创建时指定的网络输入层名称.的名字obsNames必须按照obsInfo

例子:{“观察”}

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

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

例子:{'行动'}

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

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

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

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

当创建:

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

    B = myBasisFunction (obsN obs1, obs2,…)

    在这里obs1obsN观察是否在相同的顺序和相同的数据类型和维度的观察规范obsInfo

  • 一个有观察和行动输入的评论家表示法,你的基本功能必须有以下签名。

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

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

  • 一个参与者表示,你的基本功能必须有以下签名。

    B = myBasisFunction (obsN obs1, obs2,…)

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

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

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

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

  • 数组——使用列向量连续动作信号或离散动作空间创建角色表示。

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

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

输出参数

全部折叠

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

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

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

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

兼容性的考虑

全部展开

不建议在R2020a开始

介绍了R2019a