主要内容

rlstochastorrepresentation

加固学习代理的随机演员代表

描述

该目的实现了用作加强学习代理中的随机演员的功能近似器。随机演员将观察视为输入并返回随机动作,从而实现具有特定概率分布的随机策略。创建一个rlstochastorrepresentation对象,使用它来创建合适的代理,例如rlacagent.要么rlpgagent.代理人。有关创建表示的更多信息,请参阅创建策略和值函数表示

创建

描述

离散作用空间随机参与者

例子

辩论推动机= rlstochastorReRepresentation(,观察税收,discactionInfo.,'观察',obsname.使用深神经网络创建带有离散动作空间的随机演员作为函数的估计值。这里,的输出层必须有尽可能多的元素可能的离散动作的数量。该语法设置观察税收ActionInfo.属性辩论推动机对投入观察税收discactionInfo.,分别。obsname.必须包含输入层的名称

例子

辩论推动机= rlstochastorReRepresentation({基础FCN.,W0.},观察税收,ActionInfo.使用自定义基本函数作为基础近似器创建一个离散空间随机演员。第一个输入参数是一个双元素单元,其中第一个元素包含句柄基础FCN.到自定义基础函数,第二个元素包含初始权重矩阵W0..该语法设置观察税收ActionInfo.属性辩论推动机对投入观察税收ActionInfo.,分别。

辩论推动机= rlstochastorReRepresentation(___,选项创建离散动作空间,随机演员辩论推动机使用附加选项集选项,这是一个rlRepresentationOptions目的。该语法设置选项的属性辩论推动机到了选项输入参数。您可以使用任何以前的Infux-Argument组合使用此语法。

连续动作空间高斯演员

例子

接触器= rlstochastorReRepresentation(,观察税收,ContactionInfo.,'观察',obsname.使用深神经网络创建具有连续动作空间的高斯随机演员作为函数的估计值。这里,的输出层必须具有两倍的元素作为连续动作空间的尺寸的数量。该语法设置观察税收ActionInfo.属性接触器对投入观察税收ContactionInfo.分别。obsname.必须包含输入层的名称

请注意

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

接触器= rlstochastorReRepresentation(___,选项创建连续动作空间,高斯演员接触器使用额外的选项选项集,这是一个rlRepresentationOptions目的。该语法设置选项的属性接触器到了选项输入参数。您可以使用任何以前的Infux-Argument组合使用此语法。

输入参数

展开全部

深神经网络用作演员内的底层近似器,指定为以下之一:

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

对于连续动作空间随机演员,必须将观察结果作为输入和单个输出层具有两倍的元素,作为连续动作空间的尺寸的数量。输出矢量的元素表示所有平均值,然后是用于动作空间的尺寸的高斯分布的所有标准偏差(必须是非负面)。

请注意

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

网络输入层必须是相同的顺序,并且具有与所定义的信号相同的数据类型和尺寸观察税收.此外,这些输入层的名称必须与指定的观察名称匹配obsname..网络输出层必须具有与中定义的信号相同的数据类型和维数ActionInfo.

rlstochastorrepresentation对象支持反复性的金宝app深神经网络。

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

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

例子:{'my_obs'}

自定义基函数,指定为用户定义的MATLAB函数的函数句柄。用户定义的函数可以是matlab路径上的匿名函数或函数。演员的输出是向量a = softmax(w'* b), 在哪里W是一个重量矩阵和B是自定义基函数返回的列向量。每个元素一个表示采取相应行动的概率。演员的学习参数是元素W

在创建随机演员表示时,基本功能必须具有以下签名。

b = mybasisfunction(obs1,obs2,...,obsn)

在这里obs1.obsn.是以相同的顺序观察和与定义的信号相同的数据类型和尺寸观察税收

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

基础函数权重的初始值,W,指定为矩阵。它的行数必须与基函数输出的长度相同,列数必须与可能的操作数相同。

特性

展开全部

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

观察规范,指定为指定为rlfinitesetspec.要么rlnumericspec.对象或包含这些对象的混合的数组。这些对象定义了一些属性,比如维度、数据类型和观察信号的名称。

rlstochastorrepresentation设置观察税收的属性接触器要么辩论推动机到意见观察税收

你可以提取观察税收从现有的环境或代理商使用getobservationInfo..您还可以使用手动构造规范rlfinitesetspec.要么rlnumericspec.

动作规格,指定为rlfinitesetspec.要么rlnumericspec.目的。这些对象定义属性,例如尺寸,数据类型和动作信号的名称。

对于一个离散的行动空间演员,rlstochastorrepresentationActionInfo.到意见discactionInfo.,这必须是一个rlfinitesetspec.目的。

对于一个连续动作空间演员来说,rlstochastorrepresentationActionInfo.到意见ContactionInfo.,这必须是一个rlnumericspec.目的。

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

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

对象的功能

rlacagent. 行动者-批评家强化学习代理
rlpgagent. 策略梯度强化学习代理
rlPPOAgent 近端策略优化强化学习代理
rlSACAgent 软演员 - 评论家强化学习代理
努力 根据环境观察,从行为者或行动者的表现中获得行动

例子

全部收缩

创建观察规范对象(或使用getobservationInfo.从环境中提取规范对象)。对于该示例,将观察空间定义为连续的四维空间,因此单个观察是包含四个双打的列向量。

Obsinfo = rlnumericspec([4 1]);

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

Actinfo = rlfinitesetspec([ -  10 0 10]);

为演员创建一个深神经网络近似器。网络的输入(此处调用状态)必须接受四元素矢量(刚刚定义的观察向量obsInfo),它的输出(这里称为actionProb)必须是三元素矢量。输出矢量的每个元素必须在0和1之间,因为它表示执行三种可能的三种可能动作的概率(如Actinfo.)。使用SoftMax作为输出层强制执行此要求。

net = [featureinputlayer(4,'正常化',“没有”,“名字”,'状态')全康连接层(3,“名字”,'fc')softmaxlayer(“名字”,'actionprob')];

创建演员rlstochastorrepresentation,使用网络,观测和动作规范对象,以及网络输入层的名称。

Actor = rlstochasticRorepresentation(Net,Obsinfo,Actinfo,'观察','状态'
Actor = rlstochastorRepresentation与属性:ActionInfo:[1x1 rl.util.rlfiniteSetpec] devalipationInfo:[1x1 rl.util.rlnumericspec]选项:[1x1 rl.option.rlrepresentationOptions]

要验证您的actor,请使用努力从观测向量返回一个随机动作[1 1 1],使用当前网络权重。

动作= getaction(演员,{[1 1 1 1]});{1}
ans = 10.

您现在可以使用演员创建合适的代理,例如rlacagent., 要么rlpgagent.代理人。

创建观察规范对象(或使用getobservationInfo.从环境中提取规范对象)。对于该示例,将观察空间定义为连续的六维空间,因此单个观察是包含6个双打的列向量。

Obsinfo = rlnumericspec([6 1]);

创建动作规范对象(或使用getActionInfo.从环境中提取规范对象)。对于本例,将操作空间定义为连续的二维空间,因此单个操作是包含2的列向量-1010.

Actinfo = rlnumericspec([2 1],'lowerimit',-10,“UpperLimit”,10);

为演员创建一个深神经网络近似器。观察输入(这里称为蒙布斯)必须接受一个六维向量(刚刚定义的观测向量obsInfo)。输出(此处调用界面)必须是四维向量(两倍于尺寸定义的尺寸Actinfo.)。输出矢量的元素按顺序表示每个动作的所有手段和所有标准偏差。

标准偏差必须是非负的事实,而平均值必须落在输出范围内,这意味着网络必须具有两个单独的路径。第一路径用于平均值,并且必须缩放任何输出非线性,以便它可以在输出范围内产生值。第二条路径用于标准偏差,您可以使用SoftPlus或Relu层来强制非消极性。

%输入路径层(6乘1输入和2乘1输出)InPath = [ImageInputLayer([6 1 1],'正常化',“没有”,“名字”,'myobs')全连接列(2,“名字”,'infc')];% 2乘1输出平均值%路径层(2乘1个输入和2乘1输出)%使用scalingLayer缩放范围meanPath = [tanhLayer(“名字”,'tanh');%输出范围:(-1,1)ScalingLayer(“名字”,'规模','规模'actInfo.UpperLimit)];%输出范围:(-10,10)标准偏差的%路径层(2乘1输入和输出)%使用softplus图层使其非负sdevpath = softpluslayer(“名字”,'splus');%Conctatedate两个输入(沿尺寸#3)形成单个(4乘1)输出层支出= concatenationLayer (3 2“名字”,'意思和sdev');%将图层添加到网络对象net = layergraph(Inpath);net = addlayers(net,意思);net = addlayers(net,sdevpath);net = addlayers(网络,低估);%Connect图层:平均值路径输出必须连接到ConcateationLayer的第一个输入网= connectLayers(网络,'infc','tanh / in');%连接到Incath Input的输出输出网= connectLayers(网络,'infc','splus /');%连接到SDEVPATH输入的Inclate输出网= connectLayers(网络,'规模','意思和sdev / in1');将meanPath的输出连接到gaussPars输入#1网= connectLayers(网络,'splus','意思和sdev / in2');% connect输出的sdevPath到gaussPars输入#2%绘图网络情节(网)

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

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

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

创建演员rlstochastorrepresentation,使用网络,观察和动作规范对象,网络输入层和选项对象的名称。

Actor = rlstochasticRorepresentation(Net,Obsinfo,Actinfo,'观察','myobs',actoropts)
Actor = RLStochAstorReRepresentation与属性:ActionInfo:[1x1 Rl.util.rlnumericspec] deviewationInfo:[1x1 rl.util.rlnumericspec]选项:[1x1 rl.option.rlrepresentationOptions]

检查你的演员,使用努力从观测向量返回一个随机动作的(1),使用当前网络权重。

ACT = GETACT(演员,{ONE(6,1)});{1}
ans =.2x1单列向量-0.0763 - 9.6860

现在可以使用actor创建合适的代理(例如rlacagent.,rlpgagent., 要么rlPPOAgent代理人)。

创建观察规范对象(或使用getobservationInfo.从环境中提取规范对象)。在本例中,将观测空间定义为连续的四维空间,因此单个观测是包含2个双精度的列向量。

Obsinfo = rlnumericspec([2 1]);

基于自定义基函数的随机行为体不支持连续动作空间。金宝app因此,创建一个离散的动作空间说明对象(或替代使用getActionInfo.从具有离散操作空间的环境中提取规范对象)。对于本例,将操作空间定义为一个有限集,包含3个可能的值(命名为7,5, 和3.在这种情况下)。

actinfo = rlfinitesetspec([7 5 3]);

创建自定义基本函数。每个元素是由此定义的观察结果的函数obsInfo

myobs = @(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)))

actor的输出是在定义的动作中的动作Actinfo.,对应于元素softmax(w'* mybasisfcn(myobs))有最高值。W是一个重量矩阵,包含可学习参数,必须具有与基础函数输出的长度一样多的行,以及多个列作为可能的动作的数量。

定义初始参数矩阵。

W0 =兰特(4,3);

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

Actor = rlstochastorRepresentation({mybasisfcn,w0},obsinfo,Actinfo)
Actor = rlstochastorRepresentation与属性:ActionInfo:[1x1 rl.util.rlfiniteSetpec] devalipationInfo:[1x1 rl.util.rlnumericspec]选项:[1x1 rl.option.rlrepresentationOptions]

检查你的演员使用努力函数以返回三种可能的动作之一,具体取决于给定的随机观察和当前参数矩阵。

v = getaction(演员,{rand(2,1)})
v =1x1细胞阵列{[3]}

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

对于本例,您使用递归神经网络创建一个具有离散动作空间的随机参与者。你也可以用同样的方法对连续随机参与者使用递归神经网络。

创建环境并获取观察和行动信息。

env = rlPredefinedEnv (“CartPole-Discrete”);ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(ENV);numobs = obsinfo.dimension(1);numdiscreteact = numel(Actinfo.Elements);

为演员创建一个经常性的深神经网络。要创建经常性的神经网络,请使用asequenceInputlayer.作为输入层并包括至少一个lstmlayer.

ActorNetWork = [sequenceInputlayer(numobs,'正常化',“没有”,“名字”,'状态')全连接列(8,“名字”,'fc') reluLayer (“名字”,'relu') lstmLayer (8,'OutputMode',“序列”,“名字”,'lstm') fullyConnectedLayer (numDiscreteAct“名字”,“输出”)softmaxlayer(“名字”,'actionprob')];

为网络创建一个随机演员表示。

ACTOROPTIONS = RLREPRESENTATIONOPTIONS(“LearnRate”,1e-3,'gradientthreshold',1);Actor = rlstochastOrtorrepresentation(Actornetwork,Obsinfo,Actinfo,......'观察','状态', actorOptions);
介绍了R2020a