主要内容

rlTRPOAgent

信托区域政策优化强化学习代理

描述

信托区域政策优化(TRPO)是一个免费的模型,在网上,在政策,政策梯度强化学习方法。相比于通过保持信任区域接近目前的政策范围内更新的政策标准的政策梯度法这种算法防止显著性能下降。动作空间可以是离散的或连续的。

有关TRPO代理的更多信息,请参见信任区域策略优化代理.有关不同类型的强化学习代理的更多信息,请参见强化学习代理

创建

描述

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

例子

代理= rlTRPOAgent(observationInfoactionInfo创建一个用于给定的观察和操作规范的环境中的信任区域策略优化(TRPO)剂,使用缺省初始化选项。在代理使用默认的演员和评论家表示深层神经网络从观测规范构建observationInfo和动作规范actionInfo

例子

代理= rlTRPOAgent(observationInfoactionInfoinitOpts根据给定的观察和操作规范为环境创建TRPO代理。属性中指定的选项配置的默认网络initOpts对象。TRPO代理不支持递归神经网络。金宝app有关初始化选项的详细信息,请参阅rlAgentInitializationOptions

从演员和评论家陈述创建代理

例子

代理= rlTRPOAgent(演员评论家使用代理的默认选项,使用指定的参与者和评论家创建TRPO代理。

指定代理选项

例子

代理= rlTRPOAgent(___agentOptions创建TRPO代理并设置AgentOptions财产agentOptions输入参数。之后的任何的在前面的语法输入参数使用此语法。

输入参数

全部展开

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

您可以提取observationInfo从现有环境或代理使用getObservationInfo.您也可以手动构建规范使用rlFiniteSetSpec或者rlNumericSpec

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

对于离散操作空间,必须指定actionInfo作为一个rlFiniteSetSpec对象。

对于连续操作空间,必须指定actionInfo作为一个rlNumericSpec对象。

您可以提取actionInfo从现有环境或代理使用getActionInfo.您还可以使用rlFiniteSetSpec或者rlNumericSpec

的代理初始化选项rlAgentInitializationOptions对象。

TRPO代理不支持递归神经网络。金宝app因此initOpts。UseRNN必须是

策略的参与者网络表示,指定为rlStochasticActorRepresentation对象。有关创建演员表示的更多信息,请参阅创建策略和价值功能表示

对于TRPO代理演员表示只有使用UseDevice选择在一个rlRepresentationOptions对象。因此,如果您使用CPU进行深度神经网络计算,则可以使用默认表示选项。

用于估计的折扣长期奖励评论家网络表示,指定为rlValueRepresentation.有关创建评论家表示的更多信息,请参见创建策略和价值功能表示

属性

全部展开

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

对象的功能

火车 在指定的环境中训练强化学习代理
sim卡 模拟训练的强化学习规定的环境内代理
的getAction 根据环境观察,从行为者或行动者的表现中获得行动
getActor 从强化学习代理中获得角色表示
setActor 强化学习代理的集演员表现
getCritic 从强化学习代理人获取评论家表示
setCritic 强化学习剂套装评论家表示
generatePolicyFunction 创建评估强化学习代理的训练策略的函数

例子

全部折叠

创造一个具有离散动作空间的环境,并获得其观察和动作规范。对于这个例子,在加载示例中使用的环境使用深度网络设计器创建代理和使用图像观察训练.这个环境有两个观测值:一个50乘50的灰度图像和一个标量(钟摆的角速度)。这个动作是一个标量,有五个可能的元素(一个扭矩是-2, -101,或2Nm适用于摆动杆)。

加载预定义环境env = rlPredefinedEnv (“SimplePendulumWithImage离散”);

获取此环境的观察和操作规范。

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

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

% rng (0)

根据环境观察和行动规范创建TRPO代理。

代理= rlTRPOAgent (obsInfo actInfo);

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

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

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

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

env = rlPredefinedEnv (“SimplePendulumWithImage-Continuous”);

获取该环境的观察和操作规范。

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

创建一个代理初始化选项对象,指定网络中每个隐藏的完全连接层必须具有128神经元。

initOpts = rlAgentInitializationOptions (“NumHiddenUnit”, 128);

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

% rng (0)

创建使用指定的初始化选项环境观测和行动规范的TRPO剂。

代理= rlTRPOAgent (obsInfo actInfo initOpts);

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

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

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

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

您可以验证网络有128台,他们隐藏的完全连接层。例如,显示评论家网络的层。

criticNet。层
ans = 11x1图层数组:1“input_1”图像输入50 x50x1图片2 conv_1卷积64 3 x3x1旋转步[1]和填充[0 0 0 0]3‘relu_input_1 ReLU ReLU 4 fc_1完全连接128完全连接层5“input_2”功能输入1功能6 fc_2完全连接128完全连接层7的concat串联连接2输入dimension 1 8 'relu_body' ReLU ReLU 9 'fc_body' Fully Connected 128 Fully Connected layer 10 'body_output' ReLU ReLU 11 'output' Fully Connected 1 Fully Connected layer

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

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

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

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

env = rlPredefinedEnv (“CartPole-Discrete”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

创建一个评论家表示。

%在批评家中创建网络作为近似器使用。批评家= [featureInputLayer(4,“归一化”“没有”“名字”'状态') fullyConnectedLayer (1,“名字”“CriticFC”)];%设置批评家的选项。criticOpts = rlRepresentationOptions(“LearnRate”,8E-3,“GradientThreshold”,1);创造批评家。评论家= rlValueRepresentation (criticNetwork obsInfo,“观察”{'状态'},criticOpts);

创建一个参与者表示。

%在参与者中创建网络作为近似器使用。actorNetwork = [featureInputLayer(4,“归一化”“没有”“名字”'状态') fullyConnectedLayer (2“名字”“行动”)];%创建actor。演员= rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,...“观察”{'状态'});

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

agentOpts = rlTRPOAgentOptions (...“ExperienceHorizon”, 1024,...'DiscountFactor', 0.95);代理= rlTRPOAgent(演员、评论家、agentOpts)
agent = rlTRPOAgent with properties: AgentOptions: [1x1 rl.option.rlTRPOAgentOptions]

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

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

现在,您可以测试和训练剂危害环境。

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

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env)
obsInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf Name: "states" Description: "x, dx" Dimension: [2 1] DataType: "double"
actInfo = getActionInfo (env)
属性:LowerLimit: -Inf UpperLimit: Inf Name: "force" Description: [0x0 string] Dimension: [1 1] DataType: "double"

由于动作必须包含在一个有限的范围内,因此相应地设置动作信号的上下限。当参与者的网络表示具有非线性输出层时,您必须这样做,该非线性输出层必须进行缩放以产生所需范围内的输出。

actInfo.LowerLimit = 2;actInfo.UpperLimit = 2;

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

%在批评家中创建网络作为近似器使用它必须以观测信号为输入,并产生一个标量值criticNet = [imageInputLayer([obsInfo.Dimension 1],“归一化”“没有”“名字”'状态')fullyConnectedLayer(10,“名字”“fc_in”) reluLayer (“名字”'RELU') fullyConnectedLayer (1,“名字”“出”)];%设置一些培训选择的评论家criticOpts = rlRepresentationOptions(“LearnRate”,8E-3,“GradientThreshold”,1);%创建来自网络的评论家表示评论家= rlValueRepresentation (criticNet obsInfo,“观察”{'状态'},criticOpts);

TRPO剂使用rlStochasticActorRepresentation.对于连续动作空间,随机参与者只能使用神经网络近似器。

观察输入(这里称为myobs)必须接受的二维向量,如在指定obsInfo.输出(这里称为myact)也必须是一个二维向量(是actInfo)。输出矢量的元素表示,在序列中,所有的装置和所有的每一个动作的标准偏差(在这种情况下,只有一个平均值和一个标准偏差)。

事实上,标准差必须是非负的,而平均值必须落在输出范围内,这意味着网络必须有两个独立的路径。第一个路径是针对平均值的,任何输出非线性必须进行缩放,以便它能在输出范围内产生输出。第二种方法是标准偏差,您必须使用softplus或relu层来强制非负性。

%输入路径层(2乘1输入和1乘1输出)INPATH = [imageInputLayer([obsInfo.Dimension 1],“归一化”“没有”“名字”'状态')fullyConnectedLayer(10,“名字”“ip_fc”% 10 × 1输出reluLayer (“名字”“ip_relu”%非线性fullyConnectedLayer(1,“名字”“ip_out”));% 1乘1输出%路径层的平均值(1乘1输入和1乘1输出)%使用scalingLayer缩放范围meanPath = [fulllyconnectedlayer (15,“名字”“mp_fc1”% 15 × 1输出reluLayer (“名字”“mp_relu”%非线性fullyConnectedLayer(1,“名字”“mp_fc2”);% 1乘1输出tanhLayer(“名字”的双曲正切);%输出范围:(-1,1)scalingLayer(“名字”“mp_out”'规模'actInfo.UpperLimit)];%输出范围:(-2N,2N)%路层为标准偏差(1 1级的输入和输出)%使用软加层使其非负sdevPath = [fulllyconnectedlayer (15,“名字”'vp_fc1'% 15 × 1输出reluLayer (“名字”'vp_relu'%非线性fullyConnectedLayer(1,“名字”'vp_fc2');% 1乘1输出softplusLayer(“名字”“vp_out”));%输出范围:(0,+ Inf文件)将两个输入(沿维度#3)连接起来,形成单个(2 × 1)输出层支出= concatenationLayer(1、2、“名字”“mean&sdev”);添加层到layerGraph网络对象actorNet = layerGraph (inPath);actorNet = addLayers (actorNet meanPath);actorNet = addLayers (actorNet sdevPath);actorNet = addLayers (actorNet,支出);%连接层:必须CONECT平均值路径级联层的第一输入actorNet = connectLayers (actorNet,“ip_out”“mp_fc1 /”);%连接inPath的输出到meanPath的输入actorNet = connectLayers (actorNet,“ip_out”“vp_fc1 /”);%INPATH的连接输出到sdevPath输入actorNet = connectLayers (actorNet,“mp_out”“mean&sdev /三机一体”);将meanPath的输出连接到mean&sdev输入#1actorNet = connectLayers (actorNet,“vp_out”“mean&sdev / in2”);%连接sdevPath的输出到mean&sdev input #2%的阴谋网络图(actorNet)

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

利用深度神经网络建立随机角色表示actorNet

演员= rlStochasticActorRepresentation (actorNet obsInfo actInfo,...“观察”{'状态'});

指定代理选项,并使用actor、评论家和代理选项创建TRPO代理。

agentOpts = rlTRPOAgentOptions (...“ExperienceHorizon”, 1024,...'DiscountFactor', 0.95);代理= rlTRPOAgent(演员、评论家、agentOpts)
agent = rlTRPOAgent with properties: AgentOptions: [1x1 rl.option.rlTRPOAgentOptions]

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

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

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

提示

  • 对于连续操作的空间,该试剂不强制由动作规范设置的约束。在这种情况下,你必须执行环境内采取行动的空间限制。

  • 虽然调整的演员网络的学习速度是必要的PPO剂,它是没有必要的TRPO剂。

  • 对于高维观察,如图像,建议使用PPO、SAC或TD3试剂。

介绍了R2021b