主要内容

rlDDPGAgent

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

描述

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

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

创建

描述

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

例子

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

例子

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

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

例子

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

指定代理选项

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

输入参数

全部展开

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

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

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

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

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

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

角色网络表示形式,指定为rlDeterministicActorRepresentation。有关创建参与者表示的更多信息,请参见创建策略和值函数表示

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

属性

全部展开

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

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

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

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

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

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

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

对象的功能

火车 在指定的环境中训练强化学习代理
sim卡 在指定的环境中模拟训练好的强化学习代理
getAction 从给定环境观察的代理或参与者表示中获取动作
getActor 从强化学习代理中获得参与者表示
setActor 设置强化学习代理的参与者表示
getCritic 从强化学习代理中获得评论家表示
setCritic 设置强化学习代理的批评表示
generatePolicyFunction 创建评估强化学习代理训练策略的函数

例子

全部折叠

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

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

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

% rng (0)

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

agent = rlDDPGAgent(obsInfo,actInfo);

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

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

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

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

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

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

initOpts = rlAgentInitializationOptions“NumHiddenUnit”, 128);

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

% rng (0)

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

agent = rlDDPGAgent(obsInfo,actInfo,initOpts);

降低评论家学习率为1e-3。

批评家= get批评家(代理);critical . options . learnrate = 1e-3;agent = set批评家(代理,评论家);

从行动者和评论家中提取深度神经网络。

actorNet = getModel(代理);criticNet = getModel(get批评家(代理));

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

criticNet。层
ans = 14x1带有图层的图层数组: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'图像输入1x1x1图像10 'fc_2'全连接128全连接层11 'input_3'图像输入1x1x1图像12 'fc_3'全连接128全连接层13 '输出'全连接1全连接层14 'RepresentationLoss'回归输出均方误差

情节演员和评论家网络

情节(actorNet)

情节(criticNet)

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

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

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

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

负载百分比预定义环境环境= 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);criticNetwork = addLayers(criticNetwork, actionPath);criticNetwork = addLayers(criticNetwork, commonPath);临界网络= connectLayers(临界网络,“状态”“concat /三机一体”);临界网络= connectLayers(临界网络,“行动”“concat / in2”);为评论家设置一些选项criticOpts = rlRepresentationOptions(“LearnRate”, 5 e - 3,“GradientThreshold”1);基于网络逼近器创建评论家。评论= rlQValueRepresentation(批评网络,obsInfo,actInfo,“观察”, {“状态”},“行动”, {“行动”}, criticOpts);

创建一个参与者表示。

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

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

agentOpts = rlDDPGAgentOptions(“SampleTime”env。Ts,“TargetSmoothFactor”1 e - 3,“ExperienceBufferLength”1 e6,“DiscountFactor”, 0.99,“MiniBatchSize”、32);agent = rlDDPGAgent(actor,批评家,agentOpts);

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

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

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

在R2019a中引入
Baidu
map