主要内容

随机表示

强化学习代理的随机参与者表示

描述

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

创建

描述

离散动作空间随机演员

例子

碟形演员= rlStochasticActorRepresentation (observationInfoDisactionInfo“观察”,obsName使用深度神经网络创建具有离散动作空间的随机参与者作为函数逼近。这里,输出层必须有一样多的元素的可能的离散动作的次数。这句法设置观测信息行动信息特性碟形演员的输入observationInfoDisactionInfo, 分别。obsName必须包含的输入层的名称

例子

碟形演员=rl随机变量表示法({basisFcnW0},observationInfoactionInfo使用自定义基函数作为基础近似器创建离散空间随机参与者。第一个输入参数是两个元素的单元格,其中第一个元素包含句柄basisFcn对于自定义基函数,第二个元素包含初始权重矩阵W0。此语法设置观测信息行动信息特性碟形演员的输入observationInfoactionInfo, 分别。

碟形演员= rlStochasticActorRepresentation (___选择权创建离散动作空间,随机参与者碟形演员使用附加设置选项选择权,这是一个rlRepresentationOptions此语法设置选项财产碟形演员选择权输入参数。您可以将此语法与前面的任何输入参数组合一起使用。

连续作用空间高斯算子

例子

接触= rlStochasticActorRepresentation (observationInfocontActionInfo“观察”,obsName使用深度神经网络创建具有连续动作空间的高斯随机参与者作为函数逼近。这里,输出层必须具有两倍于连续操作空间维度数的元素。此语法设置观测信息行动信息特性接触的输入observationInfocontActionInfo分别地obsName必须包含的输入层的名称

笔记

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

接触= rlStochasticActorRepresentation (___选择权创造连续的动作空间,高斯行动者接触使用附加选择权选项集,它是一个rlRepresentationOptions此语法设置选项财产接触选择权输入参数。您可以将此语法与前面的任何输入参数组合一起使用。

输入参数

全部展开

深层神经网络用作参与者内的基本近似器,具体如下:

对于离散动作空间随机演员,必须有观察作为输入和一个单一的输出层有尽可能多的元素可能的离散动作的数量。每个元素表示执行相应动作的概率(必须是非负的)。

对于连续作用空间随机行动者,必须将观测值作为输入,且单个输出层的元素数量是连续作用空间维数的两倍。输出向量的元素表示所有平均值,后跟所有标准偏差(必须为非负)作用空间维数的高斯分布。

笔记

一个事实,即标准偏差必须是非负的,而平均值必须落在输出范围意味着网络必须有两个独立的路径内。第一路径必须产生用于平均值的估计,因此,任何输出非线性必须缩放,使得它的输出落入期望的范围。第二路径必须产生一个估计的标准偏差,所以必须使用softplus或RELU层执行非负性。

网络输入层必须与中定义的信号具有相同的顺序、相同的数据类型和维数观测信息。此外,这些输入层的名称必须与中指定的观测名称匹配obsName。网络的输出层必须具有相同的数据类型和尺寸如在所限定的信号行动信息

随机表示对象支持递归深层万博1manbetx神经网络。

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

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

例子:{'my_obs'}

自定义基函数,指定为用户定义的MATLAB函数的函数句柄。用户定义的函数可以是匿名函数,也可以是MATLAB路径上的函数。参与者的输出是向量一个= softmax (W * B)哪里W.是一个权重矩阵和B.是自定义基函数返回的列向量一种表示采取相应行动的概率。行为人的可学习参数是要素W.

当创建随机参与者表示时,您的基本函数必须具有以下签名。

B = myBasisFunction (obsN obs1, obs2,…)

这里obs1obsN观测值的顺序、数据类型和尺寸是否与中定义的信号相同observationInfo

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

基函数权重的初始值,W.,指定为矩阵。它必须有尽可能多的行作为基础函数输出的长度,和尽可能多的列的可能动作的次数。

属性

全部展开

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

笔记

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

观察规范,指定为指定的rlFiniteSetSpecrlNumericSpec对象或包含此类对象的混合阵列。这些对象定义如尺寸,数据类型和观测信号的名称属性。

随机表示设定观测信息财产接触碟形演员输入observationInfo

你可以提取observationInfo从现有环境或代理使用获取观测信息。您也可以使用手动构造规范rlFiniteSetSpecrlNumericSpec

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

对于离散的动作空间行动者,随机表示行动信息输入DisactionInfo,这必须是一个rlFiniteSetSpec对象

对于连续动作空间的演员,随机表示行动信息输入contActionInfo,这必须是一个rlNumericSpec对象

你可以提取行动信息从现有环境或代理使用getActionInfo。您也可以手动构造规范。

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

对象功能

rlACAgent 演员,评论家强化学习代理
rlPGAgent 策略梯度强化学习代理
rlPPOAgent 近端政策优化强化学习代理
rlSACAgent 软演员-评论家强化学习代理
getAction 获得代理或演员表示给定的环境观测行动

例子

全部崩溃

创建观察规范对象(或者使用获取观测信息从环境中提取规范对象)。对于本例,请将观测空间定义为连续的四维空间,以便单个观测是包含四个双精度的列向量。

obsInfo=rlNumericSpec([4 1]);

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

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

为参与者创建一个深度神经网络近似器。网络的输入(这里称为状态)必须接受四元素向量(刚定义的观测向量)obsInfo)及其输出(这里称为actionProb)必须是三元素向量。输出向量的每个元素必须介于0和1之间,因为它表示执行三个可能操作中的每个操作的概率(如actInfo)。使用softmax作为输出层强制执行此要求。

net=[featureInputLayer(4,“正常化”'没有任何''姓名'“国家”)完全连接层(3,'姓名'“fc”)软MaxLayer('姓名'“actionProb”));

使用随机表示,使用网络、观察和操作规范对象以及网络输入层的名称。

演员= rlStochasticActorRepresentation(净、obsInfo actInfo,“观察”“国家”
actor = rlStochasticActorRepresentation with properties:rlFiniteSetSpec: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

为了验证你的演员,用getAction从观测向量返回一个随机行动[1 1 1 1]使用当前的网络的权重。

act=getAction(actor,{[1]});法案{1}
ans=10

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

创建观察规范对象(或者使用获取观测信息从环境中提取规范对象)。对于本例,将观测空间定义为连续的六维空间,因此单个观测是包含6个双精度的列向量。

obsInfo=rlNumericSpec([6 1]);

创建操作规范对象(或者使用getActionInfo从环境中提取规范对象)。对于这个例子,定义操作空间作为连续的二维空间中,使得单个动作是同时含有2个之间双打的列矢量-1010

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

为参与者创建一个深度神经网络近似器。观察输入(此处称为肌瘤)必须接受六维矢量(观测矢量只是由下式定义obsInfo).输出(此处称为我的行为)必须是四维向量(是定义维数的两倍actInfo).输出向量的元素按顺序表示每个动作的所有平均值和所有标准偏差。

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

%输入路径层(6 1个输入和2由1个输出)inPath=[imageInputLayer([6 1],“正常化”'没有任何''姓名'“myobs”) fullyConnectedLayer (2'姓名'“infc”));%2由1个输出%平均值的路径层(2×1输入和2×1输出)%使用scalingLayer按比例的范围内meanPath = [tanhLayer('姓名'“谭”);%输出范围:(-1,1)缩放层('姓名'“规模”“规模”,actInfo.UpperLimit)];%输出范围:(-10,10)%路径层用于标准偏差(2 * 1输入和输出)%使用软加层使其非负sdevPath=softplusLayer('姓名'“splus”);%将两个输入(沿尺寸#3)合并形成一个(4×1)输出层outLayer = concatenationLayer(3,2,'姓名'“平均值和sdev”);给网络对象添加层net=layerGraph(inPath);net=addLayers(net,meanPath);net=addLayers(net,sdevPath);net=addLayers(net,outLayer);%连接层:平均值路径输出必须连接到concatenationLayer的第一个输入净= connectLayers(净,“infc”“双曲正切/”);%将inPath的输出连接到meanPath输入净= connectLayers(净,“infc”“splus/in”);%将inPath的输出连接到sdevPath输入净= connectLayers(净,“规模”“平均值和sdev/in1”);meanPath的%连接输出到gaussPars输入#1净= connectLayers(净,“splus”“平均值和sdev/in2”);sdevPath的%连接输出到gaussPars输入#2%的阴谋网络地块(净)

图中包含一个轴对象。axis对象包含一个graphplot类型的对象。

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

actorOpts = rlRepresentationOptions('LearnRate',8e-3,“梯度阈值”,1);

使用随机表示,使用网络、观察和操作规范对象、网络输入层的名称和选项对象。

actor=rl随机变量表示(网络、obsInfo、actInfo、,“观察”“myobs”actorOpts)
actor = rlStochasticActorRepresentation with properties:rlNumericSpec . ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要检查演员,请使用getAction从观测向量返回一个随机行动那些(6,1)使用当前的网络的权重。

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

现在,您可以用演员来创建一个合适的试剂(如rlACAgentrlPGAgent,或rlPPOAgent代理)。

创建观察规范对象(或者使用获取观测信息从环境中提取规范对象)。对于这个例子,定义观察空间作为连续四维空间,使得单个观察是含有2个双打的列向量。

obsInfo=rlNumericSpec([2 1]);

基于自定义基函数随机演员不支持连续动作的空间。万博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与价值:@(myobs)[myobs(2)^ 2; myobs(1); EXP(myobs(2)); ABS(myobs(1))]

参与者的输出是在中定义的动作之一actInfo,对应于softmax(W'*mybasiscn(myobs))它的值最高。W.是一个权值矩阵,包含可学习的参数,它必须具有与基函数输出长度相同的行数,以及与可能的操作数量相同的列数。

定义初始参数矩阵。

W0=兰特(4,3);

创建演员。第一个参数是同时包含所述手柄到自定义函数和初始参数矩阵的两元件细胞。第二和第三个参数分别是观察与动作规范对象。

actor=rlstochasticatorRepresentation({mybasiscn,W0},obsInfo,actInfo)
actor = rlStochasticActorRepresentation with properties:rlFiniteSetSpec: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要检查您的演员,请使用getAction函数返回三种可能的操作之一,具体取决于给定的随机观测值和当前参数矩阵。

V =的getAction(演员,{兰特(2,1)})
五=1x1单元阵列{[3]}

现在,您可以使用演员(以及评论家)创建合适的离散动作空间代理。

在这个例子中,你创建一个使用递归神经网络离散动作空间随机演员。你也可以使用一个经常性的神经网络使用相同的方法连续随机演员。

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

ENV = rlPredefinedEnv(“CartPole离散”);obsInfo=getObservationInfo(env);actInfo=getActionInfo(env);numObs=obsInfo.Dimension(1);numDiscreteAct=numel(actInfo.Elements);

为演员创建递归深层神经网络。要创建递归神经网络,请使用序列输入层作为输入层,并至少包括一个第一层

actorNetwork=[sequenceInputLayer(numObs,“正常化”'没有任何''姓名'“国家”)完全连接层(8,'姓名'“fc”)reluLayer('姓名'“雷卢”)lstmLayer(8,“输出模式”'序列''姓名'“lstm”)fullyConnectedLayer(numDiscreteAct,'姓名''输出')软MaxLayer('姓名'“actionProb”)];

为网络创建随机参与者表示。

ActorProptions=rlRepresentationOptions('LearnRate'1 e - 3,“梯度阈值”,1);actor=rl随机性actor表示(actorNetwork、obsInfo、actInfo、,...“观察”“国家”,actorOptions);
在R2020A中介​​绍