主要内容

RLDDPG试剂

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

描述

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

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

创造

描述

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

实例

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

实例

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

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

实例

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

指定代理选项

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

输入参数

全部展开

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

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

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

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

你可以提取行动信息从现有环境或代理使用getActionInfo。您也可以使用手动构造规范rlNumericSpec

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

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

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

属性

全部展开

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

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

经验缓冲区,指定为ExperienceBuffer对象。在培训期间,代理存储其每个体验(s,A.,R,是的)在缓冲中。在这里:

  • s是当前对环境的观察。

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

  • R是采取行动的回报吗A.

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

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

目标函数

火车 在特定环境中培训强化学习代理
模拟 在指定环境中模拟经过培训的强化学习代理
getAction 从给定环境观察的代理或参与者表示中获取操作
getActor 从强化学习代理中获得角色表示
设置器 强化学习agent的集参与者表示
getCritic 从强化学习代理获取批评表示
赛特评论家 强化学习agent的集批评表示
生成策略函数 创建评估强化学习代理的训练策略的函数

例子

全部崩溃

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

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

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

% rng (0)

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

agent=rlDDPGAgent(obsInfo,actInfo);

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

getAction(代理,{rand(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代理。

agent=rlDDPGAgent(obsInfo、actInfo、initOpts);

将批判学习率降低到1e-3。

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

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

actorNet=getModel(getActor(agent));criticNet=getModel(getCritic(agent));

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

临界层
ans=13x1带层的层阵列:1'输入_1'图像输入50x50x1图像2'转换_1'卷积64 3x3x1带跨距[1]和填充[0]3“relu_输入_1”relu relu 4“fc_1”完全连接128个完全连接的层5“输入_2”功能输入1功能6“fc_2”完全连接128个完全连接的层7“输入_3”功能输入1功能8“fc_3”完全连接128个完全连接的层9“concat”沿维度的3个输入串联10“relu_主体”relu relu11“fc_body”完全连接128完全连接层12“body_output”ReLU ReLU 13“output”完全连接1完全连接层

情节演员和评论家网络

绘图(层图(actorNet))

Figure包含axes对象。axes对象包含graphplot类型的对象。

情节(layerGraph (criticNet))

Figure包含axes对象。axes对象包含graphplot类型的对象。

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

getAction(代理,{rand(obsInfo(1.Dimension),rand(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],“归一化”,“没有”,“姓名”,“行动”); commonPath=[连接层(1,2,“姓名”,“海螺”) quadraticLayer (“姓名”,“二次”) fullyConnectedLayer (1,“姓名”,“状态值”,“BiasLearnRateFactor”, 0,“偏见”,0)];临界网络=层图(状态路径);临界网络=添加层(临界网络,动作路径);临界网络=添加层(临界网络,公共路径);临界网络=连接层(临界网络,“国家”,“concat/in1”);临界网络=连接层(临界网络,“行动”,“concat/in2”);为评论家设置一些选项criticOpts=rlRepresentationOptions(“LearnRate”, 5 e - 3,“梯度阈值”,1);%基于网络逼近器创建批评家critic=rlQValueRepresentation(关键网络、obsInfo、actInfo、,...“观察”,{“国家”},“行动”,{“行动”},批判者);

创建参与者表示。

%创建一个用作基础参与者近似器的网络actorNetwork=[imageInputLayer([obsInfo.Dimension(1)1],“归一化”,“没有”,“姓名”,“国家”)完全连接层(numel(actInfo),“姓名”,“行动”,“BiasLearnRateFactor”0,“偏见”, 0)];%为演员设置一些选项actorOpts=rlRepresentationOptions(“LearnRate”,1e-04,“梯度阈值”,1);基于网络近似器创建参与者actor=rlDeterministicActorRepresentation(actorNetwork、obsInfo、actInfo、,...“观察”,{“国家”},“行动”,{“行动”},actorOpts);

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

agentOpts = rlDDPGAgentOptions (...“SampleTime”,环境运输署,...“目标平滑因子”,1e-3,...“经验缓冲长度”,1e6,...“折扣演员”,0.99,...“MiniBatchSize”代理=rlDDPGAgent(演员、评论家、代理);

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

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

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

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

env=rlPredefinedEnv(“DoubleIntegrator-Continuous”);

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

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

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

statePath=sequenceInputLayer(obsInfo.Dimension(1),“归一化”,“没有”,“姓名”,“肌瘤”);actionPath=sequenceInputLayer(numel(actInfo),“归一化”,“没有”,“姓名”,“myact”); commonPath=[连接层(1,2,“姓名”,“海螺”)雷卢耶(“姓名”,“雷卢”)第1层(8,“OutputMode”,“顺序”,“姓名”,“lstm”) fullyConnectedLayer (1,“姓名”,“状态值”,“BiasLearnRateFactor”, 0,“偏见”,0)];临界网络=层图(状态路径);临界网络=添加层(临界网络,动作路径);临界网络=添加层(临界网络,公共路径);临界网络=连接层(临界网络,“肌瘤”,“concat/in1”);临界网络=连接层(临界网络,“myact”,“concat/in2”);

为评论家设置一些选项。

criticOpts=rlRepresentationOptions(“LearnRate”, 5 e - 3,“梯度阈值”,1);

基于网络近似器创建批评家。

critic=rlQValueRepresentation(关键网络、obsInfo、actInfo、,...“观察”,{“肌瘤”},“行动”,{“myact”},批判者);

创建参与者表示。

既然评论家有一个递归网络,那么参与者也必须有一个递归网络。为参与者定义一个递归神经网络。

actorNetwork=[sequenceInputLayer(obsInfo.Dimension(1),“归一化”,“没有”,“姓名”,“肌瘤”)第1层(8,“OutputMode”,“顺序”,“姓名”,“lstm”)完全连接层(numel(actInfo),“姓名”,“myact”,“BiasLearnRateFactor”, 0,“偏见”, 0)];

演员的选择。

actorOpts=rlRepresentationOptions(“LearnRate”,1e-04,“梯度阈值”,1);

创造演员。

actor=rlDeterministicActorRepresentation(actorNetwork、obsInfo、actInfo、,...“观察”,{“肌瘤”},“行动”,{“myact”},actorOpts);

指定代理选项,并使用环境、参与者和评论家创建DDPG代理。要将DDPG代理与递归神经网络一起使用,必须指定序列长度大于1。

agentOpts = rlDDPGAgentOptions (...“SampleTime”,环境运输署,...“目标平滑因子”,1e-3,...“经验缓冲长度”,1e6,...“折扣演员”,0.99,...“SequenceLength”,20,...“MiniBatchSize”代理=rlDDPGAgent(演员、评论家、代理);

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

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

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

在R2019a中引入