主要内容

rlVectorQValueFunction

向量核反应能量函数近似者强化学习代理

自从R2022a

描述

对象实现了矢量核反应能量函数的估计值,您可以使用作为一个评论家与强化学习代理一个离散的行动空间。矢量核反应能量函数的映射一个环境观测向量的每个元素代表预期的折扣累积长期奖励当代理人开始从国家对应于给定的观察和执行相对应的动作元素数量(后来和遵循一个给定的政策)。一个向量核反应能量函数评论家因此只需要观察作为输入。当你创建一个rlVectorQValueFunction评论家,如使用它来创建一个代理rlQAgent,rlDQNAgent,rlSARSAAgent。创建表示更多的信息,请参阅创建政策和价值功能

创建

描述

例子

评论家= rlVectorQValueFunction (,observationInfo,actionInfo)创建多输出核反应能量函数评论家与一个离散行动空间。在这里,深层神经网络用作一个近似模型,而且必须只有观察作为输入和一个输出层有尽可能多的元素数量的离散动作。与环境相关的网络输入层自动观测通道根据尺寸规格observationInfo。这个函数设置ObservationInfoActionInfo的属性评论家observationInfoactionInfo分别输入参数。

例子

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

例子

评论家= rlVectorQValueFunction ({basisFcn,W0},observationInfo,actionInfo)创建多输出核反应能量函数评论家与一个离散行动空间基本使用一个自定义的基函数作为近似模型。双元素单元第一个输入参数是一个数组的第一个元素处理basisFcn自定义基函数和的第二个元素是初始权重矩阵W0。这里的基函数必须只有观测数据作为输入,和W0必须有尽可能多的列的数量可能的行动。这个函数设置ObservationInfoActionInfo的属性评论家的输入参数observationInfoactionInfo,分别。

评论家= rlVectorQValueFunction (___UseDevice =useDevice)指定的设备用于执行计算评论家对象,并设置UseDevice的属性评论家useDevice输入参数。您可以使用该语法与任何以前的输入参数组合。

输入参数

全部展开

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

请注意

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

网络必须尽可能多的输入层环境观测通道的数量(每个输入层接收来自一个观测通道输入),和一个输出层和尽可能多的元素的数量可能离散行动。

rlQValueFunction复发性深层神经网金宝app络对象支持。

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

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

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

自定义的基函数,指定为一个函数处理一个用户定义的MATLAB函数。用户定义函数可以是一个匿名函数或一个函数在MATLAB的道路。评论家的输出向量c = W ' * B,在那里W是一个包含可学的参数矩阵,B是返回的列向量自定义基函数。的每个元素一个近似的价值从观察到的状态执行相应的动作。

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

B = myBasisFunction (obsN obs1, obs2,…)

在这里,obs1obsN以相同的顺序输入相同的数据类型和维度中定义的通道吗observationInfo

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

基函数的初始值权重W,指定为一个矩阵的行数作为基函数的输出向量的长度和尽可能多的列的数量可能的行动。

属性

全部展开

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

rlVectorQValueFucntion设置ObservationInfo的属性评论家的输入参数observationInfo

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

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

请注意

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

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

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

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

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

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

请注意

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

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

例子:“图形”

对象的功能

rlDQNAgent 深Q-network (DQN)强化学习代理
rlQAgent q学习的强化学习代理
rlSARSAAgent 撒尔沙强化学习代理
getValue 获得估计价值从评论家给定环境的观察和行动
getMaxQValue 获得最大估计价值在所有可能的行动从核反应能量函数评论家与离散的行动空间,鉴于环境观测
评估 评估函数近似者对象给定的观察(或observation-action)输入数据
梯度 评价梯度函数近似者对象给定的输入数据观察和行动
加速 选择加速计算梯度的近似者对象基于神经网络
getLearnableParameters 从代理,获得可学的参数值函数近似者,或政策对象
setLearnableParameters 设置代理可学的参数值,函数近似者,或政策对象
setModel 集函数近似模型的演员或评论家
getModel 从演员或评论家得到函数近似者模型

例子

全部折叠

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

obsInfo = rlNumericSpec (1 [4]);

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

actInfo = rlFiniteSetSpec ([7 5 3]);

一个向量核反应能量函数只需要观察作为输入并返回一个作为输出向量和尽可能多的元素的数量可能的行动。每个输出元素代表的价值预期的折扣累积长期奖励采取对应的行动从国家目前的观察,和之后的政策。

