主要内容

rlTD3Agent

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

描述

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

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

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

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

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

创建

描述

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

例子

代理= rlTD3Agent (observationInfoactionInfo使用默认初始化选项,为具有给定观察和操作规范的环境创建TD3代理。代理中的行动者和评论家使用从观察规范构建的默认深度神经网络observationInfo以及动作规范actionInfo.的ObservationInfo而且ActionInfo的属性代理设置为observationInfo而且actionInfo分别输入参数。

例子

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

从演员和评论家创建代理

例子

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

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

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

指定代理选项

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

输入参数

全部展开

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

参与者,指定为rlContinuousDeterministicActor.有关创建角色的详细信息,请参见创建策略和值函数

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

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

  • 的两元行向量rlQValueFunctionobjects—创建带有两个临界值函数的TD3代理。这两个评论网络必须是唯一的rlQValueFunction具有相同的观察和操作规范的对象。批评家可以有不同的结构,也可以有相同的结构但初始参数不同。

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

属性

全部展开

观察规范,指定为强化学习规范对象或定义维度、数据类型和观察信号名称等属性的规范对象数组。

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

你可以提取observationInfo从现有环境或代理中使用getObservationInfo.您还可以使用rlFiniteSetSpecrlNumericSpec

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

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

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

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

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

如果您创建一个使用循环神经网络的缺省参与者和评论家的TD3代理,则AgentOptions。年代equenceLength32

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

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

  • —选择动作时使用base agent greedy策略。

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

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

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

  • R采取行动的奖励是什么一个

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

  • D是否在采取行动后发出“完成”信号一个

试剂的取样时间,指定为正标量或-1.将此参数设置为-1允许基于事件的模拟。的价值SampleTime中指定的值AgentOptions

在Simulink金宝app中®环境中,RL代理块,在其中指定代理执行每个SampleTime秒模拟时间。如果SampleTime-1,块从它的父子系统继承采样时间。

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

对象的功能

火车 在指定的环境中训练强化学习代理
sim卡 在指定的环境中模拟训练好的强化学习代理
getAction 给定环境观测,从代理或行动者获得动作
getActor 从强化学习代理中得到actor
setActor 强化学习代理的集合角色
getCritic 从强化学习代理获得评论家
setCritic 强化学习代理集评论家
generatePolicyFunction 创建评估强化学习代理训练策略的函数

例子

全部折叠

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

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

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

% rng (0)

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

agent = rlTD3Agent(obsInfo,actInfo);

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

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

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

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

负载百分比预定义环境环境= rlPredefinedEnv(“SimplePendulumWithImage-Continuous”);获得观察和行动规范obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);

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

initOpts = rlAgentInitializationOptions“NumHiddenUnit”, 128);

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

% rng (0)

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

agent = rlTD3Agent(obsInfo,actInfo,initOpts);

从参与者中提取深层神经网络。

actorNet = getModel(代理);

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

批评家= get批评家(代理);criticNet1 = getModel(批评家(1));getModel(批评家(2));

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

criticNet1。层
ans = 13x1带有图层的图层数组:1' concat' Concatenation 3个输入沿维度1的连接2' relu_body' ReLU ReLU 3' fc_body'全连接128全连接层4 'body_output' ReLU ReLU 5 'input_1'图像输入50x50x1图像6 'conv_1' Convolution 64 3x3x1卷积与stride[1 1]和填充[0 0 0 0 0]7 'relu_input_1' ReLU ReLU 8 'fc_1'全连接128全连接层9 'input_2'特征输入1特征10 'fc_2'全连接128全连接层11 ' input3 '特征输入1功能12 'fc_3'全连接128全连接层13 '输出'全连接1全连接层

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

情节(layerGraph (actorNet))

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

情节(layerGraph (criticNet2))

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

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

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

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

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

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

创建两个q值评论家。首先,创建一个批评家深度神经网络结构。单输出q值函数评论家的网络必须有两个输入层,一个用于观察,另一个用于操作,并返回一个标量值,表示给定的观察和操作之后预期的累积长期奖励。

