主要内容

RLTD3试剂

双延迟深层确定性策略梯度强化学习agent

描述

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

使用RLTD3试剂创建下列代理类型之一。

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

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

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

创造

描述

根据观察和操作规范创建代理

例子

代理人=rlTD3Agent(观测信息行动信息使用默认初始化选项为具有给定观察和操作规范的环境创建TD3代理。代理中的参与者和批评者表示使用根据观察规范构建的默认深度神经网络观测信息和动作规范行动信息

例子

代理人=rlTD3Agent(观测信息行动信息初始选项为具有给定观察和操作规范的环境创建深度确定性策略梯度代理。该代理使用使用中指定的选项配置的默认网络初始选项对象。有关初始化选项的更多信息,请参见rlagentinizationoptions

从参与者和批评家表示创建代理

例子

代理人=rlTD3Agent(演员评论家agentOptions使用指定的参与者和评论家表示创建代理。要创建代理,请执行以下操作:

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

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

指定代理选项

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

输入参数

全部展开

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

您可以提取观测信息从现有环境或代理使用获取观测信息。您也可以使用手动构造规范rlFiniteSetSpecrlNumericSpec

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

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

您可以提取行动信息从现有环境或代理使用getActionInfo.您还可以使用rlNumericSpec

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

参与者网络表示,指定为决定论呈现有关创建参与者表示的详细信息,请参见创建策略和值函数表示

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

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

  • 二元行向量rlQValueRepresentation对象-创建具有两个临界值函数的TD3代理。两个临界值网络必须是唯一的rlQValueRepresentation具有相同观察和动作规范的对象。表示可以具有不同的结构,也可以具有相同的结构但具有不同的初始参数。

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

性质

全部展开

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

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

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

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

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

  • 是的采取行动后的下一个观察结果是什么一个

有关代理示例在培训期间如何从缓冲区体验的更多信息,请参阅双延迟深度确定性策略梯度代理

对象的功能

火车 在指定的环境中训练强化学习代理
sim卡 在指定环境中模拟经过培训的强化学习代理
getAction 根据环境观察,从行为者或行动者的表现中获得行动
getActor 从强化学习代理获取参与者表示
setActor 强化学习agent的集参与者表示
Get批评家 从强化学习代理获取批评表示
setCritic 集合强化学习代理的批判表示
generatePolicyFunction 创建评估强化学习代理的培训策略的函数

例子

全部折叠

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

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

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

%rng(0)

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

agent=rlTD3Agent(obsInfo、actInfo);

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

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

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

创建具有连续动作空间的环境,并获取其观察和动作规范。对于本例,加载示例中使用的环境通过图像观察训练DDPG药剂摆动和平衡摆锤。此环境有两个观测值:一个50×50的灰度图像和一个标量(摆锤的角速度)。该动作是一个标量,表示从-22纳米。

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

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

initOpts=rlagentinizationoptions(“NumHiddenUnit”, 128);

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

%rng(0)

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

agent=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(agent));

从两位评论家那里提取深层神经网络getModel(评论家)仅返回第一个评论家网络。

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

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

criticNet1。层
ans=14x1带层的层阵列:1“concat”沿维度3个输入的串联2“relu_body”relu relu 3“fc_body”完全连接128个完全连接的层4“body_输出”relu relu 5“input_1”图像输入50x50x1图像6“conv_1”卷积64 3x1x1带跨步[1]和填充的卷积[0 0 0 0 0]7“relu_输入_1”relu relu 8“fc_1”完全连接128完全连接层9“输入_2”图像输入1x1x1图像10“fc_2”完全连接128完全连接层11“输入_3”图像输入1x1图像12“fc_3”完全连接128完全连接层13“输出”完全连接1完全连接层14“表示损失”回归输出均方误差

描绘演员和第二位评论家的关系网。

情节(actorNet)

绘图(关键ET2)

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

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

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

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

env = rlPredefinedEnv (“双积分连续”);obsInfo=getObservationInfo(env);numObs=obsInfo.Dimension(1);actInfo=getActionInfo(env);numAct=numel(actInfo);

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

statePath1=[featureInputLayer(numObs,“正常化”“没有”“名字”“观察”)完全连接层(400,“名字”“CriticStateFC1”) reluLayer (“名字”“Criticsaterelu1”)完全连接层(300,“名字”“CriticStateFC2”));actionPath1 = [featureInputLayer(numAct,“正常化”“没有”“名字”“行动”)完全连接层(300,“名字”“CriticActionFC1”));commonPath1 =[附加图层(2,“名字”“添加”) reluLayer (“名字”“CriticCommonRelu1”)完全连接层(1,“名字”“临界输出”) ]; criticNet=图层图(状态路径1);criticNet=添加层(criticNet,actionPath1);criticNet=添加层(criticNet,commonPath1);criticNet=连接层(criticNet,“CriticStateFC2”“添加/in1”);criticNet=连接层(criticNet,“CriticActionFC1”“添加/in2”);

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

临界点=rlRepresentationOptions(“优化器”“亚当”“LearnRate”,1e-3,...“GradientThreshold”1.“L2调节因子”,2e-4);临界C1=rlQValueRepresentation(临界网、obsInfo、actInfo、,...“观察”,{“观察”},“行动”,{“行动”},临界点);临界点2=rlQValueRepresentation(临界点网、obsInfo、actInfo、,...“观察”,{“观察”},“行动”,{“行动”},批评);

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

actorNet=[featureInputLayer(numObs,“正常化”“没有”“名字”“观察”)完全连接层(400,“名字”“ActorFC1”) reluLayer (“名字”“ActorRelu1”)完全连接层(300,“名字”“ActorFC2”) reluLayer (“名字”“ActorRelu2”) fullyConnectedLayer (numAct“名字”“ActorFC3”)坦莱尔(“名字”“阿克托坦1”));

创建确定性参与者表示。

ActorProptions=rlRepresentationOptions(“优化器”“亚当”“LearnRate”,1e-3,...“GradientThreshold”1.“L2调节因子”1 e-5);演员= rlDeterministicActorRepresentation (actorNet obsInfo actInfo,...“观察”,{“观察”},“行动”,{“阿克托坦1”},动植物);

指定代理选项。

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(参与者,[critic1-critic2],代理);

您还可以创建一个RLTD3试剂用一个批评家来反对。在这种情况下,对象表示具有目标策略平滑和延迟策略和目标更新的DDPG代理。

DelayeddPgagent=RLTD3代理(参与者、关键1、代理);

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

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

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

介绍了R2020a