主要内容

rlDiscreteCategoricalActor

随机分类演员为强化学习代理一个离散的行动空间

自从R2022a

描述

对象实现一个函数的估计值作为一个随机的演员在强化学习代理一个离散的行动空间。离散分类演员需要一个环境观察作为输入并返回输出随机行动从分类抽样(也称为Multinoulli)概率分布,从而实现参数化随机政策。当你创建一个rlDiscreteCategoricalActor对象,使用它来创建一个合适的代理,等rlACAgentrlPGAgent。创建表示更多的信息,请参阅创建政策和价值功能

创建

描述

例子

演员= rlDiscreteCategoricalActor (,observationInfo,actionInfo)创建一个随机的演员与一个离散的行动空间,使用深层神经网络作为潜在的近似模型。对于这个演员,actionInfo必须指定一个离散的行动空间。与环境相关的网络输入层自动观测通道根据尺寸规格observationInfo。网络必须要有一个输出层和尽可能多的元素的数量可能离散行动,中指定actionInfo。这个函数设置ObservationInfoActionInfo的属性演员的输入observationInfoactionInfo,分别。

例子

演员= rlDiscreteCategoricalActor (,observationInfo,actionInfoObservationInputNames =netObsNames)指定的名称与环境相关的网络输入层观测通道。函数分配,按顺序排列的,每个环境观察通道中指定observationInfo指定的层相应名称的字符串数组netObsNames。因此,网络的输入层,命令的名称netObsNames,必须具有相同的数据类型和维度观察通道,是命令observationInfo

例子

演员= rlDiscreteCategoricalActor ({basisFcn,W0},observationInfo,actionInfo)创建一个离散空间随机演员基本使用一个自定义的基函数作为近似模型。双元素单元第一个输入参数是一个数组的第一个元素处理basisFcn自定义基函数和的第二个元素是初始权重矩阵W0。这个函数设置ObservationInfoActionInfo的属性演员的输入observationInfoactionInfo,分别。

演员= rlDiscreteCategoricalActor (___UseDevice =useDevice)指定的设备用来执行计算操作演员对象,并设置UseDevice的属性演员useDevice输入参数。您可以使用该语法与任何以前的输入参数组合。

输入参数

全部展开

深层神经网络用作底层接近者在演员,指定为以下之一:

请注意

在不同的网络表示选项,dlnetwork是首选的,因为它有内置的验证检查,支持自动分化。金宝app如果你通过另一个网络对象作为输入参数,转换为内部dlnetwork对象。然而,最佳实践是将其他表示dlnetwork显式地之前使用它来创建一个评论家或演员强化学习代理。你可以使用dlnet = dlnetwork(净),在那里任何深度学习神经网络工具箱™对象。由此产生的dlnetdlnetwork对象,你使用你的批评或者演员。这种做法允许更大程度的洞察力和控制的情况下,转换并非易事,可能需要额外的规范。

网络必须尽可能多的输入层环境观测通道的数量(每个输入层接收来自一个观测通道输入),和一个输出层和尽可能多的元素的数量可能离散行动。因为演员必须返回执行的概率每个可能的行动,该软件会自动添加一个softmaxLayer最后输出层如果不显式地指定它。计算行动时,演员然后随机样本分布返回一个行动。

rlDiscreteCategoricalActor复发性深层神经网金宝app络对象支持。例如,看到的从深度递归神经网络创建离散分类的演员

可学的参数的演员是深层神经网络的权重。深层神经网络层的列表,请参阅深度学习层的列表。更多信息为强化学习创造深层神经网络,看到的创建政策和价值功能

网络输入层名称对应于环境观察渠道,指定为字符串数组或单元阵列的特征向量。当你使用这个论点“ObservationInputNames”,该函数分配,按顺序排列的,每个环境观测通道中指定observationInfo每个网络输入层由相应的指定名称的字符串数组netObsNames。因此,网络的输入层,命令的名称netObsNames,必须具有相同的数据类型和维度观察规范,是命令observationInfo

例子:{“NetInput1_airspeed”、“NetInput2_altitude”}

自定义的基函数,指定为一个函数处理一个用户定义的MATLAB函数。用户定义函数可以是一个匿名函数或一个函数在MATLAB的道路。要采取行动的数量根据当前观察,演员的输出,从分类分布与随机抽样概率p = softmax (W * B),在那里W是一个权重矩阵包含可学的参数和B是返回的列向量自定义基函数。的每个元素p代表的概率从观察到的状态执行相应的动作。

你的基函数必须有以下签名。

B = myBasisFunction (obsN obs1, obs2,…)

在这里,obs1obsN在相同的顺序输入,与相同的数据类型和维度环境观测通道中定义observationInfo

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

基函数的初始值权重W,指定为一个矩阵有尽可能多的行返回的矢量基函数的长度和尽可能多的列行动空间的维数。

