主要内容

rlContinuousGaussianActor

一种具有连续动作空间的随机高斯体强化学习代理

描述

该对象实现了一个函数逼近器,用作具有连续动作空间的强化学习代理中的随机actor。连续高斯行为者将环境状态作为输入,并将从预期累积长期奖励的高斯概率分布中抽样的随机行为作为输出返回,从而实现随机策略。在创建一个rlContinuousGaussianActor对象,使用它创建合适的代理,例如rlACAgentrlPGAgent代理。有关创建表示的详细信息,请参见创建策略和值函数

创建

描述

演员= rlContinuousGaussianActor (observationInfoactionInfoActionMeanOutputNames =netMeanActNameActionStandardDeviationOutputNames =netStdvActName使用深度神经网络创建具有连续动作空间的高斯随机actor作为函数逼近器。在这里,必须具有两个不同名称的输出层,每个输出层具有与操作空间的维度数量相同的元素,如actionInfo.两个输出层计算动作每个组件的平均值和标准偏差。参与者根据字符串中指定的名称使用这些层netMeanActName而且netStdActName,表示动作采样的高斯概率分布。函数设置ObservationInfo而且ActionInfo的属性演员输入参数observationInfo而且actionInfo,分别。

请注意

演员不强制操作规范设置的约束,因此,在使用此actor时,必须在环境中强制操作空间约束。

例子

演员= rlContinuousGaussianActor (observationInfoactionInfoActionMeanOutputNames =netMeanActNameActionStandardDeviationOutputNames =netStdActNameObservationInputNames =netObsNames指定与环境观测通道关联的网络输入层的名称。该功能按顺序分配中指定的每个环境观测通道observationInfo到字符串数组中对应名称指定的层netObsNames.因此,在网络输入层中,按名称顺序排列netObsNames,必须具有与观测规范相同的数据类型和尺寸observationInfo

演员= rlContinuousGaussianActor (___UseDevice =useDevice对象上执行计算操作所使用的设备演员对象,并设置UseDevice的属性演员useDevice输入参数。您可以将此语法用于前面的任何输入-参数组合。

输入参数

全部展开

深度神经网络作为行动者内部的底层逼近器。网络必须具有两个名称不同的输出层,每个输出层具有与操作空间的维数相同的元素,如中所指定的actionInfo.两个输出层计算动作每个组件的平均值和标准偏差。参与者根据字符串中指定的名称使用这些层netMeanActName而且netStdActName,表示动作采样的高斯概率分布。

请注意

标准偏差必须是非负的,平均值必须落在动作的范围内。因此,返回标准差的输出层必须是softplus或ReLU层,以强制非负性,而返回平均值的输出层必须是缩放层,以将平均值缩放到输出范围。

您可以将网络指定为以下类型之一:

请注意

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

rlContinuousGaussianActor对象支持循环深度金宝app神经网络。

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

对应于动作通道平均值的网络输出层的名称,指定为字符串或字符向量。参与者使用这个名称来选择网络输出层,该层返回操作通道中每个元素的平均值。因此,此网络输出层必须按中所示命名netMeanActName.此外,它必须是一个缩放层,将返回的平均值缩放到所需的操作范围。

请注意

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

例子:“myNetOut_Force_Mean_Values”

与动作通道的标准偏差相对应的网络输出层的名称,指定为字符串或字符向量。参与者使用这个名称来选择网络输出层,该层返回操作通道中每个元素的标准差。因此,此网络输出层必须按中所示命名netStdvActName.此外,它必须是一个softplus或ReLU层,以强制返回的标准差是非负的。

请注意

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

例子:“myNetOut_Force_Standard_Deviations”

网络输入层名称对应于环境观测通道,指定为字符串数组或单元格数组的字符向量。当你用这个论证之后“ObservationInputNames”,该功能按顺序分配中指定的每个环境观测通道observationInfo到由字符串数组中相应名称指定的每个网络输入层netObsNames.因此,在网络输入层中,按名称顺序排列netObsNames,必须具有与观测规范相同的数据类型和尺寸observationInfo

请注意

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

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

属性

全部展开

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

rlContinuousGaussianActor设置ObservationInfo的属性演员对于输入observationInfo

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

动作规范,指定为rlNumericSpec对象。该对象定义环境操作通道的属性,如维度、数据类型和名称。注意,该函数没有使用中指定的动作通道的名称actionInfo

请注意

只允许一个动作通道。

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

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

用于在训练和模拟过程中进行梯度计算、参数更新和预测等操作的计算设备,指定为“cpu”“图形”

“图形”选项需要并行计算工具箱™软件和CUDA®使英伟达®GPU。有关支持的图形处理器的更多信息,请参见金宝appGPU计算要求(并行计算工具箱)

你可以使用gpuDevice(并行计算工具箱),查询或选择要使用MATLAB的本地GPU设备®

请注意

在GPU上训练或模拟代理涉及特定于设备的数值舍入错误。与在CPU上执行相同的操作相比,这些错误会产生不同的结果。

要通过在多个核上使用并行处理来加速训练,不需要使用此参数。相反,在训练你的代理时,使用rlTrainingOptions对象,其中UseParallel选项设置为真正的.有关使用多核处理器和gpu进行训练的更多信息,请参见使用并行计算和图形处理器训练代理

例子:“UseDevice”、“gpu”

对象的功能

rlACAgent 演员-评论家强化学习代理
rlPGAgent 策略梯度强化学习代理
rlPPOAgent 近端策略优化强化学习代理
rlSACAgent 软演员-评论家强化学习代理
getAction 从给定环境观察的代理、参与者或策略对象获取操作
评估 给定观测(或观测-动作)输入数据,求函数逼近对象
梯度 给定观测和动作输入数据,求函数逼近对象的梯度
加速 基于神经网络的逼近对象梯度加速计算选项
getLearnableParameters 从代理、函数逼近器或策略对象获取可学习的参数值
setLearnableParameters 设置agent、函数逼近器或策略对象的可学习参数值
setModel 为演员或评论家设置函数逼近模型
getModel 从演员或评论家那里得到函数逼近器模型

例子

全部折叠

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

obsInfo = rlNumericSpec([5 1]);

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

actInfo = rlNumericSpec([3 1],...LowerLimit = -10,...UpperLimit = 10);

为了在参与者中近似策略,使用深度神经网络。

对于连续高斯行为体,网络必须将观测信号作为输入,并为每个动作返回平均值和标准差值。因此,它必须有两个输出层(一个用于平均值,另一个用于标准偏差值),每个输出层具有与动作空间维度相同的元素。您可以从环境规范对象中获得观察空间和操作空间的维度(例如,无论观察空间是列向量、行向量还是矩阵,刺激(obsInfo.Dimension)).

注意,标准偏差必须是非负的,平均值必须落在动作的范围内。因此,返回标准差的输出层必须是softplus或ReLU层,以强制非负性,而返回平均值的输出层必须是缩放层,以将平均值缩放到输出范围。

将每个网络路径创建为一个层对象数组。为输入和输出层指定一个名称,以便稍后可以显式地将它们与正确的通道相关联。

%输入路径层数inPath = [featureInputLayer(...刺激(obsInfo.Dimension),...Name =“netOin”) fullyConnectedLayer (...刺激(actInfo.Dimension),...Name =“infc”));为平均值的路径层使用scalingLayer缩放范围从(-1,1)到(-10,10)meanPath = [tanhLayer(Name=“tanhMean”);fullyConnectedLayer(刺激(actInfo.Dimension));scalingLayer (Name =“规模”...规模= actInfo.UpperLimit)];%路径层的标准差%使用软加图层使他们非负sdevPath = [tanhLayer(Name=“tanhStdv”);fullyConnectedLayer(刺激(actInfo.Dimension));softplusLayer (Name =“splus”));为网络对象添加层net = layerGraph(inPath);net = addLayers(net,meanPath);net = addLayers(net,sdevPath);%连接层net = connectLayers(net,“infc”“tanhMean /”);net = connectLayers(net,“infc”“tanhStdv /”);绘制网络情节(净)

图中包含一个轴对象。axis对象包含一个graphplot类型的对象。

将网络转换为adlnetwork对象,并显示可学习参数(权重)的数量。

Net = dlnetwork(Net);总结(净)
初始化:true学习数量:42输入:1 'netOin' 5个特征

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

actor = rlContinuousGaussianActor(net, obsInfo, actInfo,...ActionMeanOutputNames =“规模”...ActionStandardDeviationOutputNames =“splus”...ObservationInputNames =“netOin”);

要检查角色,请使用getAction使用当前网络权重从随机观察向量返回一个操作。动作向量的三个元素中的每一个都是来自高斯分布的随机样本,其均值和标准差由神经网络计算,作为当前观测的函数。

act = getAction(actor,{rand(obsInfo.Dimension)});行为{1}
ans =3x1单列向量-12.0285 1.7628 10.8733

要返回动作的高斯分布,给定一个观察,使用评估

dist = evaluate(actor,{rand(obsInfo.Dimension)});

显示平均值向量。

dist {1}
ans =3x1单列向量-5.6127 3.9449 9.6213

显示标准差向量。

dist {2}
ans =3x1单列向量0.8516 0.8366 0.7004

现在可以使用参与者创建合适的代理(例如rlACAgentrlPGAgentrlSACAgentOptionsrlPPOAgent,或rlTRPOAgentOptions).

版本历史

R2022a中引入