主要内容

rlTD3Agent

双延迟深度确定性策略梯度强化学习代理

描述

双延迟深度确定性策略梯度(DDPG)算法是一种参与者-批评家、无模型、在线、非策略强化学习方法,它计算一个使长期回报最大化的最优策略。动作空间只能是连续的。

使用rlTD3Agent创建以下类型的代理之一。

  • 具有两个q值函数的双延迟深度确定性策略梯度(TD3)代理。该代理通过学习两个Q值函数,并使用最小值进行策略更新,防止对值函数的过高估计。

  • 具有单一Q值函数的延迟深度确定性策略梯度(延迟DDPG)代理。该代理是一个具有目标策略平滑和延迟策略和目标更新的DDPG代理。

更多信息,请参见双延迟深度确定性策略梯度代理。有关不同类型的强化学习代理的更多信息,请参见强化学习代理

创建

描述

根据观察和行动规格创建代理

例子

代理= rlTD3Agent (observationInfo,actionInfo)为具有给定观察和动作规范的环境创建TD3代理,使用默认的初始化选项。代理中的参与者和批评者使用从观察规范构建的默认深度神经网络observationInfo和动作规范actionInfo。的ObservationInfoActionInfo的属性代理都设置为observationInfoactionInfo分别输入参数。

例子

代理= rlTD3Agent (observationInfo,actionInfo,initOpts)为具有给定观察和行动规范的环境创建一个深度确定性策略梯度代理。类中指定的选项配置的默认网络initOpts对象。有关初始化选项的更多信息,请参见rlAgentInitializationOptions

从演员和评论家创建代理

例子

代理= rlTD3Agent (演员,批评人士,agentOptions)创建具有指定演员和评论家的代理。创建一个:

  • TD3代理,指定批评家的双元行向量。

  • 延迟DDPG代理,指定一个批评家。

指定代理选项

代理= rlTD3Agent (___,agentOptions)创建一个TD3代理,并设置AgentOptions财产agentOptions输入参数。在前面语法中的任何输入参数之后使用此语法。

输入参数

全部展开

代理初始化选项,指定为rlAgentInitializationOptions对象。

演员,指定为rlContinuousDeterministicActor。有关创建actor的更多信息,请参见创建策略和价值函数

批评家,指定为以下之一:

  • rlQValueFunctionobject -创建一个具有单一Q值函数的延迟DDPG代理。该代理是一个具有目标策略平滑和延迟策略和目标更新的DDPG代理。

  • 的二元行向量rlQValueFunctionobjects - Create一个具有两个批评家值函数的TD3代理。这两个批评家网络必须是唯一的rlQValueFunction观察和动作规格相同的物体。批评家要么具有不同的结构,要么具有相同的结构但具有不同的初始参数。

有关创建批评者的更多信息,请参见创建策略和价值函数

属性

全部展开

观测规范,指定为一个强化学习规范对象或一组规范对象,定义诸如观测信号的尺寸、数据类型和名称等属性。

如果通过指定演员和评论家来创建代理,则值ObservationInfo匹配在actor和批评家对象中指定的值。

您可以提取observationInfo从一个现有的环境或代理使用getObservationInfo。您也可以手动构造规格使用rlFiniteSetSpecrlNumericSpec

动作规范,指定为强化学习规范对象,定义诸如尺寸、数据类型和动作信号名称等属性。

由于TD3代理在连续动作空间中操作,所以必须指定actionInfo作为一个rlNumericSpec对象。

如果通过指定演员和评论家来创建代理,则值ActionInfo匹配在actor和批评家对象中指定的值。

您可以提取actionInfo从一个现有的环境或代理使用getActionInfo。您也可以手动构造规范使用rlNumericSpec

代理选项,指定为rlTD3AgentOptions对象。

如果创建一个TD3代理,其默认演员和评论家使用循环神经网络,则默认值为AgentOptions。年代equenceLength32

选项,在选择操作时使用探索策略,指定为以下逻辑值之一。

  • 真正的-选择动作时使用基础代理探索策略。

  • -在选择动作时使用基代理贪婪策略。

经验缓冲区,指定为rlReplayMemory对象。在训练过程中,代理存储它的每个经验(年代,一个,R,年代,D)在缓冲区中。在这里:

  • 年代是当前对环境的观察。

  • 一个是代理所采取的行动。

  • R这是行动的奖励吗一个

  • 年代是采取行动后的下一步观察吗一个

  • D采取行动后是Is -done信号吗一个

代理的采样时间,指定为正标量或1。设置此参数为1允许基于事件的模拟。的价值SampleTime中指定的值AgentOptions

