rlDDPGAgent
描述
深决定性策略梯度(DDPG)算法是一种actor-critic,模范自由,在网上,off-policy强化学习方法计算最优政策,最大化的长期回报。操作空间只能是连续的。
有关更多信息,请参见深决定性策略梯度(DDPG)代理。更多信息在不同类型的强化学习代理,看看强化学习代理。
创建
语法
描述
从观察和行动规范创建代理
创建一个深决定性策略梯度代理一个环境与给定的观察和操作规范,使用默认初始化选择。代理使用默认的演员兼评论家深层神经网络由观测规范代理
= rlDDPGAgent (observationInfo
,actionInfo
)observationInfo
和操作规范actionInfo
。的ObservationInfo
和ActionInfo
的属性代理
是设置为observationInfo
和actionInfo
分别输入参数。
创建一个深决定性策略梯度代理一个环境与给定的观察和操作规范。代理使用默认使用选项中指定的网络配置代理
= rlDDPGAgent (observationInfo
,actionInfo
,initOpts
)initOpts
对象。初始化选项的更多信息,请参阅rlAgentInitializationOptions
。
指定代理选项
创建一个DDPG代理并设置代理
= rlDDPGAgent (___,agentOptions
)AgentOptions
财产agentOptions
输入参数。使用这个语法的任何输入参数后以前的语法。
输入参数
initOpts
- - - - - -代理初始化选项
rlAgentInitializationOptions
对象
代理初始化选项,指定为一个rlAgentInitializationOptions
对象。
演员
- - - - - -演员
rlContinuousDeterministicActor
对象
演员,指定为一个rlContinuousDeterministicActor
。创建角色的更多信息,请参阅创建政策和价值功能。
评论家
- - - - - -评论家
rlQValueFunction
对象
评论家,指定为一个rlQValueFunction
对象。创建批评者的更多信息,请参阅创建政策和价值功能。
属性
ObservationInfo
- - - - - -观测规范
规范对象|规范对象的数组
观测规范,指定为一个rlFiniteSetSpec
或rlNumericSpec
对象或数组包含一个混合的对象。数组中每个元素定义了一个环境观测通道的特性,比如尺寸,数据类型和名称。
如果您创建代理通过指定一个演员和评论家的价值ObservationInfo
匹配指定的值在演员和批评的对象。
您可以提取observationInfo
从现有的环境或代理使用getObservationInfo
。您还可以手动构建规范使用rlFiniteSetSpec
或rlNumericSpec
。
ActionInfo
- - - - - -操作规范
rlNumericSpec
对象
动作规范,指定为一个rlNumericSpec
对象。这个对象定义环境行动通道的属性,如尺寸,数据类型和名称。
请注意
只有一个动作频道是被允许的。
如果您创建代理通过指定一个演员和评论家的价值ActionInfo
匹配指定的值在演员和批评的对象。
您可以提取actionInfo
从现有的环境或代理使用getActionInfo
。您还可以手动构建规范使用rlNumericSpec
。
AgentOptions
- - - - - -剂的选择
rlDDPGAgentOptions
对象
代理选项,指定为一个rlDDPGAgentOptions
对象。
如果您创建了一个DDPG代理与默认的演员和评论家使用递归神经网络,默认值的AgentOptions.SequenceLength
是32
。
ExperienceBuffer
- - - - - -经验的缓冲
rlReplayMemory
对象
经验缓冲区,指定为一个rlReplayMemory
对象。在训练代理商店每个经验(年代,一个,R,年代,D)在一个缓冲区。在这里:
年代是当前环境的观察。
一个由受托人采取的动作。
R奖励采取行动吗一个。
年代是下一个观测后采取行动一个。
D完成信号后采取行动吗一个。
UseExplorationPolicy
- - - - - -选择使用探索政策
假
(默认)|真正的
选择使用探索政策选择行为时,指定为以下之一的逻辑值。
真正的
——代理探索政策选择行为时使用基地。假
——使用基本代理贪婪策略在选择行动。
SampleTime
- - - - - -样本的代理
积极的标量|1
对象的功能
例子
创建DDPG代理从观察和操作规范
创造一个环境,一个持续的行动空间,获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG剂来控制双积分器系统。观察从环境中包含位置和速度是一个向量的质量。行动是一个标量代表一种力量,应用于质量,不断从2到2牛顿。
env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);
获得观察和操作规范。
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
代理创建函数初始化演员和评论家网络随机。确保修复种子再现性的随机发生器。
rng (0)
创建一个策略梯度代理从环境中观察和操作规范。
代理= rlDDPGAgent (obsInfo actInfo)
代理= rlDDPGAgent属性:ExperienceBuffer: [1 x1 rl.replay。rlReplayMemory] AgentOptions: [1 x1 rl.option。rlDDPGAgentOptions] UseExplorationPolicy: 0 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlNumericSpec] SampleTime: 1
检查您的代理,使用getAction
返回操作从一个随机的观察。
getAction(代理,{兰特(obsInfo (1) .Dimension)})
ans =1 x1单元阵列{[0.0182]}
您现在可以测试和培训环境内的代理。您还可以使用getActor
和getCritic
分别提取演员和评论家getModel
提取近似者模型(默认情况下深神经网络)的演员或评论家。
使用初始化选项创建DDPG代理
创造一个环境,一个连续的操作空间和获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG代理摇摆起来,平衡摆与图像观察。这个环境有两个观察:50-by-50灰度图像和一个标量(摆的角速度)。行动是一个标量代表一个扭矩不断从2到2海里。
env = rlPredefinedEnv (“SimplePendulumWithImage-Continuous”);
获得观察和操作规范
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
创建一个代理对象初始化选项,指定每个隐藏在网络必须完全连接层128年
神经元(而不是默认的号码,256年
)。
initOpts = rlAgentInitializationOptions (NumHiddenUnit = 128);
代理创建函数初始化演员和评论家网络随机。可以通过修复确保再现性的种子随机发生器。
rng (0)
创建DDPG代理从环境中观察和操作规范。
代理= rlDDPGAgent (obsInfo actInfo initOpts);
提取深层神经网络代理的演员和评论家。
actorNet = getModel (getActor(代理));criticNet = getModel (getCritic(代理));
验证每个隐藏完全连接层有128个神经元,可以显示层MATLAB®命令窗口,
criticNet.Layers
或可视化结构交互使用analyzeNetwork
。
analyzeNetwork (criticNet)
情节演员和评论家网络
情节(layerGraph (actorNet))
情节(layerGraph (criticNet))
检查您的代理,使用getAction
返回操作从一个随机的观察。
getAction(代理,{兰特(obsInfo (1) .Dimension),兰德(obsInfo (2) .Dimension)})
ans =1 x1单元阵列{[-0.0364]}
您现在可以测试和培训环境内的代理。
创建DDPG代理从演员和评论家
创造一个环境,一个连续的操作空间和获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG剂来控制双积分器系统。观察从环境中包含位置和速度是一个向量的质量。代表一个力的行动是一个标量不断从2到2牛顿。
env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);
获得环境的观察和操作规范对象。
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
演员和评论家网络随机初始化。确保修复种子再现性的随机发生器。
rng (0)
DDPG代理使用参数化核反应能量函数近似者估计价值的政策。核反应能量函数批评家接受当前的观察和行动作为输入并返回一个标量输出(估计折扣累积长期奖励采取对应的行动从国家目前的观察,和后政策之后)。
模型中的参数化核反应能量函数评论家,使用神经网络和两个输入层(一个用于观测通道,所指定的obsInfo
,行动的其他渠道,指定的actInfo
)和一个输出层(返回标量值)。
请注意,刺激(obsInfo.Dimension)
和刺激(actInfo.Dimension)
返回的数量的维度观察和行动空间,分别不管他们是否安排行向量,列向量或矩阵。
每个网络路径定义为层对象数组,并将名称分配给每条路径的输入和输出层。这些名字让你连接路径,然后明确关联网络的输入和输出通道层与适当的环境。
%定义观察和操作路径obsPath = featureInputLayer (prod (obsInfo.Dimension),名称=“netOin”);actPath = featureInputLayer (prod (actInfo.Dimension),名称=“netAin”);%定义共同的路径:连接在第一维度commonPath = = [concatenationLayer(1、2、名称“concat”)fullyConnectedLayer (50) reluLayer fullyConnectedLayer (1)];%添加layerGraph网络路径criticNet = layerGraph (obsPath);criticNet = addLayers (criticNet actPath);criticNet = addLayers (criticNet commonPath);%连接路径criticNet = connectLayers (criticNet,“netOin”,“concat /三机一体”);criticNet = connectLayers (criticNet,“netAin”,“concat / in2”);%画出网络情节(criticNet)
%转换为dlnetwork对象criticNet = dlnetwork (criticNet);%显示权重的数量总结(criticNet)
初始化:可学的真正的数字:251输入:1“netOin”2 2“netAin”1功能特性
创建评论家接近者对象使用criticNet
、环境的观察和行动规范和网络输入层的名称与渠道环境的观察和行动。有关更多信息,请参见rlQValueFunction
。
评论家= rlQValueFunction (criticNet obsInfo actInfo,…ObservationInputNames =“netOin”,…ActionInputNames =“netAin”);
输入检查评论家与随机观察和行动。
getValue(评论家,{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =单-0.4260
DDPG代理使用参数化确定性政策连续动作空间,这是由一个连续实现确定的演员。这个演员需要当前观测作为输入并返回输出一个观察的行动是一个确定性的函数。
模型中的参数化政策的演员,使用一个输入神经网络层(接收环境观察频道的内容,规定obsInfo
)和一个输出层(返回行动对环境行动通道,是指定的actInfo
)。
层的网络定义为一个数组对象。
%创建一个网络作为基本演员接近者actorNet = [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (16) tanhLayer fullyConnectedLayer (16) tanhLayer fullyConnectedLayer (prod (actInfo.Dimension)));%转换为dlnetwork对象actorNet = dlnetwork (actorNet);%显示权重的数量总结(actorNet)
初始化:可学的真正的数字:337输入:1“输入”2的特性
创建一个演员使用actorNet
和观察和操作规范。连续确定的演员的更多信息,请参阅rlContinuousDeterministicActor
。
演员= rlContinuousDeterministicActor (actorNet obsInfo actInfo);
检查演员与一个随机观测输入。
getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[-0.5493]}
创建DDPG代理使用演员和评论家。
代理= rlDDPGAgent(演员,评论家)
代理= rlDDPGAgent属性:ExperienceBuffer: [1 x1 rl.replay。rlReplayMemory] AgentOptions: [1 x1 rl.option。rlDDPGAgentOptions] UseExplorationPolicy: 0 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlNumericSpec] SampleTime: 1
指定代理选项,包括训练演员的选择和评论家。
agent.AgentOptions.SampleTime = env.Ts;agent.AgentOptions.TargetSmoothFactor = 1 e - 3;agent.AgentOptions.ExperienceBufferLength = 1 e6;agent.AgentOptions.DiscountFactor = 0.99;agent.AgentOptions.MiniBatchSize = 32;agent.AgentOptions.CriticOptimizerOptions.LearnRate = 5 e - 3;agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1;agent.AgentOptions.ActorOptimizerOptions.LearnRate = 1的军医;agent.AgentOptions.ActorOptimizerOptions.GradientThreshold = 1;
检查代理使用一个随机观察输入。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[-0.5947]}
你现在可以训练环境内的代理。
创建DDPG代理与复发性神经网络
对于这个示例,负载在示例中使用的环境火车DDPG剂来控制双积分器系统。观察从环境中包含位置和速度是一个向量的质量。代表一个力的行动是一个标量不断从2到2牛顿。
env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);
观察和操作规范对象。
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
DDPG代理使用参数化核反应能量函数近似者估计价值的政策。
模型中的参数化核反应能量函数评论家,使用递归神经网络,它必须有两个输入层和一个输出层(返回标量值)。
定义每个网络路径层对象数组。要创建一个递归神经网络,使用sequenceInputLayer
作为输入层,包括一个lstmLayer
的另一个网络层。
%定义观察和操作路径obsPath = sequenceInputLayer (prod (obsInfo.Dimension),名称=“netOin”);actPath = sequenceInputLayer (prod (actInfo.Dimension),名称=“netAin”);%定义共同的路径:连接在第一维度commonPath = = [concatenationLayer(1、2、名称“猫”)lstmLayer (50) reluLayer fullyConnectedLayer (1)];%添加layerGraph网络路径criticNet = layerGraph (obsPath);criticNet = addLayers (criticNet actPath);criticNet = addLayers (criticNet commonPath);%连接路径criticNet = connectLayers (criticNet,“netOin”,“猫/三机一体”);criticNet = connectLayers (criticNet,“netAin”,“猫/ in2”);%画出网络情节(criticNet)
%转换为dlnetwork对象criticNet = dlnetwork (criticNet);%显示权重的数量总结(criticNet)
初始化:可学的真正的数量:10.8 k输入:1“netOin”序列与二维输入2“netAin”序列输入1维度
创建评论家接近者对象使用criticNet
、环境的观察和行动规范和网络输入层的名称与渠道环境的观察和行动。有关更多信息,请参见rlQValueFunction
。
评论家= rlQValueFunction (criticNet obsInfo actInfo,…ObservationInputNames =“netOin”ActionInputNames =“netAin”);
输入检查评论家与随机观察和行动。
getValue(评论家,{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =单-0.0074
DDPG代理使用一个连续的近似策略确定的演员。自从评论家有复发性网络,你也必须用的复发性网络参与者。
层的网络定义为一个数组对象。
actorNet = [sequenceInputLayer (prod (obsInfo.Dimension)) lstmLayer (10) reluLayer fullyConnectedLayer (prod (actInfo.Dimension)));
转换为dlnetwork
并显示权重的数量。
actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:可学的真正的数字:531输入:1“sequenceinput”序列与二维输入
创建一个演员使用actorNet
和观察和操作规范。连续确定的演员的更多信息,请参阅rlContinuousDeterministicActor
。
演员= rlContinuousDeterministicActor (actorNet obsInfo actInfo);
检查演员用随机观察输入。
getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0.0246]}
指定一些培训选项的评论家。
criticOpts = rlOptimizerOptions (…LearnRate = 5 e - 3, GradientThreshold = 1);
指定一些培训选项的演员。
actorOpts = rlOptimizerOptions (…LearnRate = 1的军医,GradientThreshold = 1);
指定代理选项。与复发性神经网络使用DDPG代理,您必须指定一个SequenceLength
大于1。
agentOpts = rlDDPGAgentOptions (…SampleTime = env.Ts,…TargetSmoothFactor = 1 e - 3,…ExperienceBufferLength = 1 e6,…DiscountFactor = 0.99,…SequenceLength = 20,…MiniBatchSize = 32,…CriticOptimizerOptions = criticOpts,…ActorOptimizerOptions = actorOpts);
创建DDPG代理使用演员和评论家。
代理= rlDDPGAgent(演员、评论家、agentOpts)
代理= rlDDPGAgent属性:ExperienceBuffer: [1 x1 rl.replay。rlReplayMemory] AgentOptions: [1 x1 rl.option。rlDDPGAgentOptions] UseExplorationPolicy: 0 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlNumericSpec] SampleTime: 0.1000
检查你的代理返回从一个随机观察行动。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0.0158]}
评估代理使用连续的观测,使用序列长度(时间)维度。例如,获得一系列的行动9
观察。
(行动、州)= getAction(代理,…{兰德([obsInfo。Dimension 1 9])});
显示相对应的行动第七元素的观察。
action ={1}行动;行动(1,1,1,7)
ans = 0.0780
您现在可以测试和培训环境内的代理。
版本历史
介绍了R2019a
MATLAB명령
다음MATLAB명령에해당하는링크를클릭했습니다。
명령을실행하려면MATLAB명령창에입력하십시오。웹브라우저는MATLAB명령을지원하지않습니다。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。