模型参数化向量核反应能量函数的评论家,使用一个输入神经网络层(接受观察的内容频道,是指定的obsInfo)和一个输出层(返回值向量的所有可能的行动,所定义的actInfo)。

层对象的网络定义为一个数组,并获得观测空间的维数和可能的行动环境规范的对象。

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

网络转换为一个dlnetwork对象,并显示权重的数量。

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

创建评论家使用网络,以及观察和操作规范对象。

评论家= rlVectorQValueFunction(净、obsInfo actInfo)
评论家= rlVectorQValueFunction属性:ObservationInfo: [1 x1 rl.util。rlNumericSpec] ActionInfo: [1 x1 rl.util。rlFiniteSetSpec] UseDevice:“cpu”

检查你的评论家,使用getValue返回一个随机的值观察,使用当前的网络权值。有一个值的三种可能的行动。

v = getValue(评论家,{兰德(obsInfo.Dimension)})
v =3 x1单一列向量0.0761 -0.5906 0.2072

您现在可以使用评论家创建一个代理对环境给予规范所描述的对象。代理的例子可以处理一个离散的行动空间,连续观察空间,并使用一个向量核反应能量函数评论家,rlQAgent,rlDQNAgent,rlSARSAAgent

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

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

obsInfo = rlNumericSpec (1 [4]);

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

actInfo = rlFiniteSetSpec ([7 5 3]);

一个向量核反应能量函数只需要观察作为输入并返回一个作为输出向量和尽可能多的元素的数量可能的行动。每个输出元素代表的价值预期的折扣累积长期奖励采取对应的行动从国家目前的观察,和之后的政策。

模型参数化向量核反应能量函数的评论家,使用一个输入神经网络层(接受观察的内容频道,是指定的obsInfo)和一个输出层(返回值向量的所有可能的行动,所定义的actInfo)。

层对象的网络定义为一个数组,并获得观测空间的维数和可能的行动环境规范的对象。名网络输入netObsIn(所以你可以显式地将它与观测输入通道)。

网= [featureInputLayer obsInfo.Dimension (1) Name =“netObsIn”)fullyConnectedLayer (32) tanhLayer fullyConnectedLayer(元素个数(actInfo.Elements)));

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

净= dlnetwork(净)
网= dlnetwork属性:层:[4 x1 nnet.cnn.layer.Layer]连接:[3 x2表]可学的:[4 x3表]状态:[0 x3表]InputNames: {“netObsIn”} OutputNames: {“fc_2”}初始化:1观点总结总结。
总结(净)
初始化:可学的真正的数字:259输入:1“netObsIn”4特性

使用网络,创建了评论家观测规范对象,和网络输入层的名称。指定的网络输入层,netObsIn,与环境相关的观察,因此必须具有相同的数据类型和维度观察通道中指定obsInfo

评论家= rlVectorQValueFunction(网络,obsInfo actInfo,ObservationInputNames =“netObsIn”)
评论家= rlVectorQValueFunction属性:ObservationInfo: [1 x1 rl.util。rlNumericSpec] ActionInfo: [1 x1 rl.util。rlFiniteSetSpec] UseDevice:“cpu”

检查你的评论家,使用getValue函数返回一个随机的值观察,使用当前的网络权值。函数返回一个值的三种可能的行动。

v = getValue(评论家,{兰德(obsInfo.Dimension)})
v =3 x1单一列向量0.0435 0.1906 0.7386

您现在可以使用评论家创建一个代理对环境给予规范所描述的对象。代理的例子可以处理一个离散的行动空间,连续观察空间,并使用一个向量核反应能量函数评论家,rlQAgent,rlDQNAgent,rlSARSAAgent

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

创建一个观察对象(或者使用规范getObservationInfo从环境中提取规范对象)。对于本例,观察空间定义为组成的两个渠道,第一个连续2乘2矩阵和第二个携带标量可以假设只有两个值,0和1。