在一个模型®环境中,RL代理块,其中指定代理执行每SampleTime秒模拟时间。如果SampleTime1,块从其父子系统继承采样时间。

在MATLAB®Environment中,每次环境前进时都会执行代理。在这种情况下,SampleTime输出经验中连续元素之间的时间间隔是由sim卡火车。如果SampleTime1,返回的输出经验中连续元素之间的时间间隔反映了触发代理执行的事件的时间。

对象的功能

火车 在指定的环境中训练强化学习代理
sim卡 在指定的环境中模拟训练有素的强化学习代理
getAction 在给定的环境观察中,从代理、参与者或策略对象获得操作
getActor 从强化学习agent中获取actor
setActor 强化学习剂的集合actor
getCritic 从强化学习代理获得批评者
setCritic 强化学习代理的设置批评家
generatePolicyFunction 生成计算代理或策略对象的策略的函数

例子

全部折叠

创造一个具有连续动作空间的环境,并获取其观察和动作规格。对于本例,加载本例中使用的环境训练DDPG代理控制双积分器系统。来自环境的观测是一个包含质量的位置和速度的矢量。作用是一个标量,表示施加在质量上的力,范围从-2到2牛顿不等。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

代理创建函数随机初始化actor和批评家网络。通过固定随机生成器的种子来保证再现性。

rng (0)

根据环境观察和动作规范创建一个TD3代理。

代理= rlTD3Agent (obsInfo actInfo);

要检查你的代理,使用getAction从随机观察中返回动作。

getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0.0087]}

现在可以在环境中测试和训练代理。您还可以使用getActorgetCritic提取演员和评论家,分别和getModel从演员或影评人身上提取近似器模型(默认为深度神经网络)。

创造一个具有连续动作空间的环境,并获得其观察和动作规格。对于本例,加载本例中使用的环境训练DDPG代理用图像观察摆起和平衡摆。这个环境有两个观察结果:一个50 × 50的灰度图像和一个标量(钟摆的角速度)。动作是一个标量,表示从-连续范围内的扭矩22Nm。

%负载预定义环境env = rlPredefinedEnv (“SimplePendulumWithImage-Continuous”);%获得观察和动作规格obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

创建一个代理初始化选项对象,指定网络中每个隐藏的全连接层必须具有128神经元(不是默认的数字,256)。

initOpts = rlAgentInitializationOptions (NumHiddenUnit = 128);

代理创建函数随机初始化actor和批评家网络。你可以通过固定随机生成器的种子来保证再现性。为此,取消下面这一行的注释。

% rng (0)

根据环境观察和动作规范创建DDPG代理。

代理= rlTD3Agent (obsInfo actInfo initOpts);

从演员身上提取深度神经网络。

actorNet = getModel (getActor(代理));

从两位影评人身上提取深度神经网络。请注意,getModel(批评)只返回第一个评论家网络。

批评者= getCritic(代理);criticNet1 = getModel(批评者(1));criticNet2 = getModel(批评者(2));

显示第一个批评家网络的层数,验证每个隐藏的全连接层有128个神经元。

criticNet1。层
ans = 13x1带有图层的图层数组:1的concat串联连接3输入沿着维度1 2的relu_body ReLU ReLU 3“fc_body”完全连接128完全连接层4的body_output ReLU ReLU 5 input_1的图像输入50 x50x1图片6 conv_1二维卷积64 3 x3x1旋转步[1]和填充[0 0 0 0]7‘relu_input_1 ReLU ReLU 8“fc_1”完全连接128完全连接层9“input_2”功能输入1功能10“fc_2”完全连接128完全连接层11“input_3”功能输入1features 12 'fc_3'全连接128全连接层13 'output'全连接1全连接层

绘制出演员和第二个批评家的网络,并显示权重的数量。

情节(layerGraph (actorNet))

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

总结(actorNet)
初始化:true可学习数量:18.9M输入:1' input_1' 50x50x1 images 2' input_2' 1个feature
情节(layerGraph (criticNet2))

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

总结(criticNet2)
初始化:true可学习数量:18.9M输入:1' input_1' 50x50x1 images 2' input_2' 1 features 3' input_3' 1 features

要检查你的代理,使用getAction从随机观察中返回动作。

getAction(代理,{兰特(obsInfo (1) .Dimension),兰德(obsInfo (2) .Dimension)})
ans =1 x1单元阵列{[0.0675]}

现在可以在环境中测试和训练代理。

创造一个具有连续动作空间的环境,并获得其观察和动作规格。对于本例,加载本例中使用的环境训练DDPG代理控制双积分器系统。来自环境的观测是一个包含质量的位置和速度的矢量。作用是一个标量,表示从-开始连续的力22牛顿。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

