主要内容

rlValueFunction

值函数近似者对象强化学习代理

自从R2022a

描述

这个对象实现了价值函数近似者对象,您可以使用作为一个评论家强化学习代理。值函数是一个从一个环境观察映射到一个策略的价值。具体地说,它的输出是一个标量表示预期的折扣累积长期奖励当代理人开始从国家对应于给定的观察和执行行动之后根据给定的政策。当你创建一个rlValueFunction评论家,如使用它来创建一个代理rlACAgent,rlPGAgent,或rlPPOAgent代理。这个工作流程的一个例子,看到创建演员和评论家表示。创造价值函数的更多信息,请参阅创建政策和价值功能

创建

描述

例子

评论家= rlValueFunction (,observationInfo)创建值函数对象评论家使用神经网络近似模型,并设置ObservationInfo的属性评论家observationInfo输入参数。与环境相关的网络输入层自动观测通道根据尺寸规格observationInfo

例子

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

例子

评论家= rlValueFunction (选项卡,observationInfo)创建函数对象的值评论家与一个离散观测空间从表中,选项卡,这是一个rlTable对象包含一个列数组和尽可能多的元素的数量可能的观测。这个函数设置ObservationInfo的属性评论家observationInfo输入参数,在这种情况下,必须是一个标量rlFiniteSetSpec对象。

例子

评论家= rlValueFunction ({basisFcn,W0},observationInfo)创建函数对象的值评论家使用一个自定义的基函数作为潜在的估计值。双元素单元第一个输入参数是一个数组的第一个元素处理basisFcn一个自定义的基函数,第二个元素是初始权向量W0。这个函数设置ObservationInfo的属性评论家observationInfo输入参数。

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

输入参数

全部展开

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

请注意

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

网络必须尽可能多的输入层环境观测通道的数量(每个输入层接收来自一个观测通道输入),和一个输出层返回标量值。

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

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

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

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

值表,指定为一个rlTable对象包含一个列向量的长度等于从环境中可能的观测的数量。每个元素是预测折扣累积长期奖励当代理开始从给定的观察和采取最好的措施。这个向量的元素的可学的参数表示。

自定义的基函数,指定为一个函数处理一个用户定义的函数。用户定义函数可以是一个匿名函数或一个函数在MATLAB的道路。评论家的输出是标量c = W ' * B,在那里W是一种含有可学的参数和权向量B是返回的列向量自定义基函数。

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

B = myBasisFunction (obsN obs1, obs2,…)

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

例如如何使用一个基函数来创建一个值函数评论家与混合连续和离散观测空间,看到的创建混合观测空间价值函数评论家从定制的基函数

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

基函数的初始值权重W,指定为一个列向量的长度矢量基函数返回的。

属性

全部展开

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

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

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

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

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

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

请注意

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

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

例子:“图形”

对象的功能

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

例子

全部折叠

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

obsInfo = rlNumericSpec (1 [4]);

值函数批评以当前观测作为输入并返回一个标量输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。

在评论家,模型参数化的值函数使用一个输入神经网络层(返回观察的内容频道,按照奥林匹克广播服务公司信息)和一个输出层(返回标量值)。请注意,刺激(obsInfo.Dimension)返回总数的维度观察空间无论观察空间是一个列向量,行向量或矩阵。

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

网= [featureInputLayer (prod (obsInfo.Dimension));fullyConnectedLayer (10);reluLayer;fullyConnectedLayer (1)];

网络转换为一个dlnetwork对象。

dlnet = dlnetwork(净);

你可以画出网络使用情节并显示其主要特征,如权重的数量,使用总结

情节(dlnet)

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

总结(dlnet)
初始化:可学的真正的数字:61输入:1“输入”4特性

创建评论家使用网络和观测规范对象。

评论家= rlValueFunction (dlnet obsInfo)
评论家= rlValueFunction属性:ObservationInfo: [1 x1 rl.util。rlNumericSpec] UseDevice:“cpu”

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

v = getValue(评论家,{兰德(obsInfo.Dimension)})
v =0.5196

现在可以使用评论家(以及演员)创建一个代理对环境所描述的规范给定的观察对象。代理的例子可以处理连续观测空间,和使用价值函数评论家rlACAgent,rlPGAgent,rlPPOAgent,rlTRPOAgent

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

创建一个演员和一个评论家,您可以用它来定义一个强化学习代理如Actor-Critic (AC)代理。对于这个示例,创建演员和评论家的代理,可以训练对cart-pole环境中描述培训交流代理Cart-Pole平衡系统

首先,创建环境。然后,从环境中提取观测和操作规范。你需要这些规范定义代理和评论家。

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

值函数批评以当前观测作为输入并返回一个标量输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。

在评论家,模型参数化的值函数使用一个输入神经网络层(接受观察的内容频道,是指定的obsInfo)和一个输出层(返回标量值)。

层对象的网络定义为一个数组,并获得观测空间的维数从环境规范的对象。名网络输入层criticNetInput

