主要内容

rlQValueRepresentation

(不推荐)用于强化学习代理的Q-Value函数批评表示

rlQValueRepresentation不建议使用。使用rlQValueFunctionrlVectorQValueFunction代替。有关更多信息,请参见不建议使用rlQValueRepresentation

描述

该对象实现了一个q值函数逼近器,用于在强化学习代理中作为批评。q值函数是一个将观察-动作对映射到一个标量值的函数,该标量值表示代理从给定的观察开始并执行给定的动作时期望积累的预期总长期奖励。因此,q值函数评论家需要观察和行动作为输入。在创建一个rlQValueRepresentation评论家,使用它来创建依赖于q值函数评论家的代理,例如rlQAgentrlDQNAgentrlSARSAAgentrlDDPGAgent,或rlTD3Agent.有关创建表示的详细信息,请参见创建策略和值函数

创建

描述

标量输出q值批评家

例子

评论家= rlQValueRepresentation (observationInfoactionInfo“观察”,obsName“行动”,actName创建q值函数评论家深度神经网络被用作一个逼近器,并且必须有观察和动作作为输入,和一个单一的标量输出。此语法设置ObservationInfo而且ActionInfo的属性评论家分别对应于输入observationInfo而且actionInfo,包括观察结果和行动说明。obsName必须包含的输入层的名称与观察规范相关的。动作名actName必须是输入层的名称吗这与动作规范相关联。

例子

评论家= rlQValueRepresentation (选项卡observationInfoactionInfo创建基于q值的函数评论家离散的行动和观察空间从q值表选项卡选项卡是一个rlTable对象,该对象包含一个表,其行数与可能的观察值相同,列数与可能的操作相同。此语法设置ObservationInfo而且ActionInfo的属性评论家分别对应于输入observationInfo而且actionInfo,这肯定是rlFiniteSetSpec对象,分别包含离散观察空间和操作空间的规范。

例子

评论家= rlQValueRepresentation ({basisFcnW0},observationInfoactionInfo创建一个基于q值的函数评论家使用自定义基函数作为底层逼近器。第一个输入参数是一个包含两个元素的单元格,其中第一个元素包含句柄basisFcn到自定义基函数,第二个元素包含初始权值向量W0.这里基函数必须同时有观测值和动作作为输入W0一定是列向量。此语法设置ObservationInfo而且ActionInfo的属性评论家分别对应于输入observationInfo而且actionInfo

多输出离散动作空间q值批评家

例子

评论家= rlQValueRepresentation (observationInfoactionInfo“观察”,obsName创建多输出核反应能量函数评论家对于离散作用空间深度神经网络被用作近似器,并且必须只有观察数据作为输入,并且单个输出层具有与可能的离散动作数量相同的元素。此语法设置ObservationInfo而且ActionInfo的属性评论家分别对应于输入observationInfo而且actionInfo,包括观察结果和行动说明。在这里,actionInfo一定是rlFiniteSetSpec对象,该对象包含离散操作空间的规范。观察名称obsName必须是输入层的名称吗

例子

评论家= rlQValueRepresentation ({basisFcnW0},observationInfoactionInfo创建多输出核反应能量函数评论家对于离散作用空间使用自定义基函数作为底层逼近器。第一个输入参数是一个包含两个元素的单元格,其中第一个元素包含句柄basisFcn到自定义基函数,而第二个元素包含初始权值矩阵W0.这里基函数必须只有观测值作为输入,并且W0必须有与可能的操作数量一样多的列。此语法设置ObservationInfo而且ActionInfo的属性评论家分别对应于输入observationInfo而且actionInfo

选项

评论家= rlQValueRepresentation (___选项基于此创建值函数评论家使用附加选项集选项,这是一个rlRepresentationOptions对象。此语法设置选项的属性评论家选项输入参数。您可以将此语法用于前面的任何输入-参数组合。

输入参数

全部展开

深度神经网络用作底层逼近器内的评论家,指定为以下之一:

单输出批评,必须将观察结果和行动都作为输入,并有一个标量输出,表示代理从给定的观察开始并采取给定的行动时预期的累积长期奖励。为多输出离散动作空间批评,必须只有观察作为输入和一个单一的输出层有尽可能多的元素的数量可能离散的行动。每个输出元素表示智能体从给定的观察开始并采取相应的行动时所期望的累积长期奖励。评论家的可学习参数是深度神经网络的权值。

网络输入层必须与中定义的信号具有相同的顺序和相同的数据类型和维度ObservationInfo.此外,这些输入层的名称必须与中列出的观察名称相匹配obsName

网络输出层必须具有与中定义的信号相同的数据类型和维度ActionInfo.其名称必须是中指定的动作名称actName

rlQValueRepresentation对象支持用于多输金宝app出离散动作空间批评的循环深度神经网络。

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

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

例子:{' my_obs '}

操作名称,指定为包含字符串或字符向量的单元素单元格数组。的动作输入层的名称

例子:{' my_act '}

q值表,指定为rlTable对象,该对象包含一个数组,其行数与可能的观察值相同,列数与可能的操作相同。元素(年代一个)是行动的预期累积长期回报一个从观察状态年代.这个数组的元素是评论家的可学习参数。

自定义基函数,指定为用户定义的MATLAB函数的函数句柄。用户定义的函数可以是匿名函数,也可以是MATLAB路径上的函数。评论家的输出是c = W'*B,在那里W是一个权重向量或矩阵包含可学习参数,和B由自定义基函数返回的列向量。

对于单输出q值评论家,c表示代理从给定观察开始并采取给定行动时期望的累积长期奖励的标量。在这种情况下,基函数必须具有以下签名。

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

对于具有离散动作空间的多输出q值临界器,c是一个向量,其中每个元素都是智能体从给定的观察开始,并采取与所考虑元素的位置对应的行动时预期的累积长期奖励。在这种情况下,基函数必须具有以下签名。

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

在这里,obs1obsN中定义的信号的观测顺序和数据类型和维度是否相同observationInfo而且行为中的操作规范具有相同的数据类型和维度actionInfo

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

基函数权值的初值,W.对于单输出q值评论家,W与基函数返回的向量长度相同的列向量。对于具有离散动作空间的多输出q值临界器,W是一个矩阵,其行数必须与基函数输出的长度相同,列数必须与可能的操作数相同。

属性

全部展开

表示选项,指定为rlRepresentationOptions对象。可用的选项包括用于训练的优化器和学习率。

观察规范,规定为rlFiniteSetSpecrlNumericSpec对象或包含此类对象的组合的数组。这些对象定义了观测信号的维度、数据类型和名称等属性。

rlQValueRepresentation设置ObservationInfo的属性评论家对于输入observationInfo

你可以提取ObservationInfo从现有环境或代理中使用getObservationInfo.您还可以手动构造规范。

动作规范,指定为rlFiniteSetSpecrlNumericSpec对象。这些对象定义操作信号的维度、数据类型和名称等属性。

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

你可以提取ActionInfo从现有环境或代理中使用getActionInfo.您还可以手动构造规范。

对象的功能

rlDDPGAgent 深度确定性策略梯度(DDPG)强化学习代理
rlTD3Agent 双延迟深度确定性策略梯度强化学习代理
rlDQNAgent 深度q网络(Deep Q-network, DQN)强化学习剂
rlQAgent Q-learning强化学习代理
rlSARSAAgent SARSA强化学习剂
rlSACAgent 软演员-评论家强化学习代理
getValue 根据环境观察和行动,从评论家那里获得估计值
getMaxQValue 在给定环境观测的情况下,从具有离散动作空间的q值函数评论家获得所有可能动作的最大估计值

例子

全部折叠

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

obsInfo = rlNumericSpec([4 1]);

创建一个操作规范对象(或者使用getActionInfo从环境中提取规范对象)。对于本例,将操作空间定义为连续的二维空间,这样单个操作就是包含两个double的列向量。

actInfo = rlNumericSpec([2 1]);

创建一个深度神经网络来近似q值函数。网络必须有两个输入,一个用于观察,一个用于操作。观测输入(这里称为myobs)必须接受一个四元向量(由obsInfo).动作输入(这里称为myact)必须接受一个两元素向量(由actInfo).网络的输出必须是一个标量,代表代理从给定的观察开始并采取给定的行动时预期的累积长期奖励。

观测路径层数%obsPath = [featureInputLayer(4,...“归一化”“没有”“名字”“myobs”) fullyConnectedLayer (1,“名字”“obsout”));%动作路径图层actPath = [featureInputLayer(2,...“归一化”“没有”“名字”“myact”) fullyConnectedLayer (1,“名字”“actout”));输出层的普通路径comPath = [addtionlayer (2,“名字”“添加”...fullyConnectedLayer (1,“名字”“输出”));为网络对象添加层net = addLayers(layerGraph(obsPath),actPath);net = addLayers(net,comPath);%连接层net = connectLayers(net,“obsout”“添加/三机一体”);net = connectLayers(net,“actout”“添加/ in2”);

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

rlQValueRepresentation(net,obsInfo,actInfo,...“观察”, {“myobs”},“行动”, {“myact”})
评论= rlQValueRepresentation with properties: ActionInfo: [1x1 rl.util.]rlNumericSpec] ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要查看你的评论,使用getValue函数返回使用当前网络权重的随机观察和操作的值。

v = getValue(批评家,{rand(4,1)},{rand(2,1)})
v =0.1102

您现在可以使用评论家(连同演员)来创建依赖于q值函数评论家的代理(例如rlQAgentrlDQNAgentrlSARSAAgent,或rlDDPGAgent代理)。

这个例子展示了如何使用深度神经网络逼近器为离散动作空间创建一个多输出q值函数评论家。

这个评论家只把观察作为输入,并产生一个包含尽可能多的元素的向量作为输出。当智能体从给定的观察开始,并采取与元素在输出向量中的位置相对应的行动时,每个元素表示预期的累积长期奖励。

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

obsInfo = rlNumericSpec([4 1]);

创建一个有限集动作规范对象(或者使用getActionInfo从具有离散操作空间的环境中提取规范对象)。对于本例,将动作空间定义为一个有限集,由三个可能的值(命名为75,3.在这种情况下)。

actInfo = rlFiniteSetSpec([7 5 3]);

创建一个深度神经网络逼近器来逼近评论家内部的q值函数。网络的输入(这里称为myobs)必须接受由定义的四元素向量obsInfo.输出必须是一个单独的输出层,其元素数量与可能的离散操作数量相同(在本例中为三个,由actInfo).

net = [featureInputLayer(4,...“归一化”“没有”“名字”“myobs”) fullyConnectedLayer (3“名字”“价值”));

使用网络、观察规范对象和网络输入层的名称创建评论家。

rlQValueRepresentation(net,obsInfo,actInfo,...“观察”, {“myobs”})
评论= rlQValueRepresentation with properties: ActionInfo: [1x1 rl.util.]rlFiniteSetSpec] ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要查看你的评论,使用getValue函数返回一个随机观测值,使用当前网络权重。对于这三个可能的操作,每个操作都有一个值。

v = getValue(批评家,{rand(4,1)})
v =3x1单列向量0.7232 0.8177 -0.2212

您现在可以使用评论家(以及参与者)来创建依赖于q值函数评论家的离散动作空间代理rlQAgentrlDQNAgent,或rlSARSAAgent代理)。

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

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

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

actInfo = rlFiniteSetSpec([4 8]);

创建一个表来近似评价值函数。rlTable从观察和操作规范对象创建值表对象。

qTable = rlTable(obsInfo,actInfo);

该表为每个可能的观察-行动对存储一个值(表示预期的累积长期奖励)。每行对应一个观察结果,每列对应一个操作。属性可以访问该表表格的属性虚表对象。每个元素的初始值为零。

qTable。表格
ans =4×20 0 0 0 0 0 0

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

qTable.Table =重塑(1:8 4 2)
qTable = rlTable与属性:Table: [4x2 double]

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

rlQValueRepresentation(qTable,obsInfo,actInfo)
评论= rlQValueRepresentation with properties: ActionInfo: [1x1 rl.util.]rlFiniteSetSpec] ObservationInfo: [1x1 rl.util.]rlFiniteSetSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要查看你的评论,使用getValue函数使用当前表项返回给定观察和操作的值。

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

您现在可以使用评论家(以及带有参与者的评论家)来创建依赖于q值函数评论家(例如评论家)的离散动作空间代理rlQAgentrlDQNAgent,或rlSARSAAgent代理)。

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

obsInfo = rlNumericSpec([3 1]);

创建一个操作规范对象(或者使用getActionInfo从环境中提取规范对象)。对于本例,将操作空间定义为连续的二维空间,这样单个操作就是包含两个double的列向量。

actInfo = rlNumericSpec([2 1]);

创建一个自定义的基函数来近似评价中的值函数。自定义基函数必须返回一个列向量。每个向量元素必须是分别定义的观察和操作的函数obsInfo而且actInfo

myBasisFcn = @(myobs,myact) [...myobs (2) ^ 2;...myobs (1) + exp (myact (1));...abs (myact (2));...myobs (3))
myBasisFcn =Function_handle with value:@ (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];

创造批评家。第一个参数是一个包含自定义函数句柄和初始权重向量的双元素单元格。第二个和第三个参数分别是观察和操作规范对象。

rlQValueRepresentation({myBasisFcn,W0},...obsInfo actInfo)
rlQValueRepresentation with properties: ActionInfo: [1×1 rl.util.]rlNumericSpec] ObservationInfo: [1×1 rl.util.]rlNumericSpec] Options: [1×1 rl.option.rlRepresentationOptions]