obsInfo = [rlNumericSpec (2 [2]) rlFiniteSetSpec ([0 1]];

创建一个有限集行动规范对象(或者使用getActionInfo从环境中提取规范对象离散行动空间)。在这个例子中,定义了操作空间有限集合组成的三种可能的向量,[1 - 2],[3 - 4],[5 - 6]。

actInfo = rlFiniteSetSpec ({[1 - 2], [3 - 4], [5 - 6]});

一个向量核反应能量函数只需要观察作为输入并返回一个作为输出向量和尽可能多的元素的数量可能的行动。

模型参数化向量核反应能量函数的评论家,使用一个自定义的基函数有两个输入(接收环境观察频道的内容,规定obsInfo)。

创建一个函数,它返回一个向量的四元素,给定一个观察作为输入。

myBasisFcn = @ (obsA obsB) [obsA (1,1) + obsB (1) ^ 2;obsA (2, 1) -obsB (1) ^ 2;obsA (1、2) ^ 2 + obsB (1);obsA (2, 2) ^ 2-obsB (1)];

评论家的输出向量c = W ' * myBasisFcn (obsA obsB),在那里W是一个权重矩阵必须有尽可能多的行作为基函数的长度输出和尽可能多的列的数量可能的行动。

的每个元素c代表预期的长期累积奖励一个代理启动时从给定的观察和采取对应的行动被认为是元素的位置(和遵循政策之后)。W的元素是可学的参数。

定义一个初始参数矩阵。

W0 =兰德(4,3);

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

评论家= rlVectorQValueFunction ({myBasisFcn, W0}, obsInfo actInfo)
评论家= rlVectorQValueFunction属性:ObservationInfo: [2 x1 rl.util。RLDataSpec] ActionInfo: [1 x1 rl.util。rlFiniteSetSpec] UseDevice:“cpu”

检查你的评论家,使用getValue函数返回一个随机的值观察,使用当前的参数矩阵。函数返回一个值的三种可能的行动。

v = getValue(评论家,{兰德(2,2),0})
v =3×11.3192 0.8420 1.5053

注意,评论家并不强制约束的离散集合的元素。

v = getValue(评论家,{兰德(2,2),1})
v =3×12.7890 1.8375 3.0855

您现在可以使用评论家创建一个代理对环境给予规范所描述的对象。代理的例子可以处理一个离散的行动空间,混合观测空间,并使用一个向量核反应能量函数评论家,rlQAgent,rlDQNAgent,rlSARSAAgent

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

创建一个环境和获得观察和操作规范对象。

env = rlPredefinedEnv (“CartPole-Discrete”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

一个向量核反应能量函数只需要观察作为输入并返回一个作为输出向量和尽可能多的元素的数量可能的行动。每个输出元素代表的价值预期的折扣累积长期奖励采取对应的行动从国家目前的观察,和之后的政策。

模型参数化向量核反应能量函数的评论家,使用一个输入层递归神经网络(接受观察的内容频道,是指定的obsInfo)和一个输出层(返回值向量的所有可能的行动,所定义的actInfo)。

层对象的网络定义为一个数组,并获得观测空间的维数和可能的行动环境规范的对象。创建一个周期性网络,使用sequenceInputLayer作为输入层(大小等于观测通道的尺寸的数量),包括至少一个lstmLayer

网= [sequenceInputLayer (obsInfo.Dimension (1) fullyConnectedLayer (50) reluLayer lstmLayer (20) fullyConnectedLayer (20) reluLayer fullyConnectedLayer(元素个数(actInfo.Elements)));

网络转换为一个dlnetwork对象,并显示权重的数量。

网= dlnetwork(净);总结(净)
初始化:真很多可学的:6.3 k输入:1“sequenceinput”序列输入4维度

创建评论家使用网络,以及观察和操作规范对象。

评论家= rlVectorQValueFunction(网络,obsInfo actInfo);

检查你的评论家,使用getValue函数返回一个随机的值观察和行动,使用当前的网络权值。

v = getValue(评论家,{兰德(obsInfo.Dimension)})
v =2 x1单一列向量0.0136 - 0.0067

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

getState(批评)
ans =2×1单元阵列{20 x1单}{20 x1单}
评论家=设置状态(评论家,{-0.01 *单(兰德(20日1)),1)0.01 *单(兰德(20日)});

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

(价值、州)= getValue(评论家,{兰德([obsInfo。维度5 9])});

显示的值对应于第七元素观察序列在第四序列。

值(1、4、7)
ans =0.0394

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

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

您现在可以使用评论家创建一个代理对环境给予规范所描述的对象。代理的例子可以处理一个离散的行动空间,连续观察空间,并使用一个向量核反应能量函数评论家,rlQAgent,rlDQNAgent,rlSARSAAgent

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

版本历史

介绍了R2022a