主要内容

rlTD3Agent

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

描述

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

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

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

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

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

创建

描述

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

实例

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

实例

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

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

实例

代理= rlTD3Agent (演员,评论家,代理)使用指定的参与者和批评者表示创建代理。创建一个:

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

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

指定代理选项

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

输入参数

全部展开

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

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

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

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

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

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

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

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

  • rlQValueRepresentation对象-创建具有单个Q值函数的延迟DDPG代理。此代理是具有目标策略平滑和延迟策略及目标更新的DDPG代理。

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

有关创建批评家表达的详细信息,请参见创建策略和价值功能表示

属性

全部展开

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

如果使用使用递归神经网络的默认参与者和批评家表示创建TD3代理,则默认值为AgentOptions。sequenceLength32

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

  • s是当前对环境的观察。

  • A.是代理所采取的行动。

  • R是采取行动的回报吗A.

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

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

目标函数

火车 在特定环境中培训强化学习代理
模拟 在指定的环境中模拟训练过的强化学习代理
getAction 从给定环境观察的代理或参与者表示中获取操作
getActor 从强化学习代理获取参与者表示
设置器 设置强化学习主体的主体表示
getCritic 从强化学习代理获得批判表示
赛特评论家 集合强化学习代理的批判表示
生成策略函数 创建评估强化学习代理的培训策略的函数

例子

全部崩溃

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

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

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

%rng(0)

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

代理= rlTD3Agent (obsInfo actInfo);

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

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

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

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

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

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

initOpts = rlAgentInitializationOptions (“NumHiddenUnit”,128);

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

%rng(0)

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

agent=rlTD3Agent(obsInfo、actInfo、initOpts);

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

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

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

actorNet = getModel (getActor(代理));

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

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

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

临界值1.层
ans = 13x1图层数组:1“input_1”图像输入50 x50x1图片2 conv_1卷积64 3 x3x1旋转步[1]和填充[0 0 0 0]3‘relu_input_1 ReLU ReLU 4 fc_1完全连接128完全连接层5“input_2”功能输入1功能6 fc_2完全连接128完全连接层7“input_3”功能输入1功能8 fc_3完全Connected 128 fully Connected layer 9 'concat' concat连接沿尺寸1的3个输入的连接10 'relu_body' ReLU ReLU 11 'fc_body' fully Connected 128 fully Connected layer 12 'body_output' ReLU ReLU 13 'output' fully Connected 1 fully Connected layer

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

情节(layerGraph (actorNet))

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

绘图(图层图(临界ET2))

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

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

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

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

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

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

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

statePath1 = [featureInputLayer(numObs,“归一化”,“没有”,“姓名”,“观察”) fullyConnectedLayer (400,“姓名”,“CriticStateFC1”)雷卢耶(“姓名”,“CriticStateRelu1”) fullyConnectedLayer (300,“姓名”,“CriticStateFC2”) ]; actionPath1=[featureInputLayer(numAct,“归一化”,“没有”,“姓名”,“行动”) fullyConnectedLayer (300,“姓名”,“CriticActionFC1”) ]; commonPath1=[additionLayer(2,“姓名”,“添加”)雷卢耶(“姓名”,“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,...“梯度阈值”,1,“L2RegularizationFactor”2的军医);摘要= rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”,{“观察”},“行动”,{“行动”}, criticOptions);critic2 = rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”,{“观察”},“行动”,{“行动”}, criticOptions);

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

actorNet = [featureInputLayer(nummobs,“归一化”,“没有”,“姓名”,“观察”) fullyConnectedLayer (400,“姓名”,“ActorFC1”)雷卢耶(“姓名”,“ActorRelu1”) fullyConnectedLayer (300,“姓名”,“ActorFC2”)雷卢耶(“姓名”,“ActorRelu2”) fullyConnectedLayer (numAct“姓名”,“ActorFC3”)坦莱尔(“姓名”,“ActorTanh1”));

创建确定性参与者表示。

actorOptions = rlRepresentationOptions (“优化”,“亚当”,“LearnRate”1 e - 3,...“梯度阈值”,1,“L2RegularizationFactor”,1e-5);actor=rlDeterministicActorRepresentation(actorNet、obsInfo、actInfo、,...“观察”,{“观察”},“行动”,{“ActorTanh1”},动植物);

指定代理选项。

agentOptions=rlTD3AgentOptions;agentOptions.DiscountFactor=0.99;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(代理,{兰德(2,1)})
ans=1 x1单元阵列{[0.0304]}
getAction(delayedDDPGAgent,{rand(2,1)})
ans=1 x1单元阵列{[-0.0142]}

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

对于本示例,请加载示例中使用的环境培训DDPG代理控制双积分系统环境观测是一个包含质量位置和速度的矢量。作用是一个标量,表示从-2.2.牛顿。

env=rlPredefinedEnv(“DoubleIntegrator-Continuous”);

获得观察和行动规范。

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

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

numObs=obsInfo.Dimension(1);numAct=numel(actInfo);

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

statePath1 = [sequenceInputLayer(nummobs,“归一化”,“没有”,“姓名”,“观察”) fullyConnectedLayer (400,“姓名”,“CriticStateFC1”)雷卢耶(“姓名”,“CriticStateRelu1”) fullyConnectedLayer (300,“姓名”,“CriticStateFC2”));actionPath1 = [sequenceInputLayer(numAct,“归一化”,“没有”,“姓名”,“行动”) fullyConnectedLayer (300,“姓名”,“CriticActionFC1”) ]; commonPath1=[additionLayer(2,“姓名”,“添加”)雷卢耶(“姓名”,“CriticCommonRelu1”) lstmLayer (16“OutputMode”,“顺序”,“姓名”,“CriticLSTM”); 完全连接层(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,...“梯度阈值”,1,“L2RegularizationFactor”2的军医);摘要= rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”,{“观察”},“行动”,{“行动”}, criticOptions);critic2 = rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”,{“观察”},“行动”,{“行动”}, criticOptions);

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

actorNet = [sequenceInputLayer(nummob,“归一化”,“没有”,“姓名”,“观察”) fullyConnectedLayer (400,“姓名”,“ActorFC1”)第1层(8,“OutputMode”,“顺序”,“姓名”,“ActorLSTM”)雷卢耶(“姓名”,“ActorRelu1”) fullyConnectedLayer (300,“姓名”,“ActorFC2”)雷卢耶(“姓名”,“ActorRelu2”) fullyConnectedLayer (numAct“姓名”,“ActorFC3”)坦莱尔(“姓名”,“ActorTanh1”));

创建确定性参与者表示。

actorOptions = rlRepresentationOptions (“优化”,“亚当”,“LearnRate”1 e - 3,...“梯度阈值”,1,“L2RegularizationFactor”,1e-5);actor=rlDeterministicActorRepresentation(actorNet、obsInfo、actInfo、,...“观察”,{“观察”},“行动”,{“ActorTanh1”},动植物);

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

agentOptions = rlTD3AgentOptions;agentOptions。DiscountFactor = 0.99;agentOptions。sequenceLength = 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(代理,{rand(obsInfo.Dimension)})
ans=1×1单元阵列{[-0.0018]}
getAction(delayedDDPGAgent,{rand(obsInfo.Dimension)})
ans=1×1单元阵列{[-0.0014]}

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

在R2020a中引入