主要内容

rlQValueFunction

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

描述

对象实现了核反应能量函数的估计值,您可以使用作为一个评论家强化学习代理。核反应能量函数映射一个环境政府行动对标量值代表预计折扣累积长期奖励当代理开始从给定的状态并执行给定的行动。核反应能量函数评论家因此需要环境状态和行动作为输入。当你创建一个rlQValueFunction评论家,如使用它来创建一个代理rlQAgent,rlDQNAgent,rlSARSAAgent,rlDDPGAgent,或rlTD3Agent。创建表示更多的信息,请参阅创建政策和价值功能

创建

描述

例子

评论家= rlQValueFunction (,observationInfo,actionInfo)创建了核反应能量函数对象评论家。在这里,是深层神经网络用作接近者,和它必须观察和行动作为输入和一个标量输出。与环境相关的网络输入层自动观测和行动渠道根据尺寸规格observationInfoactionInfo。这个函数设置ObservationInfoActionInfo的属性评论家observationInfoactionInfo分别输入参数。

例子

评论家= rlQValueFunction (选项卡,observationInfo,actionInfo)创建了核反应能量函数对象评论家离散行动和观察空间从核反应能量表选项卡选项卡是一个rlTable对象包含一个表与尽可能多的行数量的观察和尽可能多的列的数量可能的行动。这个函数设置ObservationInfoActionInfo的属性评论家分别的observationInfoactionInfo输入参数,在这种情况下必须标量rlFiniteSetSpec对象。

例子

评论家= rlQValueFunction ({basisFcn,W0},observationInfo,actionInfo)创建一个核反应能量函数对象评论家使用一个自定义的基函数作为潜在的估计值。双元素单元第一个输入参数是一个数组的第一个元素处理basisFcn一个自定义的基函数,第二个元素是初始权向量W0。在这里,基函数作为输入,必须观察和行动W0必须是一个列向量。这个函数设置ObservationInfoActionInfo的属性评论家observationInfoactionInfo分别输入参数。

例子

评论家= rlQValueFunction (___,名称=值)指定一个或多个名称参数。您可以指定输入和输出层名称(授权他们的协会与环境观测和操作通道)深层神经网络近似者。对于所有类型的近似者,例如,您可以指定计算设备UseDevice = " gpu "

输入参数

全部展开

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

网络必须都环境的观察和行动作为输入和一个标量作为输出。

请注意

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

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

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

核反应能量表,指定为一个rlTable对象数组包含尽可能多的行可能的观察和尽可能多的列的操作。元素(年代,一个)是预期的长期累积奖励采取行动一个从观察到的状态年代。这个数组的元素都是可学的参数的评论家。

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

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

B = myBasisFunction (obs1, obs2,…, obsN act)

在这里,obs1obsN在相同的顺序输入,与相同的数据类型和维度环境观测通道中定义observationInfo行为是一个输入相同的数据类型和维度中定义的环境行动通道吗actionInfo

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

例子:@ (obs1 obs2, act)[行为(2)* obs1 (1) ^ 2;abs (obs2(5) +法案(1)))

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

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

例子:UseDevice = " gpu "

网络输入层名称对应于环境行动通道,指定为字符串数组或单元阵列的特征向量。函数分配环境行动中指定的频道actionInfo指定的网络输入层。因此,指定的网络输入层必须具有相同的数据类型和维度中定义actionInfo

请注意

函数不使用名称或操作的描述(如果有的话)中指定的频道actionInfo

这个名称参数支持只有当深神经网络近似模型。金宝app

例子:ActionInputNames = " myNetOutput_Force "

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

请注意

中指定的信息observationInfo,该函数只使用每个通道的数据类型和维度,但不是它的名字或描述(可选)。

这个名称参数支持只有当深神经网络近似模型。金宝app

例子:ObservationInputNames = {" NetInput1_airspeed”、“NetInput2_altitude "}

属性

全部展开

观测规范,指定为一个rlFiniteSetSpecrlNumericSpec对象或数组包含一个混合的对象。数组中每个元素定义了一个环境观测通道的特性,比如尺寸,数据类型和名称。注意,只有一个通道的数据类型和维度所使用的软件来创建演员或批评,但不是其(可选)名称。

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

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

动作规范,指定为一个rlFiniteSetSpecrlNumericSpec对象。这个对象定义环境行动通道的属性,如尺寸,数据类型和名称。注意,函数不使用行动通道中指定的名称actionInfo

请注意

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

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

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

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

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

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

请注意

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

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

例子:“图形”

对象的功能

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

例子