statePath1 = [featureInputLayer(prod(obsInfo.Dimension)),“归一化”“没有”“名字”“观察”) fullyConnectedLayer (400,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticStateRelu1”) fullyConnectedLayer (300,“名字”“CriticStateFC2”));actionPath1 = [featureInputLayer(prod(actInfo.Dimension)),“归一化”“没有”“名字”“行动”) fullyConnectedLayer (300,“名字”“CriticActionFC1”));commonPath1 = [addtionlayer (2,“名字”“添加”) reluLayer (“名字”“CriticCommonRelu1”) fullyConnectedLayer (1,“名字”“CriticOutput”));criticNet = layerGraph(statePath1);criticNet = addLayers(criticNet,actionPath1);addLayers(criticNet,commonPath1);临界网络= connectLayers(临界网络,“CriticStateFC2”“添加/三机一体”);临界网络= connectLayers(临界网络,“CriticActionFC1”“添加/ in2”);

使用rlQValueFunction.对两个评论家使用相同的网络结构。TD3代理使用不同的默认参数初始化两个网络。

critic1 = rlQValueFunction(criticNet,obsInfo,actInfo);critic2 = rlQValueFunction(criticNet,obsInfo,actInfo);

为评论家设置一些培训选项。

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

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

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

使用以下命令创建参与者actorNet.TD3制剂使用rlContinuousDeterministicActor对象来实现参与者。

actor = rlContinuousDeterministicActor(actorNet,obsInfo,actInfo);

为演员设置一些训练选项。

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代理。

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

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

delayedDDPGAgent = rlTD3Agent(actor,critic1,agentOptions);

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

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

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

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

环境= rlPredefinedEnv(“DoubleIntegrator-Continuous”);

获得观察和行动规范。

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

创建两个q值评论家。首先,创建一个批评家深度神经网络结构。单输出q值函数评论家的网络必须有两个输入层,一个用于观察,另一个用于操作,并返回一个标量值,表示给定的观察和操作之后预期的累积长期奖励。

要创建循环神经网络,请使用sequenceInputLayer作为输入层并包含一个lstmLayer作为其他网络层之一。

statePath1 = [sequenceInputLayer(prod(obsInfo.Dimension)),“归一化”“没有”“名字”“观察”) fullyConnectedLayer (400,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticStateRelu1”) fullyConnectedLayer (300,“名字”“CriticStateFC2”));actionPath1 = [sequenceInputLayer(prod(actInfo.Dimension)),“归一化”“没有”“名字”“行动”) fullyConnectedLayer (300,“名字”“CriticActionFC1”));commonPath1 = [addtionlayer (2,“名字”“添加”) reluLayer (“名字”“CriticCommonRelu1”) lstmLayer (16“OutputMode”“序列”“名字”“CriticLSTM”);fullyConnectedLayer (1,“名字”“CriticOutput”));criticNet = layerGraph(statePath1);criticNet = addLayers(criticNet,actionPath1);addLayers(criticNet,commonPath1);临界网络= connectLayers(临界网络,“CriticStateFC2”“添加/三机一体”);临界网络= connectLayers(临界网络,“CriticActionFC1”“添加/ in2”);

使用rlQValueFunction.对两个评论家使用相同的网络结构。TD3代理使用不同的默认参数初始化两个网络。

critic1 = rlQValueFunction(criticNet,obsInfo,actInfo);critic2 = rlQValueFunction(criticNet,obsInfo,actInfo);

为评论家设置一些训练选项。

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

创建一个神经网络,用作角色内的近似模型。对于TD3代理,参与者执行一个确定性策略,该策略由一个连续确定性参与者实现。在这种情况下,网络必须将观察信号作为输入并返回操作。因此,输出层必须拥有与可能的操作数量一样多的元素。既然评论家有一个循环网络,那么演员也一定有一个循环网络。

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

使用以下命令创建参与者actorNet.TD3制剂使用rlContinuousDeterministicActor对象来实现参与者。

actor = rlContinuousDeterministicActor(actorNet,obsInfo,actInfo);

为演员设置一些训练选项。

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代理。

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

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

delayedDDPGAgent = rlTD3Agent(actor,critic1,agentOptions);

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

getAction(代理,{兰德(obsInfo.Dimension)})
ans =1×1单元格数组{[-0.0018]}
getAction (delayedDDPGAgent{兰德(obsInfo.Dimension)})
ans =1×1单元格数组{[-0.0014]}

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

版本历史

R2020a中引入