主要内容

rlTD3Agent

Twin-delayed深确定性(TD3)政策梯度强化学习代理

自从R2020a

描述

twin-delayed深确定性(TD3)策略梯度算法是一个actor-critic,模范自由,在网上,off-policy强化学习方法计算最优政策,最大化的长期回报。操作空间只能是连续的。

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

  • Twin-delayed深决定性策略梯度与两个核反应能量函数(TD3)代理。这个代理可以防止过高的值函数通过学习两个Q值函数和使用政策更新的最小值。

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

有关更多信息,请参见Twin-Delayed深确定性(TD3)政策梯度代理。更多信息在不同类型的强化学习代理,看看强化学习代理

创建

描述

从观察和行动规范创建代理

例子

代理= 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。创建角色的更多信息,请参阅创建政策和价值功能

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

  • rlQValueFunction对象——创建延迟DDPG代理一个Q值函数。这个代理是DDPG代理目标策略平滑和延迟策略和目标的更新。

  • 双元素的行向量rlQValueFunction对象——创建TD3代理两个评论家价值功能。两个评论家网络必须是唯一的rlQValueFunction对象相同的观察和操作规范。批评可以有不同的结构或相同的结构,但不同的初始参数。

创建批评者的更多信息,请参阅创建政策和价值功能

属性

全部展开

观测规范,指定为一个rlFiniteSetSpecrlNumericSpec对象或数组包含一个混合的对象。数组中每个元素定义了一个环境观测通道的特性,比如尺寸,数据类型和名称。

如果您创建代理通过指定一个演员和评论家的价值ObservationInfo匹配指定的值在演员和批评的对象。

您可以提取observationInfo从现有的环境或代理使用getObservationInfo。您还可以手动构建规范使用rlFiniteSetSpecrlNumericSpec

动作规范,指定为一个rlNumericSpec对象。这个对象定义环境行动通道的属性,如尺寸,数据类型和名称。

请注意

只有一个动作频道是被允许的。

如果您创建代理通过指定一个演员和评论家的价值ActionInfo匹配指定的值在演员和批评的对象。

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

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

如果您创建了一个TD3代理与默认的演员和评论家使用递归神经网络,默认值的AgentOptions.SequenceLength32

选择使用探索政策选择行为时,指定为以下之一的逻辑值。

  • 真正的——代理探索政策选择行为时使用基地。

  • ——使用基本代理贪婪策略在选择行动。

经验缓冲区,指定为一个rlReplayMemory对象。在训练代理商店每个经验(年代,一个,R,年代,D)在一个缓冲区。在这里:

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

  • 一个由受托人采取的动作。

  • R奖励采取行动吗一个

  • 年代是下一个观测后采取行动一个

  • D完成信号后采取行动吗一个

样本代理的时候,作为一个积极的标量或指定1。设置这个参数1支持基于事件的模拟。的价值SampleTime匹配指定的值AgentOptions

在一个模型金宝app®环境中,RL代理块中执行每一个指定的代理SampleTime秒的仿真时间。如果SampleTime1块继承了样本时间从母公司子系统。

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

对象的功能

火车 强化学习培训代理在指定的环境中
sim卡 模拟训练强化学习代理在指定的环境中
getAction 从代理,获得动作演员,或政策对象环境的观察
getActor 从强化学习代理提取的演员
setActor 集演员强化学习代理
getCritic 从强化学习代理提取评论家
setCritic 评论家强化学习代理
generatePolicyFunction 生成MATLAB函数,评价代理人的政策或政策对象

例子

全部折叠

创造一个环境,一个持续的行动空间,获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG剂来控制双积分器系统。观察从环境中包含位置和速度是一个向量的质量。行动是一个标量代表一种力量,应用于质量,不断从2到2牛顿。

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

代理创建函数初始化演员和评论家网络随机。确保修复种子再现性的随机发生器。

rng (0)

创建TD3代理从环境中观察和操作规范。

代理= rlTD3Agent (obsInfo actInfo);

检查您的代理,使用getAction返回操作从一个随机的观察。

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

您现在可以测试和培训环境内的代理。您还可以使用getActorgetCritic分别提取演员和评论家getModel提取近似者模型(默认情况下深神经网络)的演员或评论家。

创造一个环境,一个连续的操作空间和获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG代理摇摆起来,平衡摆与图像观察。这个环境有两个观察:50-by-50灰度图像和一个标量(摆的角速度)。行动是一个标量代表一个力矩范围从-不断22Nm。

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

创建一个代理对象初始化选项,指定每个隐藏在网络必须完全连接层128年神经元(而不是默认的号码,256年)。

initOpts = rlAgentInitializationOptions (NumHiddenUnit = 128);

代理创建函数初始化演员和评论家网络随机。确保修复种子再现性的随机发生器。

rng (0)

创建DDPG代理从环境中观察和操作规范。