CriticNet = [featureInputLayer (prod (obsInfo.Dimension));fullyConnectedLayer (10);reluLayer;fullyConnectedLayer (10);reluLayer;fullyConnectedLayer (1)];

网络转换为一个dlnetwork对象。

CriticNet = dlnetwork (CriticNet);

显示网络的主要特征,使用总结

总结(CriticNet)
初始化:可学的真正的数字:171输入:1“输入”4特性

创建一个评论家使用CriticNet和环境规范对象。设置观测的名字观察的名称criticNetwork输入层。

评论家= rlValueFunction (CriticNet obsInfo)
评论家= rlValueFunction属性:ObservationInfo: [1 x1 rl.util。rlNumericSpec] UseDevice:“cpu”

检查你的评论家使用getValue返回一个随机的值观察,鉴于目前网络权重。

v = getValue(评论家,{兰德(obsInfo.Dimension)})
v =-0.3229

AC代理使用参数化随机策略,对离散行动空间由一个离散实现分类的演员。

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

模型中的参数化政策的演员,使用一个输入神经网络层(接收环境观察频道的内容,规定obsInfo)和一个输出层。输出层必须返回一个向量的概率为每个可能的行动,是指定的actInfo

您可以获得的行为的数量actInfo规范。名网络输出actorNetOutput

