主要内容

rlppoagent.

近端政策优化强化学习代理

描述

近端策略优化(PPO)是一种无模型,在线,政策,政策梯度加固学习方法。该算法通过环境相互作用的采样数据交替使用随机梯度下降来优化剪裁代理物镜。动作空间可以是离散或连续的。

有关PPO代理商的更多信息,请参阅近端政策优化代理.有关不同类型的强化学习代理的更多信息,请参见加固学习代理人

创建

描述

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

例子

代理人= rlPPOAgent (观察税收ActionInfo.使用默认初始化选项创建具有给定观察和操作规范的环境的近端策略优化(PPO)代理。代理商中的演员和批评者表示从观察规范内建造的默认深神经网络观察税收和行动规范ActionInfo.

例子

代理人= rlPPOAgent (观察税收ActionInfo.初学者为具有给定观察和动作规范的环境创建PPO代理。属性中指定的选项配置的默认网络初学者目的。演员批评者不支持经常性的神经网络。金宝app有关初始化选项的详细信息,请参阅rlagentinitializationOptions.

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

代理人= rlPPOAgent (演员评论家使用代理的默认选项创建具有指定演员和批评者的PPO代理。

指定代理选项

例子

代理人= rlPPOAgent (___代理选项创建PPO代理并设置代理选项财产到代理选项输入参数。在上一个语法中的任何输入参数后使用此语法。

输入参数

全部展开

观察规范,指定为钢筋学习规范对象或规范对象数组,定义诸如尺寸,数据类型和观察信号的名称等属性。

你可以提取观察税收从现有的环境或代理商使用getobservationInfo..您还可以使用手动构造规范rlfinitesetspec.要么rlnumericspec.

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

对于离散的动作空间,您必须指定ActionInfo.作为一个rlfinitesetspec.目的。

对于连续的动作空间,您必须指定ActionInfo.作为一个rlnumericspec.目的。

你可以提取ActionInfo.从现有的环境或代理商使用getActionInfo.您还可以使用手动构造规范rlfinitesetspec.要么rlnumericspec.

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

策略的演员网络表示,指定为一个rlStochasticActorRepresentation目的。有关创建演员表示的更多信息,请参阅创建策略和值函数表示

您的演员表示可以使用经常性神经网络作为其功能近似器。在这种情况下,您的评论家还必须使用经常性的神经网络。例如,看到使用经常性神经网络创建PPO代理

批评网络表示,用于估算折扣长期奖励,指定为rlvalueerepresentation.有关创建批评识别的更多信息,请参阅创建策略和值函数表示

您的批评者表示可以使用经常性神经网络作为其功能近似器。在这种情况下,您的演员还必须使用经常性的神经网络。例如,看到使用经常性神经网络创建PPO代理

特性

全部展开

代理选项,指定为rlppoagentoptions.目的。

对象功能

火车 在指定环境中列车加固学习代理
SIM 在指定环境中模拟培训的钢筋学习代理
努力 从代理商或演员代表获取行动给定环境观察
工作者 从强化学习代理中获得角色表示
setActor. 设置钢筋学习代理的演员代表
getCritic 获取钢筋学习代理人的批评奖学金
setcritic. 设定批评批评学习代理的代表
生成policyfunction. 创建评估强化学习代理的训练策略的函数

例子

全部收缩

创建具有离散动作空间的环境,并获得其观察和操作规范。对于此示例,请加载示例中使用的环境使用深度网络设计器创建代理和使用图像观察训练.该环境有两个观察结果:50×50灰度图像和标量(摆动的角速度)。该动作是一个标量,具有五种可能的元素(或者)的扭矩 -2- -10.1, 要么2nm施加到摆动杆)。

加载预定义环境Env = Rlpredefinedenv(“Simple QualumWithimage-Collete”);%获得观察和行动规范obsInfo = getObservationInfo (env);Actinfo = GetActionInfo(Env);

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

% rng (0)

从环境观察和行动规范中创建一个演员批评者。

代理= rlppoagent(Obsinfo,Actinfo);

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

GetAction(代理,{rand(ObsInfo(1).dimiles),Rand(Obsinfo(2).dimension)})
ans =.1 x1单元阵列{[-2]}

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

创建具有连续动作空间的环境,并获得其观察和操作规范。对于此示例,请加载示例中使用的环境用图像观察训练DDPG Agent上摆和平衡摆.该环境有两个观察结果:50×50灰度图像和标量(摆动的角速度)。动作是表示扭矩连续的标量 -22纳米。

加载预定义环境Env = Rlpredefinedenv(“SimpleEdpulumWithimage-insult”);%获得观察和行动规范obsInfo = getObservationInfo (env);Actinfo = GetActionInfo(Env);

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

Initopts = rlagentinitializationOptions(“NumHiddenUnit”,128);

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

% rng (0)

从环境观测和行动规范中创建PPO演员批评者。

代理= rlPPOAgent (obsInfo actInfo initOpts);

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

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

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

ActORNET = GetModel(GetAttor(代理));批评= getModel(accritic(代理));

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

批评
ANS = 12x1层阵列具有层数:1'CONCAT'串联连接尺寸3 2'Relu_Body'Relu Relu 3'FC_Body'完全连接的128完全连接的第4层Body_Output'Relu Relu 5'Inform_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'输出完全连接的1完全连接的第12层表示录音带的回归输出均值平方误差

情节演员和批评网络

情节(ACTORNET)

图包含轴。轴包含Type Graphplot的对象。

情节(批评)

图包含轴。轴包含Type Graphplot的对象。

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

GetAction(代理,{rand(ObsInfo(1).dimiles),Rand(Obsinfo(2).dimension)})
ans =.1 x1单元阵列{[0.9228]}

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

创建一个环境界面,并获取其观察和操作规范。

Env = Rlpredefinedenv(“CartPole-Discrete”);obsInfo = getObservationInfo (env);Actinfo = GetActionInfo(Env);

创造批评者代表。

%创建网络以在评论家中用作近似器。批评= [featureInputLayer(4,“归一化”'没有任何''名称''状态')全康连接层(1,'名称''批评')];%设置评论家的选项。批评= rlrepresentationOptions('学习',8e-3,'gradientthreshold'1);%创造批评家。评论家= rlvalueerepresentation(批判性,Obsinfo,'观察',{'状态'},批评);

创建一个演员表示。

%创建网络以在演员中用作近似器。ActorNetWork = [FeatureInputLayer(4,“归一化”'没有任何''名称''状态')全连接列(2,'名称''行动')];%设置演员的选项。Actoropts = RlR​​epresentationOptions('学习',8e-3,'gradientthreshold'1);%创建演员。Actor = rlstochastOrtorrepresentation(Actornetwork,Obsinfo,Actinfo,......'观察',{'状态'},actoropts);

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

代理= rlppoagentoptions(......“ExperienceHorizon”, 1024,......'贴花因子', 0.95);代理= rlPPOAgent(演员、评论家、agentOpts)
agent = rlPPOAgent with properties: AgentOptions: [1x1 rl.option.rlPPOAgentOptions]

要检查您的代理,请使用GetAction从随机观察返回操作。

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

您现在可以测试并培训代理人反对环境。

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

Env = Rlpredefinedenv(“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env)
ObsInfo = rlnumericspec具有属性:lowermit:-inf上唇:inf名称:“状态”描述:“x,dx”尺寸:[2 1]数据类型:“double”
Actinfo = GetActionInfo(Env)
属性:LowerLimit: -Inf UpperLimit: Inf Name: "force" Description: [0x0 string] Dimension: [1 1] DataType: "double"

由于该动作必须包含在有限范围内,因此相应地设置动作信号的上限和下限是一个好主意。当Actor的网络表示具有非线性输出层时必须执行,而不是相应地缩放的非线性输出层,以在所需范围内产生输出。

%确保动作空间上限和下限是有限的actInfo.LowerLimit = 2;actInfo.UpperLimit = 2;

创造批评者代表。PPO代理使用rlvalueerepresentation评论家。对于连续观测空间,可以使用深度神经网络或自定义基表示。对于本例,创建一个深度神经网络作为底层近似器。

%创建网络以在评论家中用作近似器%它必须将观察信号作为输入并产生标量值批评= [ImageInputLayer([ObsInfo.dimension 1],“归一化”'没有任何''名称''状态')全连接层(10,'名称''fc_in')剥离('名称''relu')全康连接层(1,'名称''出去')];%为评论家设置一些培训选项批评= rlrepresentationOptions('学习',8e-3,'gradientthreshold'1);%从网络创建批评者表示评论家= rlvaluerepresentation(批评,obsinfo,'观察',{'状态'},批评);

PPO代理使用rlStochasticActorRepresentation.对于连续动作空间,随机演员只能使用神经网络近似器。

观察输入(这里称为蒙布斯)必须接受二维向量,如上所述obsinfo..输出(此处调用界面)也必须是二维向量(两倍于指定的尺寸数Actinfo.)。输出矢量的元素依次表示每个动作的所有手段和所有标准偏差(在这种情况下,只有一个平均值和一个标准偏差)。

标准偏差必须是非负的事实,而平均值必须落在输出范围内,这意味着网络必须具有两个单独的路径。第一路径是用于平均值,并且必须缩放任何输出非线性,以便它可以在输出范围内产生输出。第二条路径用于标准偏差,您必须使用SoftPlus或Relu层来强制执行非负性。

%输入路径层(2乘1输入和1乘1输出)InPath = [ImageInputLayer([ObsInfo.dimension 1],“归一化”'没有任何''名称''状态')全连接层(10,'名称''ip_fc'% 10 × 1输出Rululayer('名称'“ip_relu”%非线性全康统计(1,'名称''ip_out')];%1乘1输出平均值的%路径层(1乘1输入,1乘1输出)%使用ScalingLayer缩放范围meanPath = [fulllyconnectedlayer (15,'名称'“mp_fc1”%15到1个输出Rululayer('名称''mp_relu'%非线性全康统计(1,'名称'“mp_fc2”);%1乘1输出Tanhlayer('名称''tanh');%输出范围:(-1,1)ScalingLayer('名称''mp_out''规模',Actinfo.upperlimit)];%输出范围:(-2N,2N)标准偏差%路径层(1乘1输入和输出)%使用softplus图层使其非负sdevpath = [全连接列(15,'名称''vp_fc1'%15到1个输出Rululayer('名称''vp_relu'%非线性全康统计(1,'名称''vp_fc2');%1乘1输出softpluslayer('名称'“vp_out”)];%输出范围:(0,+ INF)将两个输入(沿维度#3)连接起来,形成单个(2 × 1)输出层outlayer = concatenationlayer(3,2,'名称'“mean&sdev”);%添加图层到层图网络对象ACTORNET = DILLERGRAGH(INPATH);ActorNet = Addlayers(ActorRornet,意思);ACTORNET = AddLayers(ACTORNET,SDEVPATH);ActorNet = Addlayers(Actornet,Outayer);%Connect图层:平均值路径输出必须连接到替代层的第一个输入ActorNet = ConnectLayers(ActorRornet,'ip_out''mp_fc1 /');%连接inPath的输出到meanPath的输入ActorNet = ConnectLayers(ActorRornet,'ip_out'“vp_fc1 /”);%连接到SDEVPATH输入的Inclate输出ActorNet = ConnectLayers(ActorRornet,'mp_out'“mean&sdev /三机一体”);意味着意思和sdev输入#1%connect输出ActorNet = ConnectLayers(ActorRornet,“vp_out”“mean&sdev / in2”);%连接sdevPath的输出到mean&sdev input #2%绘图网络情节(ACTORNET)

图包含轴。轴包含Type Graphplot的对象。

为演员指定一些选项,并使用深神经网络创建随机演员表示actorNet

%为演员设置一些培训选项Actoropts = RlR​​epresentationOptions('学习',8e-3,'gradientthreshold'1);%使用网络创建演员Actor = rlstochasticRepresentation(Actornet,Obsinfo,Actinfo,......'观察',{'状态'},actoropts);

指定代理选项,并使用Actor,批评者和代理选项创建PPO代理。

代理= rlppoagentoptions(......“ExperienceHorizon”, 1024,......'贴花因子', 0.95);代理= rlPPOAgent(演员、评论家、agentOpts)
agent = rlPPOAgent with properties: AgentOptions: [1x1 rl.option.rlPPOAgentOptions]

要检查您的代理,请使用GetAction从随机观察返回操作。

GetAction(代理,{rand(2,1)})
ans =.1 x1单元阵列{[0.6668]}

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

对于此示例,加载用于该示例的预定义环境培训DQN Agent来平衡车杆系统的例子。

Env = Rlpredefinedenv('cartpole  - 离散');

获取观察和行动信息。该环境具有连续的四维观察空间(推车和杆的位置和速度)以及由两个可能的力,-10n或10n的应用组成的离散一维动作空间。

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

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

[sequenceInputLayer(obsInfo.Dimension(1)),“归一化”'没有任何''名称''myobs') fullyConnectedLayer (8,'名称''fc')剥离('名称''relu')LSTMLAYER(8,'OutputMode''顺序''名称''lstm')全康连接层(1,'名称''输出')];

为批评家创建一个值函数表示对象。

QuandOptions = rlrepresentationOptions('学习',1e-2,'gradientthreshold'1);评论家= rlvalueerepresentation(批判性,Obsinfo,......'观察''myobs',批评);

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

ACTORNETWORK = [sequenceInputlayer(ObsInfo.dimension(1),“归一化”'没有任何''名称''myobs') fullyConnectedLayer (8,'名称''fc')剥离('名称''relu')LSTMLAYER(8,'OutputMode''顺序''名称''lstm')全连接列(Numel(Actinfo.Elements),'名称''输出')softmaxlayer('名称''actionprob')];

为网络创建一个随机演员表示。

ACTOROPTIONS = RLREPRESENTATIONOPTIONS('学习',1e-3,'gradientthreshold'1);Actor = rlstochastOrtorrepresentation(Actornetwork,Obsinfo,Actinfo,......'观察''myobs',ActorOptions);

创建代理选项对象。

代理选项= rlppoagentoptions(......“AdvantageEstimateMethod”'有限地平线'......“ClipFactor”,0.1);

当使用经常性神经网络时,小匹匹匹匹配属性是学习轨迹的长度。

AgentOptions.minibatchsize.
ans = 128

使用Actor和批评者表示,创建代理,以及代理选项对象。

代理= rlppoagent(演员,批评者,代理选项);

使用GetAction检查您的代理以从随机观察返回操作。

GetAction(代理,Rand(ObsInfo.dimension))
ans =.1 x1单元阵列{[10]}

提示

  • 对于连续动作空间,此代理不会强制执行操作规范设置的约束。在这种情况下,您必须在环境中强制执行操作空间约束。

在R2019B中介绍