一个SAC代理使用两个Q-value函数批评家。为了近似每个q值函数,使用神经网络。单输出q值函数批评家的网络必须有两个输入层,一个用于观察,另一个用于行动,并返回一个标量值,表示从给定的观察和行动后续的预期累积长期奖励。

将每个网络路径定义为层对象的数组,以及来自环境规范对象的观察和动作空间的尺寸。

%观察路径obsPath = [featureInputLayer(prod(obsInfo.Dimension),Name= . .“obsPathIn”) fullyConnectedLayer(32) reluLayer fullyConnectedLayer(16,Name= .“obsPathOut”));%的行动路径actPath = [featureInputLayer(prod(actInfo.Dimension),Name= . .“actPathIn”) fullyConnectedLayer(32) reluLayer fullyConnectedLayer(16,Name= .“actPathOut”));%的共同路径commonPath = [concatenationLayer(1,2,Name= .“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)
初始化:true可学习数量:1.2k input: 1 'obsPathIn' 2 features 2 'actPathIn' 1 features

创建两个批评家使用rlQValueFunction,使用两个不同权重的网络。或者,如果使用完全相同的具有相同权值的网络,则必须每次显式初始化网络(以确保权值初始化不同),然后将其传递给rlQValueFunction。要做到这一点,使用初始化

摘要= rlQValueFunction (criticNet1 obsInfo actInfo);critic2 = rlQValueFunction (criticNet2 obsInfo actInfo);

用随机的观察和行动输入检查批评者。

getValue(摘要,{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =-0.1330
getValue (critic2{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =-0.1526

创建一个神经网络,用作演员内部的近似模型。对于TD3代理,行为人执行一个确定性策略,该策略由一个连续确定性行为人实现。在这种情况下,网络必须将观察信号作为输入,并返回一个动作。因此,输出层的元素数量必须和可能的动作数量一样多。

将网络定义为层对象的数组,并从环境规范对象中获取观察空间的维度和可能的动作数量。

actorNet = [featureInputLayer(prod(obsInfo.Dimension)) fullyConnectedLayer(400) reluLayer fullyConnectedLayer(300) reluLayer fullyConnectedLayer(prod(actInfo.Dimension)) tanhLayer];

转换为dlnetwork,显示权重的个数。

actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:true可学习的数量:121.8k输入:1 'input' 2个特征

使用以下命令创建actoractorNet。TD3剂使用rlContinuousDeterministicActor对象来实现actor。

演员= rlContinuousDeterministicActor (actorNet obsInfo actInfo);

用随机的观察输入检查actor。

getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0.0221]}

明确批评家的培训选项。

criticOptions = rlOptimizerOptions (优化器=“亚当”,LearnRate = 1 e - 3,GradientThreshold = 1,L2RegularizationFactor = 2的军医);

为演员指定训练选项。

actorOptions = rlOptimizerOptions (优化器=“亚当”,LearnRate = 1 e - 3,GradientThreshold = 1,L2RegularizationFactor = 1 e-5);

指定代理选项,包括演员和影评人的培训选项。

agentOptions = rlTD3AgentOptions;agentOptions。D是countFactor = 0.99; agentOptions.TargetSmoothFactor = 5e-3; agentOptions.TargetPolicySmoothModel.Variance = 0.2; agentOptions.TargetPolicySmoothModel.LowerLimit = -0.5; agentOptions.TargetPolicySmoothModel.UpperLimit = 0.5; agentOptions.CriticOptimizerOptions = criticOptions; agentOptions.ActorOptimizerOptions = actorOptions;

使用actor、批评家和选项创建TD3代理。

agent = rlTD3Agent(actor,[critic1 critic2],agentOptions);

你也可以创建一个rlTD3Agent对象的值,只指定一个评论家。在本例中,该对象表示一个具有目标策略平滑和延迟策略和目标更新的DDPG代理。

delayedDDPGAgent = rlTD3Agent(演员、摘要、agentOptions);

要检查你的代理,使用getAction从随机观察中返回动作。

getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0.0351]}
getAction (delayedDDPGAgent{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0.0296]}

您现在可以在环境中测试和训练任意一个代理。

对于本例,加载本例中使用的环境训练DDPG代理控制双积分器系统。来自环境的观测是一个包含质量的位置和速度的矢量。作用是一个标量,表示力的范围从-2到2牛顿。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);

获取观察和行动规范。

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

一个SAC代理使用两个Q-value函数批评家。为了逼近每个q值函数,使用深度递归神经网络。单输出q值函数批评家的网络必须有两个输入层,一个用于观察,另一个用于行动,并返回一个标量值,表示从给定的观察和行动后续的预期累积长期奖励。