全部折叠

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

obsInfo = rlNumericSpec (1 [4]);

创建一个操作规范对象(或者使用getActionInfo从环境中提取规范对象)。在这个例子中,定义了行动空间作为一个连续的二维空间,这样一个动作是一个列向量包含两个双打。

2 actInfo = rlNumericSpec ([1]);

评论家中的近似核反应能量函数,利用神经网络。

网络必须有两个输入,一个用于观察和一个行动。观察输入必须接受一个研制出向量(观测向量定义的obsInfo)。操作输入必须接受一个双元素向量(动作向量定义的actInfo)。网络的输出必须是一个标量,代表预期的长期累积奖励当代理从给定的观察和给定的行动。

你也可以获得的观测数量obsInfo规范(无论观测空间是一个列向量,行向量或矩阵,刺激(obsInfo.Dimension)是总数量的维度,在这种情况下四,同样,刺激(actInfo.Dimension)行动空间的维数,两个)。

创建网络层对象数组。

%观察路径层obsPath = [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (5) reluLayer fullyConnectedLayer(5名=“obsout”));%的行动路径层actPath = [featureInputLayer (prod (actInfo.Dimension)) fullyConnectedLayer (5) reluLayer fullyConnectedLayer(5名=“actout”));%常见路径输出层%连接两层沿维度comPath = = [concatenationLayer(1、2、名称“有条件现金转移支付”)fullyConnectedLayer (5) reluLayer fullyConnectedLayer (Name =“输出”));%添加层网络对象网= addLayers (layerGraph (obsPath) actPath);网= addLayers(净,comPath);%连接层网= connectLayers(网络,“obsout”,“有条件现金转移支付/三机一体”);网= connectLayers(网络,“actout”,“有条件现金转移支付/ in2”);%的阴谋网络情节(净)

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

%网络转换成一个dlnetwork对象网= dlnetwork(净);%总结属性总结(净)
初始化:可学的真正的数字:161输入:1“输入”4 2“input_1”功能特性

创建的评论家rlQValueFunction使用网络,以及观察和行动规范对象。当使用这种语法,网络输入层自动与组件相关联的观察和行动信号根据尺寸规格obsInfoactInfo

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

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

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

您现在可以使用评论家(以及一个演员)创建一个代理依靠核反应能量函数(如批评者rlQAgent,rlDQNAgent,rlSARSAAgent,或rlDDPGAgent)。

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

obsInfo = rlNumericSpec (1 [4]);

创建一个操作规范对象(或者使用getActionInfo从环境中提取规范对象)。在这个例子中,定义了行动空间作为一个连续的二维空间,这样一个动作是一个列向量包含两个双打。

2 actInfo = rlNumericSpec ([1]);

评论家中的近似核反应能量函数,利用神经网络。

网络必须有两个输入,一个用于观察和一个行动。观察输入(这里称为netObsInput)必须接受一个研制出向量(观测向量定义的obsInfo)。输入(这里称为行动netActInput双元素向量(行动)必须接受一个向量定义的actInfo)。网络的输出必须是一个标量,代表预期的长期累积奖励当代理从给定的观察和给定的行动。

你也可以获得的观测数量obsInfo规范对象(无论观测空间是一个列向量,行向量或矩阵,刺激(obsInfo.Dimension)是它的维数,在这种情况下四,同样,刺激(actInfo.Dimension)行动空间的维数,两个)。

建立神经网络路径,使用向量层对象。名网络输入层的观察和行动netObsInputnetActInput,分别。

%观察路径层obsPath = [featureInputLayer (刺激(obsInfo.Dimension),Name =“netObsInput”)fullyConnectedLayer (5) reluLayer fullyConnectedLayer(5名=“obsout”));%的行动路径层actPath = [featureInputLayer (刺激(actInfo.Dimension),Name =“netActInput”)fullyConnectedLayer (5) reluLayer fullyConnectedLayer(5名=“actout”));%常见路径输出层%连接两层沿维度comPath = = [concatenationLayer(1、2、名称“有条件现金转移支付”)fullyConnectedLayer (5) reluLayer fullyConnectedLayer (Name =“输出”));%添加层网络对象网= addLayers (layerGraph (obsPath) actPath);网= addLayers(净,comPath);%连接层网= connectLayers(网络,“obsout”,“有条件现金转移支付/三机一体”);网= connectLayers(网络,“actout”,“有条件现金转移支付/ in2”);%的阴谋网络情节(净)

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

%转换为dlnetwork对象网= dlnetwork(净);%总结属性总结(净);
初始化:可学的真正的数字:161输入:1“netObsInput”4特性2“netActInput”功能

