主要内容

rlDDPGAgent

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

描述

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

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

创建

描述

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

例子

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

例子

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

从演员和批评者表示创建代理商

例子

代理= rlDDPGAgent (演员评论家agentOptions使用默认的DDPG代理选项,使用指定的actor和评论家网络创建一个DDPG代理。

指定代理选项

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

输入参数

全部展开

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

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

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

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

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

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

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

批评网络表示,指定为rlQValueRepresentation对象。有关创建评论家表示的更多信息,请参见创建策略和价值功能表示

属性

全部展开

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

经验缓冲区,指定为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)

根据环境观察和操作规范创建策略梯度代理。

代理= rlDDPGAgent (obsInfo actInfo);

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

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

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

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

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

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

initOpts = rlAgentInitializationOptions (“NumHiddenUnit”, 128);

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

%rng(0)

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

代理= rlddpgagent(Obsinfo,Actinfo,Enitopts);

将批评评论率降低到1E-3。

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

从主体、行动者和批评者中提取深度神经网络。

actorNet = getModel (getActor(代理));criticNet = getModel (getCritic(代理));

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

criticNet。层
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)

情节(criticNet)

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

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

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

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

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

创建一个评论家表示。

%创建一个用于用作底层批评的网络近似值statePath = imageInputLayer([obsInfo.Dimension(1) 1 1]),“归一化”“没有”“名字”“状态”);actionPath = imageInputLayer([numel(actInfo) 1 1]),“归一化”“没有”“名字”“行动”);commonPath = [concatenationLayer(1、2、“名字”“concat”) quadraticLayer (“名字”“二次”) fullyConnectedLayer (1,“名字”“StateValue”“BiasLearnRateFactor”0,“偏见”, 0)];criticNetwork = layerGraph (statePath);= addLayers(criticNetwork, actionPath);criticNetwork = addLayers(criticNetwork, commonPath);criticNetwork = connectLayers (criticNetwork,“状态”“concat /三机一体”);criticNetwork = connectLayers (criticNetwork,“行动”“concat / in2”);为评论家设置一些选项criticOpts = rlRepresentationOptions (“LearnRate”,5e-3,“GradientThreshold”1);%创建基于网络近似器的批评家评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,...“观察”,{“状态”},'行动',{“行动”}, criticOpts);

创建一个参与者表示。

%创建一个用作底层参与者近似器的网络[obsInfo.Dimension(1) 1],“归一化”“没有”“名字”“状态”) fullyConnectedLayer(元素个数(actInfo),“名字”“行动”“BiasLearnRateFactor”0,“偏见”, 0)];为actor设置一些选项actorOpts = rlRepresentationOptions (“LearnRate”1 e-04“GradientThreshold”1);基于网络近似器创建参与者演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,...“观察”,{“状态”},'行动',{“行动”}, actorOpts);

指定代理选项,并使用环境、参与者和评论家创建DDPG代理。

agentOpts = rlDDPGAgentOptions (...“SampleTime”env。Ts,...“TargetSmoothFactor”1 e - 3,...“ExperienceBufferLength”1 e6,...“DiscountFactor”, 0.99,...“MiniBatchSize”、32);代理= rlDDPGAgent(演员、评论家、agentOpts);

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

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

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

介绍了R2019a