主要内容

rlStochasticActorRepresentation

(不推荐)用于强化学习代理的随机参与者表示

rlStochasticActorRepresentation不建议使用。使用rlDiscreteCategoricalActorrlContinuousGaussianActor代替。有关更多信息,请参见rlStochasticActorRepresentation不建议使用

描述

该对象实现了一个函数逼近器,用作强化学习代理中的随机actor。随机参与者将观察结果作为输入并返回随机操作,从而实现具有特定概率分布的随机策略。在创建一个rlStochasticActorRepresentation对象,使用它创建合适的代理,例如rlACAgentrlPGAgent代理。有关创建表示的详细信息,请参见创建策略和值函数

创建

描述

离散作用空间随机Actor

例子

discActor= rlStochasticActorRepresentation (,observationInfo,discActionInfo“观察”,obsName使用深度神经网络创建一个具有离散动作空间的随机角色作为函数逼近器。这里,输出层必须具有与可能的离散操作数量一样多的元素。此语法设置ObservationInfo而且ActionInfo的属性discActor对于输入observationInfo而且discActionInfo,分别。obsName必须包含的输入层的名称

例子

discActor= rlStochasticActorRepresentation ({basisFcn,W0},observationInfo,actionInfo使用自定义基函数作为基础逼近器创建一个离散空间随机actor。第一个输入参数是一个包含两个元素的单元格,其中第一个元素包含句柄basisFcn到自定义基函数,而第二个元素包含初始权值矩阵W0.此语法设置ObservationInfo而且ActionInfo的属性discActor对于输入observationInfo而且actionInfo,分别。

discActor= rlStochasticActorRepresentation (___,选项创建离散行动空间,随机行动者discActor使用附加选项集选项,这是一个rlRepresentationOptions对象。此语法设置选项的属性discActor选项输入参数。您可以将此语法用于前面的任何输入-参数组合。

连续动作空间高斯Actor

例子

接触器= rlStochasticActorRepresentation (,observationInfo,contActionInfo“观察”,obsName使用深度神经网络创建具有连续动作空间的高斯随机actor作为函数逼近器。这里,输出层必须具有连续动作空间维数的两倍多的元素。此语法设置ObservationInfo而且ActionInfo的属性接触器对于输入observationInfo而且contActionInfo分别。obsName必须包含的输入层的名称

请注意

接触器不强制操作规范设置的约束,因此,在使用此actor时,必须在环境中强制操作空间约束。

接触器= rlStochasticActorRepresentation (___,选项创建连续动作空间,高斯actor接触器使用额外的选项选项集,它是一个rlRepresentationOptions对象。此语法设置选项的属性接触器选项输入参数。您可以将此语法用于前面的任何输入-参数组合。

输入参数

全部展开

深度神经网络用作行动者内部的底层逼近器,指定为以下之一:

对于一个离散作用空间随机参与者,必须将观察结果作为输入,并且单个输出层具有与可能的离散操作数量一样多的元素。每个元素表示执行相应操作的概率(必须是非负的)。

对于一个连续作用空间随机参与者,必须将观察数据作为输入,并且单个输出层的元素数量是连续动作空间维度数的两倍。输出向量的元素表示动作空间维度的高斯分布的所有均值和所有标准差(必须是非负的)。

请注意

标准偏差必须是非负的,而平均值必须落在输出范围内,这意味着网络必须有两条独立的路径。第一个路径必须产生平均值的估计,因此任何输出非线性都必须缩放,以便其输出落在所需的范围内。第二个路径必须产生标准偏差的估计,因此必须使用softplus或ReLU层来强制执行非负性。

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

rlStochasticActorRepresentation对象支持循环深度万博1manbetx神经网络。

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

观察名称,指定为字符串或字符向量的单元格数组。观察名称必须是中输入层的名称

例子:{' my_obs '}

自定义基函数,指定为用户定义的MATLAB函数的函数句柄。用户定义的函数可以是匿名函数,也可以是MATLAB路径上的函数。actor的输出是向量a = softmax(W'*B),在那里W权重矩阵和B由自定义基函数返回的列向量。的每个元素一个表示采取相应操作的概率。参与者的可学习参数是的元素W

在创建随机角色表示时,基函数必须具有以下签名。

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

在这里obs1obsN中定义的信号的观测顺序和数据类型和维度是否相同observationInfo

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

基函数权值的初值,W,指定为一个矩阵。它的行数必须与基函数输出的长度一样多,列数必须与可能操作的数量一样多。

属性

全部展开

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

请注意

TRPO代理只使用选项。UseDevice表示选项,忽略其他训练和学习率选项。

观察规格,指定为指定为rlFiniteSetSpecrlNumericSpec对象或包含此类对象的组合的数组。这些对象定义了观测信号的维度、数据类型和名称等属性。

rlStochasticActorRepresentation设置ObservationInfo的属性接触器discActor对于输入observationInfo

你可以提取observationInfo从现有环境或代理中使用getObservationInfo.您还可以使用rlFiniteSetSpecrlNumericSpec

动作规范,指定为rlFiniteSetSpecrlNumericSpec对象。这些对象定义操作信号的维度、数据类型和名称等属性。

对于一个离散动作空间actor,rlStochasticActorRepresentationActionInfo对于输入discActionInfo,这一定是一个rlFiniteSetSpec对象。

对于一个连续动作的太空演员来说,rlStochasticActorRepresentationActionInfo对于输入contActionInfo,这一定是一个rlNumericSpec对象。

你可以提取ActionInfo从现有环境或代理中使用getActionInfo.您还可以手动构造规范。

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

对象的功能

rlACAgent 演员-评论家强化学习代理
rlPGAgent 策略梯度强化学习代理
rlPPOAgent 近端策略优化强化学习代理
rlSACAgent 软演员-评论家强化学习代理
getAction 从给定环境观察的代理、参与者或策略对象获取操作

例子

全部折叠

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

obsInfo = rlNumericSpec([4 1]);

创建一个操作规范对象(或者使用getActionInfo从环境中提取规范对象)。对于本例,将操作空间定义为由三个值-组成10,0,10

actInfo = rlFiniteSetSpec([-10 0 10]);

为参与者创建一个深度神经网络逼近器。网络的输入(这里称为状态)必须接受一个四元向量(观察向量是由obsInfo),以及它的输出(这里称为actionProb)必须是一个三元向量。输出向量的每个元素必须在0到1之间,因为它表示执行三个可能操作中的每一个的概率(由actInfo).使用softmax作为输出层可以实现这一要求。

net = [featureInputLayer(4,“归一化”,“没有”,...“名字”,“状态”) fullyConnectedLayer (3“名字”,“俱乐部”) softmaxLayer (“名字”,“actionProb”));

使用rlStochasticActorRepresentation,使用网络、观察和动作规范对象,以及网络输入层的名称。

actor = rlStochasticActorRepresentation(net,obsInfo,actInfo,...“观察”,“状态”
actor =带有属性的rlstochasticactor表示:ActionInfo: [1x1 rl.util.]rlFiniteSetSpec] ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要验证您的参与者,请使用getAction从观察向量返回一个随机操作[1 1 1 1],使用当前网络权值。

act = getAction(actor,{[1 1 1 1]});行为{1}
Ans = 10

现在可以使用参与者创建合适的代理,例如rlACAgent,或rlPGAgent代理。

创建一个观察规范对象(或者使用getObservationInfo从环境中提取规范对象)。对于本例,将观测空间定义为连续的六维空间,这样单个观测值就是包含6个双精度数据的列向量。

obsInfo = rlNumericSpec([6 1]);

创建一个操作规范对象(或者使用getActionInfo从环境中提取规范对象)。对于本例,将操作空间定义为连续的二维空间,以便单个操作是一个列向量,其中包含2倍-10而且10

actInfo = rlNumericSpec([2 1],“LowerLimit”, -10,“UpperLimit”10);

为参与者创建一个深度神经网络逼近器。观测输入(这里称为myobs)必须接受一个六维向量(即刚刚定义的观察向量obsInfo).输出(这里称为myact)必须是四维向量(是定义的维数的两倍)actInfo).输出向量的元素依次表示每个动作的所有均值和所有标准差。

标准偏差必须是非负的,而平均值必须落在输出范围内,这意味着网络必须有两条独立的路径。第一个路径是平均值,任何输出非线性都必须缩放,以便在输出范围内产生值。第二个路径是标准偏差,您可以使用softplus或relu层来强制非负性。

%输入路径层(6 × 1输入和2 × 1输出)inPath = [imageInputLayer([6 1 1],...“归一化”,“没有”,...“名字”,“myobs”) fullyConnectedLayer (2“名字”,“infc”));%路径层为平均值% (2 × 1输入和2 × 1输出)%使用scalingLayer缩放范围meanPath = [tanhLayer(“名字”,的双曲正切);%范围:(-1,1)scalingLayer (“名字”,“规模”,...“规模”actInfo.UpperLimit)];%范围:(-10,10)%路径层为标准偏差% (2 × 1输入输出)%使用软加图层使它非负sdevPath = softplusLayer(“名字”,“splus”);%连接两个输入(沿维度#3)%以形成单个(4 × 1)输出层outLayer = concatenationLayer(3,2,“名字”,“mean&sdev”);为网络对象添加层net = layerGraph(inPath);net = addLayers(net,meanPath);net = addLayers(net,sdevPath);net = addLayers(net,outLayer);%连接层:必须输出路径的平均值%连接到concatenationLayer的FIRST输入连接inPath输出到meanPath输入net = connectLayers(net,“infc”,“双曲正切/”);连接inPath输出到sdevPath输入net = connectLayers(net,“infc”,“splus /”);%连接meanPath输出到gaussPars输入#1net = connectLayers(net,“规模”,“mean&sdev /三机一体”);%连接sdevPath输出到gaussPars输入#2net = connectLayers(net,“splus”,“mean&sdev / in2”);

为演员设置一些训练选项。

actorOpts = rlRepresentationOptions(“LearnRate”, 8 e - 3,“GradientThreshold”1);

使用rlStochasticActorRepresentation,使用网络、观察和动作规范对象、网络输入层的名称和选项对象。

actor = rlStochasticActorRepresentation(net, obsInfo, actInfo,“观察”,“myobs”actorOpts)
actor =带有属性的rlstochasticactor表示:ActionInfo: [1x1 rl.util.]rlNumericSpec] ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要检查角色,请使用getAction从观察向量返回一个随机操作的(1),使用当前网络权值。

act = getAction(actor,{ones(6,1)});行为{1}
ans =2x1个单列向量-0.0763 - 9.6860

现在可以使用参与者创建合适的代理(例如rlACAgent,rlPGAgent,或rlPPOAgent代理)。

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

obsInfo = rlNumericSpec([2 1]);

基于自定义基函数的随机actor不支持连续作用空间。万博1manbetx因此,创建一个离散作用空间规范对象(或者使用getActionInfo从具有离散操作空间的环境中提取规范对象)。在本例中,将动作空间定义为由3个可能值(命名为7,5,3.在这种情况下)。

actInfo = rlFiniteSetSpec([7 5 3]);

创建一个自定义基函数。每个元素都是由定义的观测值的函数obsInfo

myBasisFcn = @(myobs) [myobs(2)^2;myobs (1);exp (myobs (2));abs (myobs (1)))
myBasisFcn =Function_handle with value:@ (myobs) [myobs (2) ^ 2; myobs (1); exp (myobs (2)); abs (myobs (1)))

中定义的操作之一就是actor的输出actInfo,对应于元素softmax (W * myBasisFcn (myobs))哪个值最高。W是一个权重矩阵,包含可学习的参数,其行数必须与基函数输出的长度相同,列数必须与可能的操作数相同。

定义一个初始参数矩阵。

W0 = rand(4,3);

创建参与者。第一个参数是一个包含自定义函数句柄和初始参数矩阵的双元素单元格。第二个和第三个参数分别是观察和操作规范对象。

actor = rlStochasticActorRepresentation({myBasisFcn,W0},obsInfo,actInfo)
actor =带有属性的rlstochasticactor表示:ActionInfo: [1x1 rl.util.]rlFiniteSetSpec] ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

来检查您的角色getAction函数返回三种可能的操作之一,这取决于给定的随机观察和当前参数矩阵。

v = getAction(actor,{rand(2,1)})
v =1x1单元阵列{[3]}

现在您可以使用参与者(以及评论家)来创建合适的离散动作空间代理。

对于这个例子,您使用循环神经网络创建一个具有离散动作空间的随机actor。你也可以用循环神经网络来处理连续随机参与者使用相同的方法。

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

环境= rlPredefinedEnv(“CartPole-Discrete”);obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);numObs = obsInfo.Dimension(1);num离散act = numel(actInfo.Elements);

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

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

为网络创建一个随机角色表示。

actorOptions = rlRepresentationOptions(“LearnRate”1 e - 3,...“GradientThreshold”1);actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,...“观察”,“状态”, actorOptions);

版本历史

R2020a中引入

全部展开