将每个网络路径定义为层对象的数组,以及来自环境规范对象的观察和动作空间的尺寸。要创建一个循环神经网络,可以使用一个sequenceInputLayer作为输入层,并包含一个lstmLayer作为其他网络层之一。

%定义观察路径obsPath = [sequenceInputLayer(prod(obsInfo.Dimension),Name= .“obsIn”) fullyConnectedLayer(400) reluLayer fullyConnectedLayer(300,Name= .“obsOut”));%定义动作路径actPath = [sequenceInputLayer(prod(actInfo.Dimension),Name= . .“肌动蛋白”) fullyConnectedLayer(300年,Name =“actOut”));%定义共同路径commonPath = [concatenationLayer(1,2,Name= .“猫”) reluLayer lstmLayer (16);fullyConnectedLayer (1)];%添加图层到layerGraph对象criticNet = layerGraph;criticNet = addLayers (criticNet 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)
初始化:true可学习数量:161.6k输入:1 'obsIn' 2维序列输入(CTB) 2 'actIn' 1维序列输入(CTB)

使用以下命令创建批评家rlQValueFunction。对两个批评者使用相同的网络结构。TD3代理使用不同的默认参数初始化两个网络。

摘要= rlQValueFunction (criticNet1 obsInfo actInfo);critic2 = rlQValueFunction (criticNet2 obsInfo actInfo);

用随机的观察和行动输入检查批评者。

getValue(摘要,{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =-0.0060
getValue (critic2{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =0.0481

既然批评家有一个循环网络,那么行动者也必须有一个循环网络作为近似模型。对于TD3代理,行为人执行一个确定性策略,该策略由一个连续确定性行为人实现。在这种情况下,网络必须将观察信号作为输入,并返回一个动作。因此,输出层的元素数量必须和可能的动作数量一样多。

将网络定义为层对象的数组,并从环境规范对象中获取观察空间的维度和可能的动作数量。

actorNet = [sequenceInputLayer(prod(obsInfo.Dimension)) fullyConnectedLayer(400) lstmLayer(8) reluLayer fullyConnectedLayer(300,“名字”,“ActorFC2”) reluLayer fullyConnectedLayer(prod(actInfo.Dimension)) tanhLayer];

转换为dlnetwork,显示权重的个数。

actorNet = dlnetwork (actorNet);总结(actorNet)
可学习的数量:17.2k输入:1 'sequenceinput'二维序列输入(CTB)

使用以下命令创建actoractorNet。TD3剂使用rlContinuousDeterministicActor对象来实现actor。

演员= rlContinuousDeterministicActor (actorNet obsInfo actInfo);

用随机的观察输入检查actor。

getAction(演员,{兰德(obsInfo.Dimension)})
ans =1×1单元阵列{[0.0014]}

明确批评家的培训选项。

criticOptions = rlOptimizerOptions (优化器=“亚当”,LearnRate = 1 e - 3,GradientThreshold = 1,L2RegularizationFactor = 2的军医);

为演员指定训练选项。

actorOptions = rlOptimizerOptions (优化器=“亚当”,LearnRate = 1 e - 3,GradientThreshold = 1,L2RegularizationFactor = 1 e-5);

指定代理选项,包括演员和影评人的培训选项。要使用具有循环神经网络的TD3代理,必须指定一个SequenceLength大于1。

agentOptions = rlTD3AgentOptions;agentOptions。D是countFactor = 0.99; agentOptions.SequenceLength = 32; agentOptions.TargetSmoothFactor = 5e-3; agentOptions.TargetPolicySmoothModel.Variance = 0.2; agentOptions.TargetPolicySmoothModel.LowerLimit = -0.5; agentOptions.TargetPolicySmoothModel.UpperLimit = 0.5; agentOptions.CriticOptimizerOptions = criticOptions; agentOptions.ActorOptimizerOptions = actorOptions;

使用actor、批评家和选项创建TD3代理。

agent = rlTD3Agent(actor,[critic1 critic2],agentOptions);

你也可以创建一个rlTD3Agent对象的值,只指定一个评论家。在本例中,该对象表示一个具有目标策略平滑和延迟策略和目标更新的DDPG代理。

delayedDDPGAgent = rlTD3Agent(演员、摘要、agentOptions);

要检查你的代理,使用getAction从随机观察中返回动作。

getAction(代理,{兰德(obsInfo.Dimension)})
ans =1×1单元阵列{[0.0018]}
getAction (delayedDDPGAgent{兰德(obsInfo.Dimension)})
ans =1×1单元阵列{[0.0015]}

您现在可以在环境中测试和训练任意一个代理。

版本历史

介绍了R2020a

Baidu
map