要查看你的评论,使用getValue函数使用当前参数向量返回给定的观察-操作对的值。

v = getValue(批评家,{[1 2 3]'},{[4 5]'})
V = 1×1 dlarray 252.3926

您现在可以使用评论家(连同演员)来创建依赖于q值函数评论家的代理(例如rlQAgentrlDQNAgentrlSARSAAgent,或rlDDPGAgent代理)。

此示例演示如何使用自定义基函数逼近器为离散动作空间创建多输出q值函数评论家。

这个评论家只把观察作为输入,并产生一个包含尽可能多的元素的向量作为输出。当智能体从给定的观察开始,并采取与元素在输出向量中的位置相对应的行动时,每个元素表示预期的累积长期奖励。

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

obsInfo = rlNumericSpec([2 1]);

创建一个有限集动作规范对象(或者使用getActionInfo从具有离散操作空间的环境中提取规范对象)。在本例中,将动作空间定义为由3个可能值(命名为75,3.在这种情况下)。

actInfo = rlFiniteSetSpec([7 5 3]);

创建一个自定义的基函数来近似评价中的值函数。自定义基函数必须返回一个列向量。每个向量元素必须是由定义的观测值的函数obsInfo

myBasisFcn = @(myobs) [myobs(2)^2;...myobs (1);...exp (myobs (2));...abs (myobs (1)))
myBasisFcn =Function_handle with value:@ (myobs) [myobs (2) ^ 2; myobs (1); exp (myobs (2)); abs (myobs (1)))

