主要内容

rlddpgagent.

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

描述

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

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

创造

描述

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

示例

代理人= rlDDPGAgent (观察税收ActionInfo.创建一个用于给定的观察和操作规范的环境中的深确定性政策梯度剂,使用缺省初始化选项。在代理使用默认的演员和评论家表示深层神经网络从观测规范构建观察税收和行动规范ActionInfo.

示例

代理人= rlDDPGAgent (观察税收ActionInfo.初学者为具有给定观察和操作规范的环境创建一个深度确定性策略梯度代理。属性中指定的选项配置的默认网络初学者对象。有关初始化选项的详细信息,请参阅rlagentinitializationOptions.

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

示例

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

指定代理选项

代理人= rlDDPGAgent (___agentOptions创建一个DDPG剂,并设置代理选项属性设置agentOptions输入参数。在上一个语法中的任何输入参数后使用此语法。

输入参数

全部展开

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

您可以提取观察税收从使用现有的环境或试剂getobservationInfo..您也可以手动构建规范使用rlfinitesetspec.或者rlNumericSpec

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

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

您可以提取ActionInfo.从使用现有的环境或试剂getActionInfo.您也可以构建规范使用手动rlNumericSpec

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

Actor网络表示,指定为RLDETerminyActorRepresentation.有关创建演员表示的更多信息,请参阅创建策略和值函数表示

评论网络表示,指定为rlqvalueerepresentation对象。有关创建批评识别的更多信息,请参阅创建策略和值函数表示

属性

全部展开

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

如果您使用使用递归神经网络的默认参与者和批评者表示创建DDPG代理,则默认值为AgentOptions.SequencElength.32.

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

  • S.是环境的当前观察。

  • A.是由代理所采取的行动。

  • R.是采取行动的奖励A.

  • S'下一步观察是在采取行动之后吗A.

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

对象功能

训练 火车加固规定的环境内学习代理商
SIM卡 在指定环境中模拟培训的钢筋学习代理
的getAction 获得代理或演员表示给定的环境观测行动
getActor 从强化学习代理中获得角色表示
setActor 设置钢筋学习代理的演员代表
getCritic 从强化学习代理人获取评论家表示
setCritic 强化学习剂套装评论家表示
generatePolicyFunction 创建评估强化学习代理的训练策略的函数

例子

崩溃

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

加载预定义环境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灰度图像和标量(摆动的角速度)。动作是表示扭矩连续的标量 -2到目前为止2纳米。

加载预定义环境ENV = rlPredefinedEnv(“SimplePendulumWithImage,连续”);%获得观察和行动规范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(GetAttor(代理));批评= getModel(accritic(代理));

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

criticNet.Layers
ans = 14x1图层数组: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完全连接fc_2' fully connected 128 fully connected layer 11 'input_3' Image Input 1x1x1 images 12 'fc_3' fully connected 128 fully connected layer 13 'output' fully connected 1 fully connected layer 14 'RepresentationLoss' Regression output mean平方误差

情节演员和批评网络

情节(ACTORNET)

图包含轴。轴包含类型graphplot的对象。

图(criticNet)

图包含轴。轴包含类型graphplot的对象。

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

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

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

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

ENV = rlPredefinedEnv(“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);Actinfo = GetActionInfo(Env);

创建一个评论家表示。

%创建一个用于用作底层批评的网络近似值statePath = imageInputLayer([obsInfo.Dimension(1) 1 1]),“归一化”“无”“名称”“国家”);ActionPath = ImageInputLayer([Numel(ActInfo)1 1],“归一化”“无”“名称”“行动”);文件版本= [concatenationLayer(1,2,“名称”'concat') quadraticLayer (“名称”“二次”)全康连接层(1,“名称”'StateValue''biaslearnratefactor',0,'偏见',0)];criticNetwork = layerGraph(statePath);criticNetwork = addLayers(criticNetwork,actionPath);criticNetwork = addLayers(criticNetwork,文件版本);criticNetwork = connectLayers(criticNetwork,“国家”'的concat / IN1');criticNetwork = connectLayers(criticNetwork,“行动”'的concat /英寸2');%为评论家设置一些选项criticOpts = rlRepresentationOptions('LearnRate', 5 e - 3,'GradientThreshold',1);%创建一个基于网络的逼近评论家评论家= rlQValueRepresentation(criticNetwork,obsInfo,actInfo,......'观察',{“国家”},“行动”,{“行动”},批评);

创建一个演员表示。

%创建一个用于用作底层演员近似器的网络actorNetwork = [imageInputLayer([obsInfo.Dimension(1)1 1],“归一化”“无”“名称”“国家”)fullyConnectedLayer(numel(actInfo),“名称”“行动”'biaslearnratefactor'0,'偏见', 0)];%设置一些选项为演员actorOpts = rlRepresentationOptions('LearnRate',1e-04,'GradientThreshold',1);基于网络近似器创建参与者Actor = RLDETerminyActorRepresentation(Actornetwork,Obsinfo,Actinfo,......'观察',{“国家”},“行动”,{“行动”},actorOpts);

指定代理的选项,以及使用环境,演员和评论家创建DDPG剂。

agentOpts = rlDDPGAgentOptions (......“SampleTime”,env.Ts,......'TargetSmoothFactor',1e-3,......'ExperienceBufferLength',1E6,......'DiscountFactor',0.99,......'minibatchsize',32);剂= rlDDPGAgent(演员,评论家,agentOpts);

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

GetAction(代理,{rand(2,1)})
ANS =1 x1单元阵列{[-0.4719]}

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

对于此示例,请加载示例中使用的环境火车DDPG代理控制双积分系统.从环境中观察到的是一个包含质量的位置和速度的矢量。这个作用是一个标量,表示从-连续范围的力2到目前为止2牛顿。

ENV = rlPredefinedEnv(“DoubleIntegrator-Continuous”);

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

obsInfo = getObservationInfo (env);Actinfo = GetActionInfo(Env);

创建一个评论家表示。要创建递归神经网络,请使用sequenceInputlayer.作为输入层并包括一个lstmLayer作为其他网络层之一。

equentpath = sequenceInputlayer(ObsInfo.dimension(1),“归一化”“无”“名称”'myobs');ActionPath = sequenceInputLayer(Numel(ActInfo),“归一化”“无”“名称”“myact”);文件版本= [concatenationLayer(1,2,“名称”'concat')reluLayer(“名称”'relu')lstmLayer(8,“OutputMode”“序列”“名称”'lstm')全康连接层(1,“名称”'StateValue''biaslearnratefactor',0,'偏见',0)];criticNetwork = layerGraph(statePath);criticNetwork = addLayers(criticNetwork,actionPath);criticNetwork = addLayers(criticNetwork,文件版本);criticNetwork = connectLayers(criticNetwork,'myobs''的concat / IN1');criticNetwork = connectLayers(criticNetwork,“myact”'的concat /英寸2');

设置评论家一些选项。

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

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

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

创建一个演员表示。

由于评论家有一个经常性网络,因此演员也必须具有经常性网络。为演员定义反复性神经网络。

actorNetwork = [sequenceInputLayer(obsInfo.Dimension(1),“归一化”“无”“名称”'myobs')lstmLayer(8,“OutputMode”“序列”“名称”'lstm')fullyConnectedLayer(numel(actInfo),“名称”“myact”'biaslearnratefactor',0,'偏见',0)];

演员的选择。

actorOpts = rlRepresentationOptions('LearnRate',1e-04,'GradientThreshold',1);

创建演员。

Actor = RLDETerminyActorRepresentation(Actornetwork,Obsinfo,Actinfo,......'观察',{'myobs'},“行动”,{“myact”},actorOpts);

指定代理的选项,以及使用环境,演员和评论家创建DDPG剂。使用具有复发性神经网络中DDPG剂,你必须指定一个SequenceLength大于1。

agentOpts = rlDDPGAgentOptions (......“SampleTime”,env.Ts,......'TargetSmoothFactor',1e-3,......'ExperienceBufferLength',1E6,......'DiscountFactor',0.99,......'SequenceLength'20,......'minibatchsize',32);剂= rlDDPGAgent(演员,评论家,agentOpts);

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

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

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

介绍了在R2019a