属性

全部展开

观测规范,指定为一个rlFiniteSetSpecrlNumericSpec对象或数组包含一个混合的对象。数组中每个元素定义了一个环境观测通道的特性,比如尺寸,数据类型和名称。

rlDiscreteCategoricalActor设置ObservationInfo的属性演员输入observationInfo

您可以提取ObservationInfo从现有的环境或代理使用getObservationInfo。你也可以手动构建规范。

动作规范,指定为一个rlFiniteSetSpec对象。这个对象定义环境行动通道的属性,如尺寸,数据类型和名称。

请注意

只有一个动作频道是被允许的。

rlDiscreteCategoricalActor设置ActionInfo的属性评论家输入actionInfo

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

计算设备用于执行操作,如梯度计算,参数更新和预测在训练和仿真,指定为“cpu”“图形”

“图形”选择需要并行计算工具箱和CUDA™软件®使英伟达®GPU。支持gpu看到更多的信息金宝appGPU计算的需求(并行计算工具箱)

您可以使用gpuDevice(并行计算工具箱)查询或选择一个当地的GPU设备使用MATLAB®

请注意

培训或模拟一个代理在GPU包括特定于设备的数字舍入错误。这些错误可以产生不同的结果相比,使用一个CPU执行相同的操作。

加快培训通过使用并行处理多个核心,您不需要使用这个参数。相反,当训练你的代理,使用一个rlTrainingOptions对象的UseParallel选项设置为真正的。关于培训的更多信息使用多核处理器和gpu培训,明白了培训代理商使用并行计算和gpu

例子:“图形”

对象的功能

rlACAgent Actor-critic (AC)强化学习代理
rlPGAgent 策略梯度(PG)强化学习代理
rlPPOAgent 近端政策优化(PPO)强化学习代理
getAction 从代理,获得动作演员,或政策对象环境的观察
评估 评估函数近似者对象给定的观察(或observation-action)输入数据
梯度 评价梯度函数近似者对象给定的输入数据观察和行动
加速 选择加速计算梯度的近似者对象基于神经网络
getLearnableParameters 从代理,获得可学的参数值函数近似者,或政策对象
setLearnableParameters 设置代理可学的参数值,函数近似者,或政策对象
setModel 集函数近似模型的演员或评论家
getModel 从演员或评论家得到函数近似者模型

例子

全部折叠

创建一个观察对象(或者使用规范getObservationInfo从环境中提取规范对象)。对于本例,观察空间定义为一个连续的四维空间,所以只有一个观测通道,携带一个列向量包含四个双打。

obsInfo = rlNumericSpec (1 [4]);

创建一个操作规范对象(或者使用getActionInfo从环境中提取规范对象)。在这个例子中,定义了三个动作组成的行动空间,贴上-10 0,10。

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

一个离散分类演员实现参数化随机离散行动空间政策。这演员需要一个观察作为输入并返回输出随机行动采样(在有限数量的可能的行动)从分类概率分布。

模型中的概率分布的演员,使用一个输入神经网络层(接收环境观察频道的内容,规定obsInfo)和一个输出层。

输出层必须返回一个向量的概率采取每个可能的行动,是指定的actInfo。因此,输出向量的每个元素都必须在0和1之间。使用softmax作为输出层执行此要求(软件自动添加softmaxLayer最后输出层如果不指定它明确)。

请注意,刺激(obsInfo.Dimension)返回总数的维度观察空间无论观察空间安排作为一个列向量,行向量或矩阵,而元素个数(actInfo.Dimension)返回的元素数量的离散动作空间。

层的网络定义为一个数组对象。

网= [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (16) reluLayer fullyConnectedLayer (16) reluLayer fullyConnectedLayer(元素个数(actInfo.Elements)));

网络转换为一个dlnetwork对象和显示可学的参数的数量。

网= dlnetwork(净);总结(净)
初始化:可学的真正的数字:403输入:1“输入”4特性

创建的演员rlDiscreteCategoricalActor使用网络,观察和行动规范对象。网络有多个输入层时,会自动与环境相关的观测通道根据尺寸规格obsInfo

演员= rlDiscreteCategoricalActor(网,obsInfo, actInfo);

检查你的演员,使用getAction返回一个行动从一个随机观测向量,鉴于目前网络权重。

行动= getAction(演员,{兰德(obsInfo.Dimension)});行为
行动=1 x1单元阵列{[-10]}

返回操作的概率分布,给定一个观察,使用评估

复审委员会=评估(演员,{兰德(obsInfo.Dimension)});复审委员会{1}
ans =3 x1单一列向量0.3736 0.1875 0.4389

您现在可以使用演员(以及一个评论家)创建一个代理对环境给观测规范所描述的对象。代理的例子可以处理连续观测的空间,一个离散的行动空间,并使用一个离散分类演员,rlACAgent,rlPGAgent,rlPPOAgent,rlTRPOAgent

