主要内容

rlTD3Agent

双延迟深度确定性策略梯度强化学习主体

描述

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

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

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

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

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

创建

描述

从观察和操作规范中创建代理

例子

代理= rlTD3Agent (observationInfoactionInfo使用默认初始化选项,为具有给定观察和操作规范的环境创建TD3代理。代理中的行动者和批评者表示使用从观察规范构建的默认深度神经网络observationInfo以及动作规范actionInfo

例子

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

从演员和评论家代表创建代理

例子

代理= rlTD3Agent (演员批评人士agentOptions使用指定的参与者和批评者表示创建代理。创建一个:

  • TD3代理,指定一个批评家表示的双元素行向量。

  • 延迟的DDPG代理,指定一个单一的批评家表示。

指定代理选项

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

输入参数

全部展开

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

您可以提取observationInfo从现有环境或代理使用getObservationInfo.您还可以使用以下方法手工构造规范rlFiniteSetSpecrlNumericSpec

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

由于DDPG代理在连续操作空间中操作,因此必须指定actionInfo作为一个rlNumericSpec对象。

您可以提取actionInfo从现有环境或代理使用getActionInfo.您还可以使用rlNumericSpec

的代理初始化选项rlAgentInitializationOptions对象。

角色网络表示,指定为rlDeterministicActorRepresentation对象。有关创建角色表示的更多信息,请参见创建策略和价值功能表示

批评家网络表示,指定为下列之一:

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

  • 两个元素的行向量rlQValueRepresentationobjects—创建一个带有两个批判值函数的TD3代理。这两个评论网络必须是独一无二的rlQValueRepresentation具有相同观察和动作规范的对象。表示形式可以具有不同的结构,也可以具有相同的结构但具有不同的初始参数。

有关创建评论家表示的更多信息,请参见创建策略和价值功能表示

属性

全部展开

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

如果您创建一个TD3代理,使用循环神经网络的默认参与者和批评者表示,则默认值为AgentOptions。年代equenceLength32

经验缓冲区,指定为ExperienceBuffer对象。在培训期间,代理存储它的每个经验(年代一个R年代)在缓冲中。在这里:

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

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

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

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

有关代理样本在训练期间如何从缓冲区获得经验的更多信息,请参见双延迟深度确定性策略梯度代理

对象的功能

火车 在指定的环境中训练强化学习代理
sim卡 在指定的环境中模拟训练过的强化学习代理
getAction 根据环境观察,从行为者或行动者的表现中获得行动
getActor 从强化学习代理中获得角色表示
setActor 设置强化学习主体的主体表示
getCritic 从强化学习代理获得批判表示
setCritic 集合强化学习代理的批判表示
generatePolicyFunction 创建评估强化学习代理的训练策略的函数

例子

全部折叠

创造一个具有连续动作空间的环境,并获得其观察和动作规范。对于本示例,请加载示例中使用的环境培训DDPG Agent控制双积分系统.从环境中观察到的是一个包含质量的位置和速度的矢量。作用是一个标量,表示作用于物体上的力,从-开始连续变化22牛顿。

加载预定义环境env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);%获得观察和行动规范obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

代理创建函数随机初始化参与者和批评者网络。您可以通过固定随机生成器的种子来确保重现性。为此,取消下面一行的注释。

% rng (0)

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

代理= rlTD3Agent (obsInfo actInfo);

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

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

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

创造一个具有连续动作空间的环境,并获得其观察和动作规范。对于本示例,请加载示例中使用的环境用图像观察训练DDPG Agent上摆和平衡摆.这个环境有两个观测值:一个50乘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);

将批评家的学习率降低到1e-3和2e-3。

评论家= getCritic(代理);(1) .Options批评者。LearnRate = 1 e - 3;(2) .Options批评者。LearnRate = 2 e - 3;代理= setCritic(代理、批评);

从actor中提取深度神经网络。

actorNet = getModel (getActor(代理));

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

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

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

criticNet1。层
ans = 14x1图层数组:1的concat串联连接3输入沿着维度3 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完全连接fc_2' fully connected 128 fully connected layer 11 'input_3' Image Input 1x1x1 images 12 'fc_3' fully connected 128 fully connected layer 13 'output' fully connected 1 fully connected layer 14 'RepresentationLoss' Regression output mean平方误差

画出演员和第二个评论家的关系网。

情节(actorNet)

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

情节(criticNet2)

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

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

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

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

创造一个具有连续动作空间的环境,并获得其观察和动作规范。对于本示例,请加载示例中使用的环境培训DDPG Agent控制双积分系统.从环境中观察到的是一个包含质量的位置和速度的矢量。这个作用是一个标量,表示从-连续范围的力22牛顿。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);numObs = obsInfo.Dimension (1);actInfo = getActionInfo (env);numAct =元素个数(actInfo);

创建两个q值批评家表示。首先,建立批判深度神经网络结构。

statePath1 = [featureInputLayer(numObs,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (400,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticStateRelu1”) fullyConnectedLayer (300,“名字”“CriticStateFC2”));actionPath1 = [featureInputLayer(numAct,“归一化”“没有”“名字”“行动”) fullyConnectedLayer (300,“名字”“CriticActionFC1”));commonPath1 =[附加图层(2,“名字”“添加”) reluLayer (“名字”“CriticCommonRelu1”) fullyConnectedLayer (1,“名字”“CriticOutput”));criticNet = layerGraph (statePath1);criticNet = addLayers (criticNet actionPath1);criticNet = addLayers (criticNet commonPath1);criticNet = connectLayers (criticNet,“CriticStateFC2”“添加/三机一体”);criticNet = connectLayers (criticNet,“CriticActionFC1”“添加/ in2”);

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

criticOptions = rlRepresentationOptions (“优化”“亚当”“LearnRate”1 e - 3,...“GradientThreshold”,1,“L2RegularizationFactor”2的军医);摘要= rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”, {“观察”},“行动”, {“行动”}, criticOptions);critic2 = rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”, {“观察”},“行动”, {“行动”}, criticOptions);

