主要内容

rlStochasticActorRepresentation

强化学习智能体的随机角色表示

描述

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

创建

描述

离散作用空间随机参与者

例子

discActor= rlStochasticActorRepresentation (observationInfodiscActionInfo“观察”,obsName使用深神经网络创建一个带有离散动作空间的随机演员作为函数的估计值。这里,的输出层必须有尽可能多的元素可能的离散动作的数量。该语法设置ObservationInfoActionInfo的属性discActor的输入observationInfodiscActionInfo,分别。obsName的输入层的名称

例子

discActor= rlstochasticReRepresentation({basisFcnW0},observationInfoactionInfo使用自定义基函数创建一个离散空间随机演员,作为底层近似器。第一个输入参数是一个双元素单元,其中第一个元素包含句柄basisFcn到自定义基本函数,第二个元素包含初始权重矩阵W0.该语法设置ObservationInfoActionInfo的属性discActor的输入observationInfoactionInfo,分别。

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

连续动作空间高斯Actor

例子

接触器= rlStochasticActorRepresentation (observationInfocontActionInfo“观察”,obsName利用深度神经网络创建具有连续动作空间的高斯随机行动者作为函数的估计值。这里,的输出层元素的数量必须是连续动作空间维度数的两倍。该语法设置ObservationInfoActionInfo的属性接触器的输入observationInfocontActionInfo分别。obsName的输入层的名称

请注意

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

接触器= rlStochasticActorRepresentation (___选项创造连续的动作空间,高斯行动者接触器使用额外的选项选项集,这是一个rlRepresentationOptions对象。该语法设置选项的属性接触器到了选项输入参数。您可以将此语法与前面的任何输入参数组合一起使用。

输入参数

全部展开

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

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

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

请注意

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

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

rlStochasticActorRepresentation对象支持递归深度金宝app神经网络。

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

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

例子:{'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.ustevice.表示选项,忽略其他训练和学习率选项。

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

rlStochasticActorRepresentation设置ObservationInfo的属性接触器或者discActor到输入observationInfo

你可以提取observationInfo来自现有环境或代理商使用getobservationInfo..您还可以使用手动构造规范rlFiniteSetSpec或者rlnumericspec.

动作规格,指定为rlFiniteSetSpec或者rlnumericspec.对象。这些对象定义属性,如维度、数据类型和动作信号的名称。

对于离散的动作空间行动者,rlStochasticActorRepresentationActionInfo到输入discActionInfo,它一定是rlFiniteSetSpec对象。

对于一个连续动作空间演员来说,rlStochasticActorRepresentationActionInfo到输入contActionInfo,它一定是rlnumericspec.对象。

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

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

对象的功能

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

例子

全部收缩

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

obsInfo = rlNumericSpec([4 1]);

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

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

为参与者创建一个深度神经网络近似器。网络的输入(这里称为状态)必须接受四元素矢量(刚刚定义的观察向量obsInfo)及其输出(这里称为actionProb)必须是三元素矢量。输出矢量的每个元素必须在0和1之间,因为它表示执行三种可能的三种动作的概率(如图所定义)actInfo).使用softmax作为输出层来实现这个要求。

net = [featureinputlayer(4,“归一化”“没有”“名字”'状态') fullyConnectedLayer (3“名字”'fc')softmaxlayer(“名字”'actionprob'));

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

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

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

ACT = GetAction(演员,{[1 1 1 1]});{1}
ans = 10

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

创建一个观察规范对象(或者使用getobservationInfo.从环境中提取规范对象)。对于本例,将观测空间定义为连续的六维空间,因此单个观测是包含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 1]),“归一化”“没有”“名字”“myobs”) fullyConnectedLayer (2“名字”“infc”));% 2乘1输出%路径层的平均值(2乘1输入和2乘1输出)%使用scalingLayer缩放范围meanPath = [tanhLayer(“名字”'tanh');%输出范围:(-1,1)ScalingLayer(“名字”“规模”'规模'actInfo.UpperLimit)];%输出范围:(-10,10)%路径层用于标准偏差(2 * 1输入和输出)%使用软加层使其非负sdevPath = softplusLayer (“名字”'splus');将两个输入(沿维度#3)连接起来,形成单个(4 × 1)输出层支出= concatenationLayer (3 2“名字”“mean&sdev”);给网络对象添加层net = layergraph(Inpath);net = addlayers(Net,意思);net = addlayers(net,sdevpath);net = addlayers(网,低估);%Connect层:平均值路径输出必须连接到ConcateNationLayer的第一个输入网= connectLayers(网络,“infc”“双曲正切/”);%连接inPath的输出到meanPath的输入网= connectLayers(网络,“infc”'Splus / In');%连接到SDEVPATH输入的Inclation输出输出网= connectLayers(网络,“规模”“mean&sdev /三机一体”);将meanPath的输出连接到gaussPars输入#1网= connectLayers(网络,'splus'“mean&sdev / in2”);% connect输出的sdevPath到gaussPars输入#2%的阴谋网络情节(净)

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

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

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

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

actor = rlStochasticActorRepresentation(net, obsInfo, actInfo,“观察”“myobs”actorOpts)
actor = rlStochasticActorRepresentation with properties:rlNumericSpec . ObservationInfo: [1x1 rl.util.]rlnumericspec.] Options: [1x1 rl.option.rlRepresentationOptions]

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

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

现在可以使用actor创建合适的代理(例如rlACAgentrlpgagent.,或rlPPOAgent代理)。

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

obsInfo = rlNumericSpec([2 1]);

基于自定义基函数的随机行为体不支持连续动作空间。金宝app因此,创建一个离散行动空间说明对象(或替代使用getActionInfo从具有离散操作空间的环境中提取规范对象)。对于本例,将操作空间定义为一个有限集,包含3个可能的值(命名为75, 和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 = rlStochasticActorRepresentation with properties:rlFiniteSetSpec: [1x1 rl.util.]rlnumericspec.] Options: [1x1 rl.option.rlRepresentationOptions]

要检查演员,请使用努力函数返回三种可能操作中的一种,这取决于给定的随机观察结果和当前参数矩阵。

v = getAction(演员,{兰德(2,1)})
v =1 x1单元阵列{[3]}

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

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

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

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

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

actorNetwork = [sequenceInputLayer(nummob,“归一化”“没有”“名字”'状态') fullyConnectedLayer (8,“名字”'fc') reluLayer (“名字”'relu') lstmLayer (8,“OutputMode”“序列”“名字”“lstm”) fullyConnectedLayer (numDiscreteAct“名字”“输出”)softmaxlayer(“名字”'actionprob')];

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

ACTOROPTIONS = RLREPRESENTATIONOPTIONS(“LearnRate”1 e - 3,'gradientthreshold'1);演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,...“观察”'状态', actorOptions);
介绍了R2020a