actorNet = [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (10);reluLayer;fullyConnectedLayer (10);reluLayer;fullyConnectedLayer(元素个数(actInfo.Elements)];

网络转换为一个dlnetwork对象。

actorNet = dlnetwork (actorNet);

显示网络的主要特征,使用总结

总结(actorNet)
初始化:可学的真正的数字:182输入:1“输入”4特性

创建一个演员使用rlDiscreteCategoricalActor一起观察和操作规范。

演员= rlDiscreteCategoricalActor (actorNet obsInfo actInfo)
演员= rlDiscreteCategoricalActor属性:地理分布:[1 x1 rl.distribution。rlDiscreteGaussianDistribution] ObservationInfo: [1 x1 rl.util。rlNumericSpec] ActionInfo: [1 x1 rl.util。rlFiniteSetSpec] UseDevice:“cpu”

检查你的演员,使用getAction返回一个随机的行动从一个给定的观察,使用当前的网络权值。

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

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

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

指定的优化选项的演员和评论家rlOptimizerOptions。这些选项控制网络的学习参数。对于网络,将梯度阈值设置为1。对于这个示例,将学习速率设置为0.01。为参与者网络,设置学习速率为0.05。

criticOpts = rlOptimizerOptions (LearnRate = 1飞行,GradientThreshold = 1);actorOpts = rlOptimizerOptions (LearnRate = 5飞行,GradientThreshold = 1);

指定代理选项,包括先前创建的对象为演员和评论家。

agentOpts = rlACAgentOptions (NumStepsToLookAhead = 32,DiscountFactor = 0.99,CriticOptimizerOptions = criticOpts,ActorOptimizerOptions = actorOpts);

创建一个AC代理使用演员,评论家和代理的选择对象。

代理= rlACAgent(演员、评论家、agentOpts)
代理= rlACAgent属性:AgentOptions: [1 x1 rl.option。rlACAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec] SampleTime: 1

检查您的代理,使用getAction返回一个随机的行动从一个给定的观察,使用当前的演员和评论家网络权重。

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

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

额外的例子显示如何创建演员和评论家对不同代理类型,明白了火车DDPG剂来控制双积分器系统火车DQN代理Cart-Pole平衡系统

创建一个有限集观测规范对象(或者使用getObservationInfo从环境中提取规范对象与一个离散的观测空间)。对于本例,观察空间定义为一个有限集合组成的四个可能的值1、3、5和7。

obsInfo = rlFiniteSetSpec ([1 3 5 7]);

值函数批评以当前观测作为输入并返回一个标量值作为输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。

因为观察和行动空间离散和低维,使用一个表模型中的值函数评论家。rlTable创建一个表值对象的观察和操作规范对象。

vTable = rlTable (obsInfo);

每个条目的表是一个列向量存储的值对应的观察,根据给定的政策。您可以访问表使用财产的虚表对象。每个元素的初始值是零。

vTable.Table
ans =4×10 0 0 0

你也可以初始化表的任何值,在这种情况下,包含所有的整数数组14

vTable.Table= reshape(1:4,4,1)
vTable = rlTable属性:表:[4 x1双)

使用表格创建评论家和观测规范对象。

评论家= rlValueFunction (vTable obsInfo)
评论家= rlValueFunction属性:ObservationInfo: [1 x1 rl.util。rlFiniteSetSpec] UseDevice:“cpu”

检查你的评论家,使用getValue函数返回值给定的观察,使用当前表条目。

{7}v = getValue(批评)
v = 4

现在可以使用评论家(以及演员)创建一个代理对环境所描述的规范给定的观察对象。代理可以处理离散的观测空间的例子,和使用价值函数评论家rlACAgent,rlPGAgent,rlPPOAgentrlTRPOAgent不支持使用表格的演金宝app员或批评。

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

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

obsInfo = rlNumericSpec (1 [4]);

值函数批评以当前观测作为输入并返回一个标量输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。

在评论家,模型参数化的值函数使用一个定制的基函数。创建一个自定义函数,它返回一个向量的三个元素,给定一个观察作为输入。

myBasisFcn = @ (myobs) [myobs (2) ^ 2;myobs (3) + exp (myobs (1));abs (myobs (4)))
myBasisFcn =function_handle与价值:@ (myobs) [myobs (2) ^ 2; myobs (3) + exp (myobs (1)); abs (myobs (4)))

评论家的输出是标量W ' * myBasisFcn (myobs)代表的估计价值观察在给定的政策。在这里W是一个必须有相同的重量列向量大小自定义基函数的输出。的元素W是可学的参数。

定义一个初始参数向量。

W0 = (3。5; 2);

创建一个评论家。第一个参数是一个双元素的细胞包含处理自定义函数和初始权向量。第二个参数是观测规范对象。

评论家= rlValueFunction ({myBasisFcn, W0}, obsInfo)
评论家= rlValueFunction属性:ObservationInfo: [1 x1 rl.util。rlNumericSpec] UseDevice:“cpu”

检查你的评论家,使用getValue函数返回值给定的观察,使用当前的参数向量。

v = getValue(评论家,{[2 4 6 8]})
v = 130.9453

现在可以使用评论家(以及演员)创建一个代理对环境所描述的规范给定的观察对象。代理可以使用连续观测空间的例子,和使用价值函数评论家rlACAgent,rlPGAgent,rlPPOAgentrlTRPOAgent不支持使用自定义基金宝app函数的演员或批评。

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

创建一个环境和获得观察和操作信息。

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

值函数批评以当前观测作为输入并返回一个标量值作为输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。

在评论家,模型参数化的值函数使用一个输入层递归神经网络(接受观察的内容频道,按照奥林匹克广播服务公司信息)和一个输出层(返回标量值)。

层的网络定义为一个数组对象。创建一个周期性网络,使用sequenceInputLayer作为输入层(大小等于观测通道的尺寸的数量),包括至少一个lstmLayer

myNet = [sequenceInputLayer (obsInfo.Dimension (1) fullyConnectedLayer (8) reluLayer lstmLayer (8) fullyConnectedLayer (1)];

网络转换为一个dlnetwork对象。

dlNet = dlnetwork (myNet);

显示网络特点的总结。

总结(dlNet)
初始化:可学的真正的数字:593输入:1“sequenceinput”序列输入4维度

创建一个值函数表示批评的对象。

评论家= rlValueFunction (dlNet obsInfo)
评论家= rlValueFunction属性:ObservationInfo: [1 x1 rl.util。rlNumericSpec] UseDevice:“cpu”

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

v = getValue(评论家,{兰德(obsInfo.Dimension)})
v =0.0017

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

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

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

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

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

值(1、4、7)
ans =0.0766

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

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

现在可以使用评论家(以及演员)创建一个代理对环境所描述的规范给定的观察对象。代理可以使用连续观测空间的例子,和使用价值函数评论家rlACAgent,rlPGAgent,rlPPOAgentrlTRPOAgent不支持使用周期性网金宝app络的演员或批评。

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

创建一个有限集观测规范对象(或者使用getObservationInfo从环境中提取规范对象)。对于本例,观察空间定义为两个渠道,第一个是一个观察标记7、5、3、1,第二个是一个向量在一个连续的三维空间。

obsInfo = [rlFiniteSetSpec ([7 5 3 1]) rlNumericSpec (1 [3])];

值函数批评以当前观测作为输入并返回一个标量输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。

在评论家,模型参数化的值函数使用一个定制的基函数。创建一个自定义函数,它返回一个向量的四元素,给出两个观察频道的内容作为输入。

myBasisFcn = @ (obsA obsB) [obsA(1) +规范(obsB);obsA(1)规范(obsB);obsA (1) ^ 2 + obsB (3);obsA (1) ^ 2 - obsB (3)];

评论家的输出是标量W ' * myBasisFcn (myobs)代表的估计价值观察在给定的政策。在这里W是一个必须有相同的重量列向量大小自定义基函数的输出。的元素W是可学的参数。

定义一个初始参数向量。

W0 = 1 (4,1);

创建一个评论家。第一个参数是一个双元素的细胞包含处理自定义函数和初始权向量。第二个参数是观测规范对象。

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

检查你的评论家,使用getValue函数返回值给定的观察,使用当前的参数向量。

v = getValue(评论家,{5 (0.1 0.1 0.1)})
v = 60

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

v = getValue(评论家,{3 (0.1 0.1 0.1)})
v = 12

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

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

版本历史

介绍了R2022a