创建的评论家rlQValueFunction使用网络,观察和操作规范对象,网络输入层的名称与环境的观察和行动有关。

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

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

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

您现在可以使用评论家(以及一个演员)创建一个代理依靠核反应能量函数(如批评者rlQAgent,rlDQNAgent,rlSARSAAgent,或rlDDPGAgent)。

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

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

创建一个有限集行动规范对象(或者使用getActionInfo从环境中提取规范对象离散行动空间)。对于这个示例定义行为空间的有限集2可能值。

actInfo = rlFiniteSetSpec (8 [4]);

创建一个表在评论家近似函数的值。rlTable创建一个表值对象的观察和操作规范对象。

qTable = rlTable (obsInfo actInfo);

表存储一个值(代表预期的长期累积奖励)为每一个可能的observation-action一对。每一行对应一个观察和每一列对应一个动作。您可以访问表使用财产的虚表对象。每个元素的初始值是零。

qTable.Table
ans =4×20 0 0 0 0 0 0 0

您可以初始化表的任何值,在本例中包含的整数数组1通过8

qTable.Table =重塑(1:8 4 2)
qTable = rlTable属性:表:[4 x2双)

使用表格创建评论家以及观察和行动规范的对象。

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

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

v = getValue(评论家,{5},{8})
v = 6

您现在可以使用评论家(以及一个演员)来创建一个离散的行动空间代理依靠核反应能量函数(如批评者rlQAgent,rlDQNAgent,或rlSARSAAgent)。

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

obsInfo = rlNumericSpec (1 [3]);

创建一个操作规范对象(或者使用getActionInfo从环境中提取规范对象)。在这个例子中,定义了行动空间作为一个连续的二维空间,这样一个动作是一个列向量包含两个双打。

2 actInfo = rlNumericSpec ([1]);

创建一个定制的基函数近似函数值在评论家。自定义基函数必须返回一个列向量。每个向量元素必须分别观察和操作定义的函数obsInfoactInfo

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

评论家的输出是标量W * myBasisFcn (myobs myact),在那里W是一个必须有相同的重量列向量的大小自定义基函数输出。这个输出预期的长期累积奖励当代理从给定的观察和采取最好的措施。W的元素是可学的参数。

定义一个初始参数向量。

W0 = (1, 4, 4; 2);

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

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

检查你的评论家,使用getValue返回给定observation-action对的价值,使用当前的参数向量。

v = getValue(评论家,{(1 2 3)},{[4 - 5]})
v = 252.3926

您现在可以使用评论家(以及一个演员)创建一个代理依靠核反应能量函数(如批评者rlQAgent,rlDQNAgent,rlSARSAAgent,或rlDDPGAgent)。

创建一个观察对象(或者使用规范getObservationInfo从环境中提取规范对象)。对于本例,观察空间定义为组成的两个渠道,一是一个向量在一个连续的二维空间,第二个是一个矢量三维空间,可以假设只有四个值。

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

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

actInfo = rlFiniteSetSpec ({1,2,3});

创建一个定制的基函数近似函数值在评论家。自定义基函数必须返回一个列向量。每个向量元素必须分别观察和操作定义的函数obsInfoactInfo。注意所选择的行动,定义,只有一个元素,而每个观测通道有两个元素。

myBasisFcn = @ (obsA obsB, act) [obsA obsB (1) + (2) + obsB(3) +(1)行动;obsA (2) + obsB obsB(1) +(2)行动(1);obsB obsA (1) + (2) + obsB(3) +行动(1)^ 2;obsA (1) + obsB obsB(1) +(2)行动(1)^ 2);

评论家的输出是标量W * myBasisFcn (obsA obsB, act),在那里W是一个必须有相同的重量列向量的大小自定义基函数输出。这个输出预期的长期累积奖励当代理从给定的观察和操作指定为最后的输入。W的元素是可学的参数。

定义一个初始参数向量。

W0 = 1 (4,1);

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

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

检查你的评论家,使用getValue函数返回给定observation-action对的价值,使用当前的参数向量。

v = getValue(评论家,{[-0.5 - 0.6],[1 0 1]},{3})
v = -0.9000

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

v = getValue(评论家,{(-0.5 - 0.6),(-0.05 -10)},{33})
v = -21.0000

现在可以使用评论家(以及一个演员)创建一个代理和一个离散的行动空间依赖核反应能量函数(如批评者rlQAgent,rlDQNAgent,或rlSARSAAgent)。

版本历史

介绍了R2022a