rlSACAgent
描述
软actor-critic (SAC)算法是一个模范自由,在网上,off-policy, actor-critic强化学习方法。SAC算法计算最优政策,最大化长期期望的奖励和熵的政策。熵是衡量政策的不确定性的状态。熵值越高促进更多的探索。奖励和最大化熵平衡环境的勘探和开发。操作空间只能是连续的。
有关更多信息,请参见软Actor-Critic (SAC)代理。
更多信息在不同类型的强化学习代理,看看强化学习代理。
创建
语法
描述
从观察和行动规范创建代理
为一个环境创建一个囊剂用给定的观察和操作规范,使用默认初始化选择。代理使用默认的演员和评论家深层神经网络使用观测规范代理
= rlSACAgent (observationInfo
,actionInfo
)observationInfo
和行为规范actionInfo
。的ObservationInfo
和ActionInfo
的属性代理
是设置为observationInfo
和actionInfo
分别输入参数。
创建一个囊剂与深层神经网络使用指定的初始化配置选项(代理
= rlSACAgent (observationInfo
,actionInfo
,initOptions
)initOptions
)。
指定代理选项
设置AgentOptions财产的任何以前的语法。代理
= rlSACAgent (___,agentOptions
)
输入参数
initOptions
- - - - - -代理初始化选项
rlAgentInitializationOptions
对象
代理初始化选项,指定为一个rlAgentInitializationOptions
对象。
演员
- - - - - -演员
rlContinuousGaussianActor
对象
演员实现政策,指定为一个rlContinuousGaussianActor
函数近似者对象。创建演员接近者的更多信息,请参阅创建政策和价值功能。
请注意
囊剂自动读取的行动范围UpperLimit
和LowerLimit
行为规范的属性(用于创建演员),然后在内部尺度分布和边界行动。因此,不添加一个tanhLayer
作为最后一个非线性层平均输出路径。如果你直接绑定平均值输出(例如通过添加tanhLayer
之前的输出),代理不正确计算概率密度分布的熵。请注意,您必须添加一个softplus或ReLU层执行nonnegativity标准差路径。有关更多信息,请参见软Actor-Critic (SAC)代理。
批评人士
- - - - - -评论家
rlQValueFunction
对象|双元素的行向量rlQValueFunction
对象
评论家,指定为以下之一:
rlQValueFunction
对象,创建一个囊剂与单个核反应能量函数。双元素的行向量
rlQValueFunction
对象,创建一个囊剂与两个评论家价值功能。两个评论家必须是唯一的rlQValueFunction
对象相同的观察和操作规范。批评可以有不同的结构或相同的结构,但不同的初始参数。
囊剂,对于每个评论家必须是一个变量rlQValueFunction
对象,需要行动和观测数据作为输入。
创建批评者的更多信息,请参阅创建政策和价值功能。
属性
ObservationInfo
- - - - - -观测规范
规范对象|规范对象的数组
观测规范,指定为一个rlFiniteSetSpec
或rlNumericSpec
对象或数组包含一个混合的对象。数组中每个元素定义了一个环境观测通道的特性,比如尺寸,数据类型和名称。
如果您创建代理通过指定一个演员和评论家的价值ObservationInfo
匹配指定的值在演员和批评的对象。
您可以提取observationInfo
从现有的环境或代理使用getObservationInfo
。您还可以手动构建规范使用rlFiniteSetSpec
或rlNumericSpec
。
ActionInfo
- - - - - -操作规范
rlNumericSpec
对象
动作规范,指定为一个rlNumericSpec
对象。这个对象定义环境行动通道的属性,如尺寸,数据类型和名称。
请注意
只有一个动作频道是被允许的。
如果您创建代理通过指定一个演员和评论家的价值ActionInfo
匹配指定的值在演员和批评的对象。
您可以提取actionInfo
从现有的环境或代理使用getActionInfo
。您还可以手动构建规范使用rlFiniteSetSpec
或rlNumericSpec
。
AgentOptions
- - - - - -剂的选择
rlSACAgentOptions
对象
代理选项,指定为一个rlSACAgentOptions
对象。
如果您创建了一个囊剂与默认的演员和评论家使用递归神经网络,默认值的AgentOptions.SequenceLength
是32
。
ExperienceBuffer
- - - - - -经验的缓冲
rlReplayMemory
对象
经验缓冲区,指定为一个rlReplayMemory
对象。在训练代理商店每个经验(年代,一个,R,年代,D)在一个缓冲区。在这里:
年代是当前环境的观察。
一个由受托人采取的动作。
R奖励采取行动吗一个。
年代是下一个观测后采取行动一个。
D完成信号后采取行动吗一个。
UseExplorationPolicy
- - - - - -选择使用探索政策
真正的
(默认)|假
选择使用探索政策选择行为时,指定为以下之一的逻辑值。
真正的
——使用基本代理探索政策选择行为时sim卡
和generatePolicyFunction
。在这种情况下,代理人选择其行动抽样概率分布,因此,政策是随机和代理其观测太空探索。假
使用基本代理贪婪策略(行动与最大似然)在选择行动sim卡
和generatePolicyFunction
。在这种情况下,模拟生成代理和政策行为的确定性。
请注意
此选项只影响仿真和部署;它不影响训练。
SampleTime
- - - - - -样本的代理
积极的标量|1
对象的功能
例子
创建囊剂从观察和操作规范
创建环境和获得观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG剂来控制双积分器系统。观察从环境中包含位置和速度是一个向量的质量。行动是一个标量代表一种力量,应用于质量,不断从2到2牛顿。
env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
代理创建函数初始化演员和评论家网络随机。确保修复种子再现性的随机发生器。
rng (0)
创建一个囊剂从环境中观察和操作规范。
代理= rlSACAgent (obsInfo actInfo);
检查您的代理,使用getAction
返回操作从一个随机的观察。
getAction(代理,{兰特(obsInfo (1) .Dimension)})
ans =1 x1单元阵列{[0.0546]}
您现在可以测试和培训环境内的代理。您还可以使用getActor
和getCritic
分别提取演员和评论家getModel
提取近似者模型(默认情况下深神经网络)的演员或评论家。
使用初始化选项创建囊剂
创造一个环境,一个连续的操作空间和获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG剂来控制双积分器系统。观察从环境中包含位置和速度是一个向量的质量。行动是一个标量代表一种力量,应用于质量,不断从2到2牛顿。
env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
创建一个代理对象初始化选项,指定每个网络中隐藏的完全连接层必须有128个神经元。
initOpts = rlAgentInitializationOptions (NumHiddenUnit = 128);
代理创建函数初始化演员和评论家网络随机。确保修复种子再现性的随机发生器。
rng (0)
创建一个囊剂从环境中观察和行动规范使用初始化选项。
代理= rlSACAgent (obsInfo actInfo initOpts);
从演员提取深层神经网络。
actorNet = getModel (getActor(代理));
从这两个评论家提取深层神经网络。请注意,getModel(批评)
只返回第一个批评网络。
批评者= getCritic(代理);criticNet1 = getModel(批评者(1));criticNet2 = getModel(批评者(2));
显示层的第一个批评网络,验证每个隐藏完全连接层有128个神经元。
criticNet1.Layers
ans x1 = 9层与层:数组1的concat串联连接2输入沿着维度1 2的relu_body ReLU ReLU 3 fc_body完全连接128完全连接层4的body_output ReLU ReLU 5“input_1”功能输入2功能6 fc_1完全连接128完全连接层7“input_2”功能输入1功能8 fc_2完全连接128完全连接层9“输出”完全连接1完全连接层
情节演员和第二网络的评论家,并显示权重的数量。
情节(layerGraph (actorNet))
总结(actorNet)
初始化:真很多可学的:17.1 k输入:1“input_1”2功能
情节(layerGraph (criticNet2))
总结(criticNet2)
初始化:真很多可学的:33.6 k输入:1“input_1”2 2“input_2”1功能特性
检查您的代理,使用getAction
返回操作从一个随机的观察。
getAction(代理,{兰特(obsInfo (1) .Dimension)})
ans =1 x1单元阵列{[-0.9867]}
您现在可以测试和培训环境内的代理。
从演员创建囊剂和评论家的角色
创建一个环境和获得观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG剂来控制双积分器系统。的观测环境包含位置和速度是一个向量的质量。行动是一个标量代表一种力量,应用于质量,不断从2到2牛顿。
env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
定义范围的行动。囊剂自动使用这些值在内部规模分布和绑定操作正确。
actInfo.LowerLimit = 2;actInfo.UpperLimit = 2;
囊剂使用两个核反应能量函数的批评。核反应能量函数批评家接受当前的观察和行动作为输入并返回一个标量输出(估计折扣累积长期奖励采取对应的行动从国家目前的观察,和后政策之后)。
模型参数化核反应能量函数在批评,使用神经网络和两个输入层(一个用于观测通道,所指定的obsInfo
,行动的其他渠道,指定的actInfo
)和一个输出层(返回标量值)。请注意,刺激(obsInfo.Dimension)
和刺激(actInfo.Dimension)
返回的数量的维度观察和行动空间,分别不管他们是否安排行向量,列向量或矩阵。
定义每个网络路径层对象数组。将名称分配给每条路径的输入和输出层。这些名字让你连接路径,然后明确关联网络输入层与适当的信道环境。
%观察路径obsPath = [featureInputLayer (prod (obsInfo.Dimension),名称=“obsPathIn”)fullyConnectedLayer (32) reluLayer fullyConnectedLayer (Name =“obsPathOut”));%的行动路径actPath = [featureInputLayer (prod (actInfo.Dimension),名称=“actPathIn”)fullyConnectedLayer (32) reluLayer fullyConnectedLayer (Name =“actPathOut”));%的共同路径commonPath = = [concatenationLayer(1、2、名称“concat”)reluLayer fullyConnectedLayer (1)];%添加层layergraph对象criticNet = layerGraph;criticNet = addLayers (criticNet obsPath);criticNet = addLayers (criticNet actPath);criticNet = addLayers (criticNet commonPath);%连接层criticNet = connectLayers (criticNet,“obsPathOut”,“concat /三机一体”);criticNet = connectLayers (criticNet,“actPathOut”,“concat / in2”);
初始化网络权重不同的两个批评,创建两个不同的dlnetwork
对象。你必须这样做,因为代理构造函数不接受两个相同的批评。
criticNet1 = dlnetwork (criticNet);criticNet2 = dlnetwork (criticNet);
显示权重的数量。
总结(criticNet1)
初始化:真很多可学的:1.2 k输入:1“obsPathIn”2 2“actPathIn”1功能特性
创建两个评论家与不同的重量和使用两个网络的名称输入层。或者,如果您使用相同的网络具有相同的权重,您必须显式地初始化网络每次(确保不同的权值初始化)之前rlQValueFunction
。为此,使用初始化
。
摘要= rlQValueFunction (criticNet1 obsInfo actInfo,…ActionInputNames =“actPathIn”ObservationInputNames =“obsPathIn”);critic2 = rlQValueFunction (criticNet2 obsInfo actInfo,…ActionInputNames =“actPathIn”ObservationInputNames =“obsPathIn”);
更多信息价值函数近似者,明白了rlQValueFunction
。
检查批评与输入随机观察和行动。
getValue(摘要,{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =单-0.1330
getValue (critic2{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =单-0.1526
囊剂使用参数化随机策略,连续动作空间由一个连续实现高斯的演员。这演员需要一个观察作为输入并返回输出随机行动从高斯概率分布采样。
近似高斯分布的平均值和标准偏差,您必须使用神经网络和两个输出层,每一个拥有尽可能多的元素行为空间的维数。一个输出层必须返回一个向量包含每个行动维度的平均值。另一个必须返回向量包含每个行动维度的标准差。
囊剂自动读取的行动范围UpperLimit
和LowerLimit
的属性actInfo
(这是用于创建演员),然后在内部尺度分布和边界。
因此,不添加一个tanhLayer
作为最后一个非线性层平均输出路径。如果你直接绑定平均值输出(例如通过添加tanhLayer
之前的输出),代理不正确计算概率密度分布的熵。请注意,您必须添加一个softplus或ReLU层执行nonnegativity标准差路径。有关更多信息,请参见软Actor-Critic (SAC)代理。
定义每个网络路径层对象数组,并将名称分配给每条路径的输入和输出层。
%定义常见的输入路径commonPath = [featureInputLayer (prod (obsInfo.Dimension),名称=“netObsIn”)fullyConnectedLayer (32) reluLayer (Name =“CommonRelu”));%为平均值定义路径meanPath = = [fullyConnectedLayer(32岁的名字“meanIn”)reluLayer fullyConnectedLayer (16) reluLayer fullyConnectedLayer (prod (actInfo.Dimension),名称=“MeanOut”));%为标准差定义路径stdPath = = [fullyConnectedLayer(32岁的名字“stdIn”)reluLayer fullyConnectedLayer (16) reluLayer fullyConnectedLayer (prod (actInfo.Dimension)) softplusLayer (Name =“StandardDeviationOut”));%添加层layerGraph对象actorNet = layerGraph (commonPath);actorNet = addLayers (actorNet meanPath);actorNet = addLayers (actorNet stdPath);%连接层actorNet = connectLayers (actorNet,“CommonRelu”,“meanIn /”);actorNet = connectLayers (actorNet,“CommonRelu”,“stdIn /”);%转换为dlnetwork和显示权重的数量。actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:真很多可学的:3.2 k输入:1“netObsIn”2功能
创建一个演员使用actorNet
、观察和操作规范对象的名称输入和输出层。
演员= rlContinuousGaussianActor (actorNet obsInfo actInfo,…ActionMeanOutputNames =“MeanOut”,…ActionStandardDeviationOutputNames =“StandardDeviationOut”,…ObservationInputNames =“netObsIn”);
演员连续高斯近似者的更多信息,请参阅rlContinuousGaussianActor
。
检查你的演员与一个随机输入的观察。
getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[-0.8205]}
指定培训选项的批评。
criticOptions = rlOptimizerOptions (…优化器=“亚当”,…LearnRate = 1 e - 3,…GradientThreshold = 1,…L2RegularizationFactor = 2的军医);
指定培训选项的演员。
actorOptions = rlOptimizerOptions (…优化器=“亚当”,…LearnRate = 1 e - 3,…GradientThreshold = 1,…L2RegularizationFactor = 1 e-5);
指定代理选项,包括训练演员的选择和批评。
agentOptions = rlSACAgentOptions;agentOptions。SampleTime= env.Ts; agentOptions.DiscountFactor = 0.99; agentOptions.TargetSmoothFactor = 1e-3; agentOptions.ExperienceBufferLength = 1e6; agentOptions.MiniBatchSize = 32; agentOptions.CriticOptimizerOptions = criticOptions; agentOptions.ActorOptimizerOptions = actorOptions;
创建囊剂使用演员,批评,和选项。
代理= rlSACAgent(演员,[摘要critic2], agentOptions)
代理= rlSACAgent属性:ExperienceBuffer: [1 x1 rl.replay。rlReplayMemory] AgentOptions: [1 x1 rl.option。rlSACAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlNumericSpec] SampleTime: 0.1000
检查您的代理,使用getAction
返回操作从一个随机的观察。
getAction(代理,{兰特(obsInfo (1) .Dimension)})
ans =1 x1单元阵列{[0.4490]}
您现在可以测试和培训环境内的代理。
创建囊代理使用递归神经网络
对于这个示例,负载在示例中使用的环境火车DDPG剂来控制双积分器系统。的观测环境包含位置和速度是一个向量的质量。行动是一个标量代表一种力量,应用于质量,不断从2到2牛顿。
env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
囊剂使用两个核反应能量函数的批评。在批评,模型参数化核反应能量函数使用递归神经网络,它必须有两个输入层一个输出层。
定义每个网络路径层对象数组,并将名称分配给每条路径的输入和输出层。要创建一个递归神经网络,使用sequenceInputLayer
作为输入层,包括一个lstmLayer
的另一个网络层。
%定义观察路径obsPath = [sequenceInputLayer (prod (obsInfo.Dimension),名称=“obsIn”)fullyConnectedLayer (40) reluLayer fullyConnectedLayer (Name =“obsOut”));%定义行动路径actPath = [sequenceInputLayer (prod (actInfo.Dimension),名称=“肌动蛋白”)fullyConnectedLayer (Name =“actOut”));%定义常见的路径commonPath = = [concatenationLayer(1、2、名称“猫”)lstmLayer (16) reluLayer fullyConnectedLayer (1)];%添加层layergraph对象criticNet = layerGraph (obsPath);criticNet = addLayers (criticNet actPath);criticNet = addLayers (criticNet commonPath);%连接路径criticNet = connectLayers (criticNet,“obsOut”,“猫/三机一体”);criticNet = connectLayers (criticNet,“actOut”,“猫/ in2”);
初始化网络权重不同的两个批评,创建两个不同的dlnetwork
对象。你必须这样做,因为如果代理构造函数不接受两个相同的批评。
criticNet1 = dlnetwork (criticNet);criticNet2 = dlnetwork (criticNet);
显示权重的数量。
总结(criticNet1)
初始化:可学的真正的数量:6.3 k输入:1“obsIn”序列输入2二维肌动蛋白的序列输入1维度
创建两个评论家使用两个网络有不同的权重。使用相同的网络结构的批评。囊剂使用不同的缺省参数初始化两个网络。
摘要= rlQValueFunction (criticNet1 obsInfo actInfo);critic2 = rlQValueFunction (criticNet2 obsInfo actInfo);
检查批评与输入随机观察和行动。
getValue(摘要,{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =单-0.0508
getValue (critic2{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =单0.0762
评论家有复发性网络以来,演员必须有复发性网络。
不添加一个tanhLayer
或scalingLayer
在平均输出路径。囊剂内部转换的高斯分布的有界分布计算概率密度函数和熵。然而,softplus或ReLU层添加到执行nonnegativity标准差路径,
定义每个网络路径层对象数组,指定输入和输出层的名称,所以你稍后可以显式地将它们与适当的通道。
%定义常见的路径commonPath = [sequenceInputLayer (prod (obsInfo.Dimension),名称=“obsIn”)fullyConnectedLayer (400) lstmLayer (8) reluLayer (Name =“CommonOut”));meanPath = = [fullyConnectedLayer(300年,名字“MeanIn”)reluLayer fullyConnectedLayer (prod (actInfo.Dimension),名称=“的意思是”));stdPath = = [fullyConnectedLayer(300年,名字“StdIn”)reluLayer fullyConnectedLayer (prod (actInfo.Dimension) softplusLayer (Name =“StandardDeviation”));actorNet = layerGraph (commonPath);actorNet = addLayers (actorNet meanPath);actorNet = addLayers (actorNet stdPath);actorNet = connectLayers (actorNet,“CommonOut”,“MeanIn /”);actorNet = connectLayers (actorNet,“CommonOut”,“StdIn /”);%转换为dlnetwork和显示权重的数量。actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:可学的真正的数量:20.2 k输入:1“obsIn”序列与二维输入
创建一个演员使用actorNet
、观察和操作规范对象的名称输入和输出层。
演员= rlContinuousGaussianActor (actorNet obsInfo actInfo,…ActionMeanOutputNames =“的意思是”,…ActionStandardDeviationOutputNames =“StandardDeviation”,…ObservationInputNames =“obsIn”);
检查你的演员与一个随机输入的观察。
getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[-0.6304]}
指定培训选项的批评。
criticOptions = rlOptimizerOptions (…优化器=“亚当”LearnRate = 1 e - 3,…GradientThreshold = 1, L2RegularizationFactor = 2的军医);
指定培训选项的演员。
actorOptions = rlOptimizerOptions (…优化器=“亚当”LearnRate = 1 e - 3,…GradientThreshold = 1, L2RegularizationFactor = 1 e-5);
指定代理选项。使用递归神经网络,您必须指定一个SequenceLength
大于1。
agentOptions = rlSACAgentOptions;agentOptions。SampleTime= env.Ts; agentOptions.DiscountFactor = 0.99; agentOptions.TargetSmoothFactor = 1e-3; agentOptions.ExperienceBufferLength = 1e6; agentOptions.SequenceLength = 32; agentOptions.MiniBatchSize = 32;
创建囊剂使用演员,批评,和选项。
代理= rlSACAgent(演员,[摘要critic2], agentOptions);
检查您的代理,使用getAction
返回操作从一个随机的观察。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[-0.8774]}
评估代理使用连续的观测,使用序列长度(时间)维度。例如,获得一系列的行动9
观察。
(行动、州)= getAction(代理,…{兰德([obsInfo。Dimension 1 9])});
显示相对应的行动第七元素的观察。
action ={1}行动;行动(1,1,1,7)
ans = 0.5114
您现在可以测试和培训环境内的代理。
版本历史
介绍了R2020b
打开举例
你们possedez一个版本modifiee de cet(中央东部东京)为例。Souhaitez-vous打开cet(中央东部东京)为例用vos修改吗?
对MATLAB
你们有派对在联合国留置权,对应这个对MATLAB:
倒实行la对saisissez-la在fenetre德对MATLAB。Les navigateurs web不sup金宝appportent Les MATLAB命令。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。