主要内容

rlStochasticActorRepresentation

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

描述

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

创建

描述

离散作用空间随机参与者

实例

discActor= rlStochasticActorRepresentation (,observationInfo,discActionInfo“观察”,obsName)利用深度神经网络创建具有离散动作空间的随机参与者作为函数逼近器。这里,输出层必须具有尽可能多的元素以满足可能的离散操作数。此语法设置ObservationInfo行动信息的属性discActor的输入observationInfodiscActionInfo分别地obsName的输入层的名称

实例

discActor= rlStochasticActorRepresentation ({basisFcn,W0},observationInfo,actionInfo)使用自定义基函数作为基本近似器创建离散空间随机行动者。第一个输入参数是一个包含两个元素的单元格,其中第一个元素包含句柄basisFcn为自定义基函数,第二个元素包含初始权矩阵W0.该语法设置ObservationInfo行动信息的属性discActor的输入observationInfoactionInfo分别地

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

连续动作空间高斯Actor

实例

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

笔记

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

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

输入参数

全部展开

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

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

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

笔记

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

网络输入层必须与中定义的信号具有相同的顺序、相同的数据类型和维数ObservationInfo.此外,这些输入层的名称必须与obsName.网络输出层必须具有与中定义的信号相同的数据类型和尺寸行动信息

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

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

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

例子:{' my_obs '}

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

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

B = myBasisFunction (obsN obs1, obs2,…)

在这里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对象。这些对象定义属性,如维度、数据类型和动作信号的名称。

对于离散的动作空间行动者,rlStochasticActorRepresentation设置行动信息输入discActionInfo,它一定是rlFiniteSetSpec对象。

对于连续动作空间演员来说,rlStochasticActorRepresentation设置行动信息输入contActionInfo,它一定是rlNumericSpec对象。

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

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

目标函数

rlACAgent 演员-评论家强化学习代理
rlPGAgent 策略梯度强化学习代理
RLP发泡剂 最近策略优化强化学习代理
rlSACAgent 软演员-评论家强化学习代理
getAction 从给定环境观察的代理或参与者表示中获取操作

例子

全部折叠

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

obsInfo = rlNumericSpec([4 1]);

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

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

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

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

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

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

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

action = getAction(actor,{[1 1 1]});行为{1}
ans = 10

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

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

obsInfo = rlNumericSpec([6 1]);

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

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

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

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

%输入路径层(6×1输入和2×1输出)inPath = [imageInputLayer([6 1 1]),“归一化”,“没有”,“姓名”,“myobs”) fullyConnectedLayer (2“姓名”,“infc”));%2乘1输出%路径层的平均值(2乘1输入和2乘1输出)%使用scalingLayer缩放范围平均路径=[tanhLayer(“姓名”,的双曲正切);%输出范围:(-1,1)scalingLayer (“姓名”,“规模”,“规模”,actInfo.上限];%输出范围:(-10,10)%路径层用于标准偏差(2 * 1输入和输出)%使用软加层使其非负sdevPath = softplusLayer (“姓名”,“splus”);将两个输入(沿维度#3)连接起来,形成单个(4 × 1)输出层outLayer=连接层(3,2,“姓名”,“mean&sdev”);给网络对象添加层网= layerGraph (inPath);网= addLayers(净,meanPath);网= addLayers(净,sdevPath);网= addLayers(净支出);%连接层:路径输出的平均值必须连接到级联层的第一个输入净=连接层(净,“infc”,“双曲正切/”);%连接inPath的输出到meanPath的输入净=连接层(净,“infc”,“splus /”);%连接inPath输出到sdevPath输入净=连接层(净,“规模”,“mean&sdev /三机一体”);%将meanPath的输出连接到gaussPars输入#1净=连接层(净,“splus”,“mean&sdev / in2”);%将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]

要检查你的演员,使用getAction从观察向量返回随机操作的步骤一(6,1),使用当前网络权重。

行动= getAction(演员,{1 (6,1)});行为{1}
ans=2x1单列向量-0.0763 9.6860

现在可以使用actor创建合适的代理(例如rlACAgent,rlPGAgent,或RLP发泡剂代理)。

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

obsInfo = rlNumericSpec([2 1]);

基于自定义基函数的随机参与者不支持连续动作空间金宝app离散行动空间规范对象(或替代使用)getActionInfo从具有离散动作空间的环境中提取规范对象)。对于本例,将动作空间定义为一个由3个可能值(名为7.,5.,3.在这种情况下)。

actInfo = rlFiniteSetSpec([7 5 3]);

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

MyBasisCfCn=@(myobs)[myobs(2)^2;myobs(1);exp(myobs(2));abs(myobs(1))]
myBasisFcn=function_handle与价值:@(肌瘤)[肌瘤(2)^2;肌瘤(1);实验(肌瘤(2));abs(肌瘤(1))]

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

定义一个初始参数矩阵。

W0 =兰德(4,3);

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

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

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

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

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

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

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

env=rlPredefinedEnv(“CartPole离散型”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);numObs = obsInfo.Dimension (1);numDiscreteAct =元素个数(actInfo.Elements);

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

actorNetwork = [sequenceInputLayer(nummob,“归一化”,“没有”,“姓名”,“状态”) fullyConnectedLayer (8,“姓名”,“俱乐部”)雷卢耶(“姓名”,“relu”)第1层(8,“OutputMode”,“顺序”,“姓名”,“lstm”)完全连接层(numDiscreteAct,“姓名”,“输出”) softmaxLayer (“姓名”,“actionProb”));

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

actorOptions = rlRepresentationOptions (“LearnRate”1 e - 3,“GradientThreshold”1);演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,...“观察”,“状态”,动植物);
在R2020a中引入