有关创建接近者对象的更多信息,如演员和评论家,明白了创建政策和价值功能

创建一个观察对象(或者使用规范getObservationInfo从环境中提取规范对象)。对于本例,观察空间定义为一个连续的四维空间,所以只有一个观测通道,携带一个列向量包含四个双打。

obsInfo = rlNumericSpec (1 [4]);

创建一个操作规范对象(或者使用getActionInfo从环境中提取规范对象)。在这个例子中,定义了三个动作组成的行动空间,贴上-10 0,10。

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

一个离散分类演员实现参数化随机离散行动空间政策。这演员需要一个观察作为输入并返回输出随机行动采样(在有限数量的可能的行动)从分类概率分布。

模型中的概率分布的演员,使用一个输入神经网络层(接收环境观察频道的内容,规定obsInfo)和一个输出层。输出层必须返回一个向量的概率为每个可能的行动,是指定的actInfo。因此,输出向量的每个元素都必须在0和1之间。使用softmax作为输出层执行此要求(软件自动添加softmaxLayer最后输出层如果不指定它明确)。

请注意,刺激(obsInfo.Dimension)返回总数的维度观察空间无论观察空间安排作为一个列向量,行向量或矩阵,而元素个数(actInfo.Dimension)返回的元素数量的离散动作空间。

层的网络定义为一个数组对象。为输入层指定一个名称,所以你以后可以显式地将它与观测通道。

网= [featureInputLayer (刺激(obsInfo.Dimension),Name =“netObsIn”)fullyConnectedLayer (32) reluLayer fullyConnectedLayer(元素个数(actInfo.Elements)) softmaxLayer (Name =“actionProb”));

网络转换为一个dlnetwork对象和显示可学的参数的数量(重量)。

网= dlnetwork(净);总结(净)
初始化:可学的真正的数字:259输入:1“netObsIn”4特性

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

演员= rlDiscreteCategoricalActor(网络,obsInfo actInfo,观察=“netObsIn”);

验证你的演员,使用getAction返回一个行动从一个随机的观察,鉴于目前网络权重。

行动= getAction(演员,{兰德(obsInfo.Dimension)});行为{1}
ans = -10

返回的可能行为的概率分布的函数随机观察,鉴于当前网络的权重,使用评估

复审委员会=评估(演员,{兰德(obsInfo.Dimension)})
复审委员会=1 x1单元阵列{3 x1单}
复审委员会{1}
ans =3 x1单一列向量0.3038 0.2658 0.4304

您现在可以使用演员(以及一个评论家)创建一个代理对环境给观测规范所描述的对象。代理的例子可以处理连续观测的空间,一个离散的行动空间,并使用一个离散分类演员,rlACAgent,rlPGAgent,rlPPOAgent,rlTRPOAgent

有关创建接近者对象的更多信息,如演员和评论家,明白了创建政策和价值功能

创建一个观察对象(或者使用规范getObservationInfo从环境中提取规范对象)。对于本例,观察空间定义为组成的两个渠道,第一个带着一个二维向量在连续空间,第二个携带一个二维向量,可以假设只有三个值,- - - - - - [1 - 2],[0,1],[1 3]。因此一个观察由两个二维向量,一个连续,另离散。

2 obsInfo = [rlNumericSpec ([1]) rlFiniteSetSpec ({- [1 - 2], [0, 1], [1 3]}));

创建一个离散行动空间规范对象(或者使用getActionInfo从环境中提取规范对象离散行动空间)。在这个例子中,定义了操作空间有限集合组成的三种可能的行动,标记7,5和3。

actInfo = rlFiniteSetSpec ([7 5 3]);

一个离散分类演员实现参数化随机离散行动空间政策。模型中的参数化概率分布的演员,用一个自定义的基函数有两个输入(接收环境观察频道的内容,规定obsInfo)。

创建一个函数,它返回一个向量的四元素,根据给定的观察。