为参与者创建一个深度神经网络。

actorNet = [featureInputLayer(nummobs,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (400,“名字”“ActorFC1”) reluLayer (“名字”“ActorRelu1”) fullyConnectedLayer (300,“名字”“ActorFC2”) reluLayer (“名字”“ActorRelu2”) fullyConnectedLayer (numAct“名字”“ActorFC3”) tanhLayer (“名字”“ActorTanh1”));

创建确定性参与者表示。

actorOptions = rlRepresentationOptions (“优化”“亚当”“LearnRate”1 e - 3,...“GradientThreshold”,1,“L2RegularizationFactor”1 e-5);演员= rlDeterministicActorRepresentation (actorNet obsInfo actInfo,...“观察”, {“观察”},“行动”, {“ActorTanh1”}, actorOptions);

指定代理选项。

agentOptions = rlTD3AgentOptions;agentOptions。DiscountFactor = 0.99;agentOptions。TargetSmoothFactor = 5 e - 3;agentOptions.TargetPolicySmoothModel.Variance = 0.2;agentOptions.TargetPolicySmoothModel.LowerLimit = -0.5;agentOptions.TargetPolicySmoothModel.UpperLimit = 0.5;

使用参与者、批评者和选项创建TD3代理。

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

您还可以创建rlTD3Agent用一个批评家来反对。在本例中,该对象表示带有目标策略平滑、延迟策略和目标更新的DDPG代理。

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

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

getAction(代理,{兰德(2,1)})
ans =1 x1单元阵列{[0.0304]}
getAction (delayedDDPGAgent{兰德(2,1)})
ans =1 x1单元阵列{[-0.0142]}

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

对于本示例,请加载示例中使用的环境培训DDPG Agent控制双积分系统.从环境中观察到的是一个包含质量的位置和速度的矢量。这个作用是一个标量,表示从-连续范围的力22牛顿。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);

获得观察和行动规范。

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

获得观察次数和行动次数。

numObs = obsInfo.Dimension (1);numAct =元素个数(actInfo);

创建两个q值批评家表示。首先,建立批判深度神经网络结构。要创建递归神经网络,请使用sequenceInputLayer作为输入层,并包含lstmLayer作为其他网络层之一。

statePath1 = [sequenceInputLayer(nummobs,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (400,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticStateRelu1”) fullyConnectedLayer (300,“名字”“CriticStateFC2”));actionPath1 = [sequenceInputLayer(numAct,“归一化”“没有”“名字”“行动”) fullyConnectedLayer (300,“名字”“CriticActionFC1”));commonPath1 =[附加图层(2,“名字”“添加”) reluLayer (“名字”“CriticCommonRelu1”) lstmLayer (16“OutputMode”“序列”“名字”“CriticLSTM”);fullyConnectedLayer (1,“名字”“CriticOutput”));criticNet = layerGraph (statePath1);criticNet = addLayers (criticNet actionPath1);criticNet = addLayers (criticNet commonPath1);criticNet = connectLayers (criticNet,“CriticStateFC2”“添加/三机一体”);criticNet = connectLayers (criticNet,“CriticActionFC1”“添加/ in2”);

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

criticOptions = rlRepresentationOptions (“优化”“亚当”“LearnRate”1 e - 3,...“GradientThreshold”,1,“L2RegularizationFactor”2的军医);摘要= rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”, {“观察”},“行动”, {“行动”}, criticOptions);critic2 = rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”, {“观察”},“行动”, {“行动”}, criticOptions);

为参与者创建一个深度神经网络。既然评论家有一个循环网络,那么演员也必须有一个循环网络。

actorNet = [sequenceInputLayer(nummob,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (400,“名字”“ActorFC1”) lstmLayer (8,“OutputMode”“序列”“名字”“ActorLSTM”) reluLayer (“名字”“ActorRelu1”) fullyConnectedLayer (300,“名字”“ActorFC2”) reluLayer (“名字”“ActorRelu2”) fullyConnectedLayer (numAct“名字”“ActorFC3”) tanhLayer (“名字”“ActorTanh1”));

创建确定性参与者表示。

actorOptions = rlRepresentationOptions (“优化”“亚当”“LearnRate”1 e - 3,...“GradientThreshold”,1,“L2RegularizationFactor”1 e-5);演员= rlDeterministicActorRepresentation (actorNet obsInfo actInfo,...“观察”, {“观察”},“行动”, {“ActorTanh1”}, actorOptions);

指定代理选项。要使用递归神经网络的TD3代理,必须指定SequenceLength大于1。

agentOptions = rlTD3AgentOptions;agentOptions。DiscountFactor = 0.99;agentOptions。年代equenceLength = 32; agentOptions.TargetSmoothFactor = 5e-3; agentOptions.TargetPolicySmoothModel.Variance = 0.2; agentOptions.TargetPolicySmoothModel.LowerLimit = -0.5; agentOptions.TargetPolicySmoothModel.UpperLimit = 0.5;

使用参与者、批评者和选项创建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.0014]}

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

介绍了R2020a