代理= rlTD3Agent (obsInfo actInfo initOpts);

从演员提取深层神经网络。

actorNet = getModel (getActor(代理));

从这两个评论家提取深层神经网络。请注意,getModel(批评)只返回第一个批评网络。

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

验证每个隐藏完全连接层有128个神经元,可以显示层MATLAB®命令窗口,

criticNet1.Layers

或可视化结构交互使用analyzeNetwork

analyzeNetwork (criticNet1)

情节演员和第二网络的评论家,并显示权重的数量。

情节(layerGraph (actorNet))

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

总结(actorNet)
初始化:可学的真正的数字:18.9输入:1“input_1”50 x50x1图片2的input_2 1功能
情节(layerGraph (criticNet2))

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

总结(criticNet2)
初始化:可学的真正的数字:18.9输入:1“input_1”50 x50x1图片2的input_2 1 3‘input_3 1功能特性

检查您的代理,使用getAction返回操作从一个随机的观察。

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

您现在可以测试和培训环境内的代理。

创造一个环境,一个连续的操作空间和获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG剂来控制双积分器系统。观察从环境中包含位置和速度是一个向量的质量。代表一个力的行动是一个标量不断从2到2牛顿。

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

TD3代理使用两个核反应能量函数的批评者。核反应能量函数批评家接受当前的观察和行动作为输入并返回一个标量输出(估计折扣累积长期奖励采取对应的行动从国家目前的观察,和后政策之后)。

模型参数化核反应能量函数在批评,使用神经网络和两个输入层(一个用于观测通道,所指定的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);critic2 = rlQValueFunction (criticNet2 obsInfo actInfo);

对核反应能量函数近似者的更多信息,使用rlQValueFunction

检查批评与输入随机观察和行动。

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

TD3代理使用参数化确定性政策连续动作空间,这是由一个连续实现确定的演员。这个演员需要当前观测作为输入并返回输出一个观察的行动是一个确定性的函数。

模型中的参数化政策的演员,使用一个输入神经网络层(接收环境观察频道的内容,规定obsInfo)和一个输出层(返回行动对环境行动通道,是指定的actInfo)。

层的网络定义为一个数组对象。

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

转换为dlnetwork并显示权重的数量。

actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:真很多可学的:121.8 k输入:1“输入”2的特性

创建一个演员使用actorNet和环境规范对象。

演员= rlContinuousDeterministicActor (actorNet obsInfo actInfo);

连续确定的演员接近者的更多信息,请参阅rlContinuousDeterministicActor

检查演员与一个随机观测输入。

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;

创建TD3代理使用演员,批评,和选项。

代理= rlTD3Agent(演员,[摘要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);

TD3代理使用两个核反应能量函数的批评者。模型参数化核反应能量函数在批评,使用两个输入层的递归神经网络(一个用于观测通道,所指定的obsInfo,行动的其他渠道,指定的actInfo)和一个输出层(返回标量值)。

定义每个网络路径层对象数组。创建一个周期性网络,使用sequenceInputLayer作为输入层,包括至少一个lstmLayer

%定义观察路径obsPath = [sequenceInputLayer (prod (obsInfo.Dimension),名称=“obsIn”)fullyConnectedLayer (400) reluLayer fullyConnectedLayer(300年,名字=“obsOut”));%定义行动路径actPath = [sequenceInputLayer (prod (actInfo.Dimension),名称=“肌动蛋白”)fullyConnectedLayer(300年,Name =“actOut”));%定义常见的路径commonPath = = [concatenationLayer(1、2、名称“猫”)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)
初始化:可学的真正的数量:161.6 k输入:1“obsIn”序列输入2二维肌动蛋白的序列输入1维度

创建一个评论家批评使用相同的网络结构。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

批评有复发性网络以来,连续确定的演员必须有复发性网络作为近似模型。网络模型参数化政策,必须采取观察和返回的行动。

层的网络定义为一个数组对象。

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.2 k输入:1“sequenceinput”序列与二维输入

创建一个演员使用actorNet和环境规范对象。

演员= rlContinuousDeterministicActor (actorNet obsInfo actInfo);

检查演员与一个随机观测输入。

getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[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;

创建TD3代理使用演员,批评,和选项。

代理= rlTD3Agent(演员,[摘要critic2], agentOptions);

您还可以创建一个rlTD3Agent对象用一个评论家。在这种情况下,对象表示一个DDPG代理与目标政策平滑和延迟更新政策和目标。

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

检查你的代理使用getAction返回操作从一个随机的观察。

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

评估代理使用连续的观测,使用序列长度(时间)维度。例如,获得一系列的行动9观察。

(行动、州)= getAction(代理,{兰德([obsInfo。Dimension 1 9])});

显示相对应的行动第七元素的观察。

action ={1}行动;行动(1,1,1,7)
ans = -0.0034

您现在可以测试和培训环境内的代理。

版本历史

介绍了R2020a