myBasisFcn = @ (obsC obsD) [obsC (1) ^ 2-obsD (2) ^ 2;obsC (2) ^ 2-obsD (1) ^ 2;exp (obsC (2)) + abs (obsD (1));exp (obsC (1)) + abs (obsD (2)];

演员动作随机样本,根据概率分布softmax (W * myBasisFcn (obsC obsD))。在这里,W是一个权重矩阵,包含可学的参数,必须有尽可能多的行作为基函数的长度输出(在这个例子中,四个),和尽可能多的列的数量操作(在这个例子中,三个)。

定义一个初始参数矩阵。

W0 =兰德(4,3);

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

演员= rlDiscreteCategoricalActor ({myBasisFcn, W0}, obsInfo actInfo);

检查你的演员使用getAction函数返回的三种可能的行动,根据给定的随机观察和对当前参数矩阵。

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

注意,离散集约束不执行。

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

返回每个操作的函数的概率随机观察(鉴于目前权重),使用评估

复审委员会=评估(演员,{兰特(obsInfo (1) .Dimension),兰特(obsInfo (2) .Dimension)})
复审委员会=1 x1单元阵列{3 x1双}
复审委员会{1}
ans =3×10.3512 0.1519 0.4969

您现在可以使用演员(以及一个评论家)创建一个代理对环境给观测规范所描述的对象。代理可以使用一个混合的例子观测空间,一个离散的行动空间,并使用一个离散分类演员,rlACAgent,rlPGAgent,rlPPOAgentrlTRPOAgent不支持使用自定义基金宝app函数的演员或批评。

有关创建接近者对象的更多信息,如演员和评论家,明白了创建政策和价值功能

这个例子向您展示了如何创建一个随机的演员,一个离散的行动空间使用递归神经网络。

对于这个示例,使用相同的环境中使用火车PG代理Cart-Pole平衡系统。加载环境和获得观察和操作规范。

env = rlPredefinedEnv (“CartPole-Discrete”);obsInfo = getObservationInfo (env)
obsInfo = rlNumericSpec属性:LowerLimit:无穷UpperLimit:正的名字:“CartPole国家”描述:“x, dx,θ,dtheta”维度:[4 1]数据类型:“替身”
actInfo = getActionInfo (env)
actInfo = rlFiniteSetSpec属性:元素:-10[10]的名字:“CartPole行动”描述:[0 x0字符串]维度:[1]数据类型:“替身”

一个离散分类演员实现参数化随机离散行动空间政策。这演员需要一个观察作为输入并返回输出随机行动采样(在有限数量的可能的行动)从分类概率分布。

模型中的概率分布的演员,使用一个输入神经网络层(接收环境观察频道的内容,规定obsInfo)和一个输出层。

输出层必须返回一个向量的概率采取每个可能的行动,是指定的actInfo。因此,输出向量的每个元素都必须在0和1之间。使用softmax作为输出层执行此要求(软件自动添加softmaxLayer最后输出层如果不指定它明确)。

请注意,刺激(obsInfo.Dimension)返回总数的维度观察空间无论观察空间安排作为一个列向量,行向量或矩阵,而元素个数(actInfo.Dimension)返回的元素数量的离散动作空间。

层的网络定义为一个数组对象。创建一个周期性网络,使用sequenceInputLayer作为输入层,包括至少一个lstmLayer

网= [sequenceInputLayer (刺激(obsInfo.Dimension),Name =“netObsIn”)fullyConnectedLayer (8) reluLayer lstmLayer (8) fullyConnectedLayer (元素个数(actInfo.Elements));

网络转换为一个dlnetwork对象和显示可学的参数的数量(重量)。

网= dlnetwork(净);总结(净)
初始化:可学的真正的数字:602输入:1“netObsIn”序列输入4维度

创建一个离散分类演员使用网络环境的规范,网络输入层的名称与观测通道。

演员= rlDiscreteCategoricalActor(网络,obsInfo actInfo,观察=“netObsIn”);

检查你的演员使用getAction返回的两种可能的行为,根据给定的随机观察和对当前网络权重。

行动= getAction(演员,{兰德(obsInfo.Dimension)});行为{1}
ans = -10

返回的概率的两种可能的行动,使用评估。注意,返回的数据的类型,而不是

复审委员会=评估(演员,{兰德(obsInfo.Dimension)});复审委员会{1}
ans =2 x1单一列向量0.4704 - 0.5296

您可以使用getState设置状态提取和递归神经网络的当前状态的演员。

getState(演员)
ans =2×1单元阵列{8 x1单}{8 x1单}
演员=设置状态(演员,{-0.01 *单(兰德(8,1)),0.01 *单(兰德(8,1))});

评价演员使用连续的观测,使用序列长度(时间)维度。例如,获得5独立的序列组成的每一个行动9连续观测。

(行动、州)= getAction(演员,{兰德([obsInfo。维度5 9])});

显示相对应的行动第七观测序列的元素在第四序列。

action ={1}行动;行动(1、1、4、7)
ans = 10

递归神经网络的显示更新后的状态。

状态
状态=2×1单元阵列{8 x5单}{8 x5单}

您现在可以使用演员(以及一个评论家)创建一个代理对环境给观测规范所描述的对象。代理的例子可以处理连续观测的空间,一个离散的行动空间,并使用一个离散分类演员,rlACAgent,rlPGAgent,rlPPOAgentrlTRPOAgent不支持演员或批评与金宝app复发性神经网络。

更多信息在复发性神经网络的输入和输出格式,请参见算法部分lstmLayer。有关创建接近者对象的更多信息,如演员和评论家,明白了创建政策和价值功能

版本历史

介绍了R2022a