主要内容

rlDDPGAgent

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

描述

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

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

创建

描述

根据观察和动作规范创建Agent

例子

代理= 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对象。

如果您创建一个使用循环神经网络的默认参与者和批评表示的DDPG代理,则默认值AgentOptions。年代equenceLength32

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

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

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

  • R行动的回报是什么一个

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

有关代理在训练期间如何从缓冲区中采样的更多信息,请参见深度确定性政策梯度代理

对象的功能

火车 在指定的环境中训练强化学习代理
sim卡 在指定的环境中模拟训练过的强化学习代理
getAction 在给定的环境观测中,从agent或actor表示中获得动作
getActor 从强化学习agent中得到行动者表示
setActor 设置强化学习agent的行动者表示
getCritic 从强化学习代理中获得批评代表
setCritic 设置强化学习agent的批评家表示
generatePolicyFunction 创建评估强化学习机训练策略的函数

例子

全部折叠

创造一个具有连续行动空间的环境,并获得其观察和行动规范。对于本例,加载本例中使用的环境训练DDPG代理控制双集成商系统.来自环境的观测是一个包含质量的位置和速度的矢量。作用力是一个标量,代表作用于物体上的力,范围连续从-开始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代理摆起和摆平衡.这个环境有两个观测值:一个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 initOpts);

将批评家的学习速度降低到1e-3。

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

分别从行为主体和批评主体提取深度神经网络。

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

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

criticNet。层
包含层的层数组:1的concat串联连接3输入沿着维度3 2的relu_body ReLU ReLU 3“fc_body”完全连接128完全连接层4的body_output ReLU ReLU 5 input_1的图像输入50 x50x1图片6 conv_1卷积64 3 x3x1旋转步[1]和填充[0 0 0 0]7‘relu_input_1 ReLU ReLU 8 fc_1完全连接128 full connected layer 9 'input_2' Image Input 1x1x1 images 10 'fc_2' full connected layer 11 'input_3' Image Input 1x1x1 images 12 'fc_3' full connected layer 13 'output' full connected 1 full connected layer 14 'RepresentationLoss' Regression output mean-squared-error

情节演员和评论家网络

情节(actorNet)

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

情节(criticNet)

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

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

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

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

创造一个具有连续行动空间的环境,获得其观察和行动规范。对于本例,加载本例中使用的环境训练DDPG代理控制双集成商系统.来自环境的观测是一个包含质量的位置和速度的矢量。作用力是一个标量,代表一个连续范围为-的力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);actionPath = addLayers(criticNetwork, actionPath);addLayers(criticNetwork, commonPath);criticNetwork = connectLayers (criticNetwork,“状态”“concat /三机一体”);criticNetwork = connectLayers (criticNetwork,“行动”“concat / in2”);%为评论家设置一些选项criticOpts = rlRepresentationOptions (“LearnRate”, 5 e - 3,“GradientThreshold”1);%创建基于网络逼近器的评论家评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,...“观察”, {“状态”},“行动”, {“行动”}, criticOpts);

创建一个参与者表示。

%创建一个网络,用作底层的actor逼近器actorNetwork = [imageInputLayer([obsInfo.Dimension(1) 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]}

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

对于本例,加载本例中使用的环境训练DDPG代理控制双集成商系统.来自环境的观测是一个包含质量的位置和速度的矢量。作用力是一个标量,代表一个连续范围为-的力22牛顿。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);

获得观察和行动规范信息。

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

创建一个评论家的代表。要创建一个循环神经网络,使用sequenceInputLayer作为输入层,并包含lstmLayer作为其他网络层之一。

statePath = sequenceInputLayer (obsInfo.Dimension (1),“归一化”“没有”“名字”“myobs”);actionPath = sequenceInputLayer(元素个数(actInfo),“归一化”“没有”“名字”“myact”);commonPath = [concatenationLayer(1、2、“名字”“concat”) reluLayer (“名字”“relu”) lstmLayer (8,“OutputMode”“序列”“名字”“lstm”) fullyConnectedLayer (1,“名字”“StateValue”“BiasLearnRateFactor”0,“偏见”, 0)];criticNetwork = layerGraph (statePath);actionPath = addLayers(criticNetwork, actionPath);addLayers(criticNetwork, commonPath);criticNetwork = connectLayers (criticNetwork,“myobs”“concat /三机一体”);criticNetwork = connectLayers (criticNetwork,“myact”“concat / in2”);

为评论家设置一些选项。

criticOpts = rlRepresentationOptions (“LearnRate”, 5 e - 3,“GradientThreshold”1);

创建基于网络逼近器的评论家。

评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,...“观察”, {“myobs”},“行动”, {“myact”}, criticOpts);

创建一个参与者表示。

既然评论家有一个循环网络,行动者也必须有一个循环网络。为行动者定义一个递归神经网络。

actorNetwork = [sequenceInputLayer(obsInfo.Dimension(1),“归一化”“没有”“名字”“myobs”) lstmLayer (8,“OutputMode”“序列”“名字”“lstm”) fullyConnectedLayer(元素个数(actInfo),“名字”“myact”“BiasLearnRateFactor”0,“偏见”, 0)];

演员的选择。

actorOpts = rlRepresentationOptions (“LearnRate”1 e-04“GradientThreshold”1);

创建一个演员。

演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,...“观察”, {“myobs”},“行动”, {“myact”}, actorOpts);

指定代理选项,并使用环境、参与者和评论家创建DDPG代理。要使用带有递归神经网络的DDPG代理,必须指定一个SequenceLength大于1。

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

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

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

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

介绍了R2019a