主要内容

rlTD3Agent

双延迟深度确定性政策梯度加固学习代理

描述

双延迟深度确定性政策梯度(DDPG)算法是演员 - 评论家,无模型,在线,脱助策略加强学习方法,这些禁止措施方法计算了最佳策略,最大化了长期奖励。动作空间只能是连续的。

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

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

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

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

创建

描述

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

例子

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

例子

代理人= rlTD3Agent (observationInfoactionInfo初学者为具有给定观察和动作规范的环境创建一个深度确定的政策梯度代理。代理使用使用指定的选项配置的默认网络初学者对象。有关初始化选项的详细信息,请参阅rlAgentInitializationOptions

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

例子

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

  • TD3代理,指定一个两个元素的批评表现的载体矢量。

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

指定代理选项

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

输入参数

展开全部

观察规范,指定为钢筋学习规范对象或规范对象数组,定义诸如尺寸,数据类型和观察信号的名称等属性。

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

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

由于DDPG代理在连续动作空间中运行,因此必须指定actionInfo作为A.rlnumericspec.对象。

你可以提取actionInfo从现有的环境或代理商使用getActionInfo..您还可以使用手动构造规范rlnumericspec.

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

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

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

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

  • 两个元素行矢量rlQValueRepresentation对象 - 使用两个批评函数创建TD3代理。两个批评网络必须是独一无二的rlQValueRepresentation具有相同观察和行动规范的对象。表示可以具有不同的结构或相同的结构,但具有不同的初始参数。

有关创建批评识别的更多信息,请参阅创建策略和值函数表示

特性

展开全部

代理选项,指定为rltd3agentoptions.对象。

如果您创建一个带有默认演员和使用经常性神经网络的批评者表示的TD3代理,则默认值AgentOptions.SequencElength.32

经验缓冲区,指定为一个经验缓慢对象。在培训期间,代理商存储其每个经验(S.一种R.年代)在缓冲区中。这里:

  • S.是目前对环境的观察。

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

  • R.是采取行动的奖励一种

  • 年代采取行动后的下一次观察一种

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

对象功能

火车 在指定环境中列车加固学习代理
SIM 在指定的环境中模拟训练过的强化学习代理
getAction 从代理商或演员代表获取行动给定环境观察
工作者 获取钢筋学习代理人的演员代表
setActor. 设置强化学习主体的主体表示
透镜 从强化学习代理获得批判表示
setcritic. 集合强化学习代理的批判表示
generatePolicyFunction 创建评估培训的强化学习代理策略的功能

例子

全部折叠

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

%加载预定义环境Env = Rlpredefinedenv(“双凝胶组连续”);%获得观察和行动规范ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(ENV);

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

%rng(0)

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

代理= rltd3agent(Obsinfo,Actinfo);

检查您的代理人,使用getAction从随机观察返回动作。

GetAction(代理,{rand(ObsInfo(1).dimension)})
ans =.1x1细胞阵列{[0.0087]}

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

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

%加载预定义环境Env = Rlpredefinedenv(“SimpleEdpulumWithimage-insult”);%获得观察和行动规范ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(ENV);

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

Initopts = rlagentinitializationOptions('numhidendentunit',128);

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

%rng(0)

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

代理= rltd3agent(Obsinfo,Actinfo,Initopts);

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

评论家=克罗里特(代理人);评论家(1).Options.Learnrate = 1E-3;评论家(2).Options.Learnrate = 2E-3;代理= setcritic(代理商,批评者);

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

actorNet = getModel (getActor(代理));

从两个批评者中提取深神经网络。注意GetModel(批评者)只返回第一个批评网络。

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

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

批评1.Layers.
ANS = 14x1层阵列具有层数:1'求解'沿尺寸3的输入串联连接3 2'Relu_Body'Relu 3'FC_Body'完全连接的128完全连接的第4层Body_Output'Relu Relu 5'Infum_1'图像输入50x50x1图像6'conv_1'卷积64 3x3x1卷曲升级[1 1]和填充[0 0 0 0] 7'Relu_Input_1'Relu Relu 8'FC_1'完全连接的128完全连接的第9层Input_2'图像输入1x1x1图像10'FC_2'完全连接的128完全连接层11'Input_3'图像输入1x1x1图像12'fc_3'完全连接的128完全连接的层13'输出'完全连接的1完全连接的第14层'表示数值均值均值

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

情节(actorNet)

图包含轴。轴包含Type Graphplot的对象。

绘图(批判网)

图包含轴。轴包含Type Graphplot的对象。

检查您的代理人,使用getAction从随机观察返回动作。

GetAction(代理,{rand(ObsInfo(1).dimiles),Rand(Obsinfo(2).dimension)})
ans =.1x1细胞阵列{[0.0675]}

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

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

Env = Rlpredefinedenv(“双凝胶组连续”);ObsInfo = GetobservationInfo(ENV);numobs = obsinfo.dimension(1);Actinfo = GetActionInfo(ENV);numact = numel(Actinfo);

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

equenatepath1 = [featurenputlayer(numobs,'正常化''没有任何''名称''观察') fullyConnectedLayer (400,'名称'“CriticStateFC1”)剥离('名称'“CriticStateRelu1”) fullyConnectedLayer (300,'名称'“CriticStateFC2”)];actionPath1 = [featureInputLayer(Numact,'正常化''没有任何''名称''行动') fullyConnectedLayer (300,'名称''批评FC1')];commonpath1 = [添加层(2,'名称'“添加”)剥离('名称''批判杂志')全康连接层(1,'名称'“CriticOutput”)];批评=图表图(attnatpath1);批评= addlayers(批评,actionpath1);批评= AddLayers(批评,CommonPath1);criticNet = connectLayers (criticNet,“CriticStateFC2”“添加/三机一体”);criticNet = connectLayers (criticNet,'批评FC1'“添加/ in2”);

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

criticOptions = rlRepresentationOptions ('优化器''亚当''学习'1 e - 3,......'gradientthreshold',1,'l2regularizationfactor',2e-4);批评1 = rlqvalueerepresentation(批评,Obsinfo,Actinfo,......'观察',{'观察'},'行动',{'行动'},批评);批评2 = rlqvaluerepresentation(批评,obsinfo,actinfo,......'观察',{'观察'},'行动',{'行动'},批评);

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

actorNet = [featureInputLayer(nummobs,'正常化''没有任何''名称''观察') fullyConnectedLayer (400,'名称''actorfc1')剥离('名称'“ActorRelu1”) fullyConnectedLayer (300,'名称'“ActorFC2”)剥离('名称'“ActorRelu2”) fullyConnectedLayer (numAct'名称'“ActorFC3”)Tanhlayer('名称''actortanh1')];

创建确定性参与者表示。

actorOptions = rlRepresentationOptions ('优化器''亚当''学习'1 e - 3,......'gradientthreshold',1,'l2regularizationfactor',1E-5);Actor = RLDETerminyActorRepresentation(Actornet,Obsinfo,Actinfo,......'观察',{'观察'},'行动',{'actortanh1'},ActorOptions);

指定代理选项。

agentOptions = rlTD3AgentOptions;AgentOptions.discountfactor = 0.99;AgentOptions.targetSmoothFactor = 5E-3;agentOptions.TargetPolicySmoothModel.Variance = 0.2;agentOptions.TargetPolicySmoothModel.LowerLimit = -0.5;代理选项.targetpolicysmoothmodel.upperlimit = 0.5;

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

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

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

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

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

GetAction(代理,{rand(2,1)})
ans =.1x1细胞阵列{[0.0304]}
GetAction(delayedddpgagent,{rand(2,1)})
ans =.1x1细胞阵列{[-0.0142]}

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

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

Env = Rlpredefinedenv(“双凝胶组连续”);

获得观察和行动规范。

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 = [sequentInputLayer(Numact,'正常化''没有任何''名称''行动') fullyConnectedLayer (300,'名称''批评FC1')];commonpath1 = [添加层(2,'名称'“添加”)剥离('名称''批判杂志')LSTMLAYER(16,'OutputMode''顺序''名称''批评者');全康统计(1,'名称'“CriticOutput”)];批评=图表图(attnatpath1);批评= addlayers(批评,actionpath1);批评= AddLayers(批评,CommonPath1);criticNet = connectLayers (criticNet,“CriticStateFC2”“添加/三机一体”);criticNet = connectLayers (criticNet,'批评FC1'“添加/ in2”);

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

criticOptions = rlRepresentationOptions ('优化器''亚当''学习'1 e - 3,......'gradientthreshold',1,'l2regularizationfactor',2e-4);批评1 = rlqvalueerepresentation(批评,Obsinfo,Actinfo,......'观察',{'观察'},'行动',{'行动'},批评);批评2 = rlqvaluerepresentation(批评,obsinfo,actinfo,......'观察',{'观察'},'行动',{'行动'},批评);

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

actorNet = [sequenceInputLayer(nummob,'正常化''没有任何''名称''观察') fullyConnectedLayer (400,'名称''actorfc1')LSTMLAYER(8,'OutputMode''顺序''名称''Actorlstm')剥离('名称'“ActorRelu1”) fullyConnectedLayer (300,'名称'“ActorFC2”)剥离('名称'“ActorRelu2”) fullyConnectedLayer (numAct'名称'“ActorFC3”)Tanhlayer('名称''actortanh1')];

创建确定性参与者表示。

actorOptions = rlRepresentationOptions ('优化器''亚当''学习'1 e - 3,......'gradientthreshold',1,'l2regularizationfactor',1E-5);Actor = RLDETerminyActorRepresentation(Actornet,Obsinfo,Actinfo,......'观察',{'观察'},'行动',{'actortanh1'},ActorOptions);

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

agentOptions = rlTD3AgentOptions;AgentOptions.discountfactor = 0.99;agentOptions。S.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(代理,{rand(ObsInfo.dimension)})
ans =.1×1个单元阵列{[-0.0018]}
getAction (delayedDDPGAgent{兰德(obsInfo.Dimension)})
ans =.1×1个单元阵列{[-0.0014]}

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

在R2020A中介​​绍