评论家的输出是向量c= W ' * myBasisFcn (myobs),在那里W是一个权重矩阵,其行数必须与基函数输出的长度相同,列数必须与可能的操作数相同。

c中的每个元素都是智能体从给定的观察开始,并采取与所考虑元素的位置相对应的行动时所期望的累积长期奖励。W的元素是可学习参数。

定义一个初始参数矩阵。

W0 = rand(4,3);

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

rlQValueRepresentation({myBasisFcn,W0},...obsInfo actInfo)
评论= rlQValueRepresentation with properties: ActionInfo: [1x1 rl.util.]rlFiniteSetSpec] ObservationInfo: [1x1 rl.util.]rlNumericSpec] Options: [1x1 rl.option.rlRepresentationOptions]

要查看你的评论,使用getValue函数使用当前参数矩阵返回随机观测值。请注意,三个可能的操作都有一个值。

v = getValue(批评家,{rand(2,1)})
V = 3x1 dlarray 2.1395 1.2183 2.3342

您现在可以使用评论家(以及参与者)来创建依赖于q值函数评论家的离散动作空间代理rlQAgentrlDQNAgent,或rlSARSAAgent代理)。

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

环境= rlPredefinedEnv(“CartPole-Discrete”);obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);numObs = obsInfo.Dimension(1);num离散act = numel(actInfo.Elements);

为你的评论家创建一个循环深度神经网络。要创建循环神经网络,请使用sequenceInputLayer作为输入层,并包含至少一个lstmLayer

创建一个用于多输出q值函数表示的循环神经网络。

criticNetwork = [sequenceInputLayer(numObs,...“归一化”“没有”“名字”“状态”) fullyConnectedLayer (50,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticRelu1”) lstmLayer (20“OutputMode”“序列”...“名字”“CriticLSTM”);fullyConnectedLayer (20,“名字”“CriticStateFC2”) reluLayer (“名字”“CriticRelu2”) fullyConnectedLayer (numDiscreteAct...“名字”“输出”));

使用循环神经网络为你的评论家创建一个表示。

criticOptions = rlRepresentationOptions(...“LearnRate”1 e - 3,“GradientThreshold”1);评论= rlQValueRepresentation(批评网络,...obsInfo actInfo,...“观察”“状态”, criticOptions);

版本历史

R2020a中引入

全部展开