主要内容

rlPPOAgent

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

描述

近端策略优化(PPO)是一种无模型、在线、基于策略、策略梯度强化学习方法。该算法交替使用环境交互采样数据和使用随机梯度下降优化裁剪代理目标函数。行动空间可以是离散的,也可以是连续的。

有关PPO代理的更多信息,请参见策略优化代理。有关不同类型强化学习代理的更多信息,请参阅强化学习代理

创造

描述

根据观察和操作规范创建代理

例子

代理人=rlPPOAgent(观测信息行动信息使用默认初始化选项,为具有给定观察和操作规范的环境创建近端策略优化(PPO)代理。代理中的行动者和批评者表示使用从观察规范构建的默认深度神经网络观测信息以及动作规范行动信息

例子

代理人=rlPPOAgent(观测信息行动信息初始选项为具有给定观察和操作规范的环境创建PPO代理。该代理使用使用中指定的选项配置的默认网络初始选项对象。行动者-评论家代理不支持递归神经网络。万博1manbetx有关初始化选项的更多信息,请参见rlAgentInitializationOptions

从演员和评论家代表创建代理

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

指定代理选项

例子

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

输入参数

全部展开

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

您可以提取观测信息从现有环境或代理使用getObservationInfo.您还可以使用以下方法手工构造规范rlFiniteSetSpecrlNumericSpec

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

对于离散操作空间,必须指定行动信息作为rlFiniteSetSpec对象。

对于连续动作空间,必须指定行动信息作为rlNumericSpec对象。

您可以提取行动信息从现有环境或代理使用getActionInfo.您还可以使用rlFiniteSetSpecrlNumericSpec

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

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

您的演员表示可以使用递归神经网络作为其函数近似器。在这种情况下,你的批评者也必须使用递归神经网络。例如,请参见利用递归神经网络创建PPO Agent

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

批评家表示可以使用递归神经网络作为其函数逼近器。在这种情况下,参与者还必须使用递归神经网络。例如,请参阅利用递归神经网络创建PPO Agent

性质

全部展开

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

对象的功能

火车 在指定的环境中训练强化学习代理
sim卡 在指定的环境中模拟训练过的强化学习代理
getAction 根据环境观察,从行为者或行动者的表现中获得行动
getActor 从强化学习代理获取参与者表示
setActor 设置强化学习主体的主体表示
Get批评家 从强化学习代理获得批判表示
setCritic 集合强化学习代理的批判表示
generatePolicyFunction 创建评估强化学习代理的培训策略的函数

例子

全部折叠

创建具有离散动作空间的环境,并获取其观察和动作规范。对于本例,加载示例中使用的环境使用Deep Network Designer创建代理并使用图像观察进行培训.这个环境有两个观测值:一个50乘50的灰度图像和一个标量(钟摆的角速度)。这个动作是一个标量,有五个可能的元素(一个扭矩是-2, -1012Nm适用于摆动杆)。

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

代理创建函数随机初始化演员和评论家网络。您可以通过固定随机生成器的种子来确保再现性。为此,请取消对以下行的注释。

%rng(0)

根据环境观察和行动规范创建一个演员-评论家代理。

代理= rlPPOAgent (obsInfo actInfo);

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

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

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

创造一个具有连续动作空间的环境,并获得其观察和动作规范。对于本示例,请加载示例中使用的环境通过图像观察训练DDPG药剂摆动和平衡摆锤.这个环境有两个观测值:一个50乘50的灰度图像和一个标量(钟摆的角速度)。这个作用是一个标量,表示从-连续范围的扭矩22纳米。

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

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

initOpts=rlagentinizationoptions(“NumHiddenUnit”, 128);

代理创建函数随机初始化演员和评论家网络。您可以通过固定随机生成器的种子来确保再现性。为此,请取消对以下行的注释。

%rng(0)

从环境观察和行动规范中创建一个PPO角色-评论家代理。

agent=rlPPOAgent(obsInfo、actInfo、initOpts);

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

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

从agent参与者和批评家中提取深层神经网络。

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

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

criticNet。层
ans=12x1带层的层阵列:1“concat”沿维度2个输入的串联3“relu_body”relu relu 3“fc_body”完全连接128个完全连接的层4“body_输出”relu relu 5“input_1”图像输入50x50x1图像6“conv_1”卷积64 3x1x1带跨步[1]和填充的卷积[0 0 0 0 0]7“relu_输入_1”relu relu 8“fc_1”完全连接128完全连接层9“input_2”图像输入1x1x1图像10“fc_2”完全连接128完全连接层11“output”完全连接1完全连接层12“RepresentationLoss”回归输出均方误差

情节演员和评论家网络

情节(actorNet)

情节(criticNet)

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

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

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

创建环境接口,并获取其观察和操作规范。

env = rlPredefinedEnv (“CartPole离散型”); obsInfo=获取观测信息(env);actInfo=getActionInfo(env);

创建一个评论家表示。

%创建网络以用作批评家中的近似器。批评家= [featureInputLayer(4,“正常化”“没有”“名字”“状态”)完全连接层(1,“名字”“CriticFC”));%设置批评家的选项。criticOpts = rlRepresentationOptions (“LearnRate”,8e-3,“GradientThreshold”1);%创造批评家。评论家= rlValueRepresentation (criticNetwork obsInfo,“观察”,{“状态”}, criticOpts);

创建参与者表示。

%在参与者中创建网络作为近似器使用。[featureInputLayer(4,“正常化”“没有”“名字”“状态”)完全连接层(2,“名字”“行动”));%设置角色的选项。actorOpts = rlRepresentationOptions (“LearnRate”,8e-3,“GradientThreshold”1);%创建actor。演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,...“观察”,{“状态”}, actorOpts);

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

agentOpts=rlPPOAgentOptions(...“体验地平线”,1024,...“DiscountFactor”,0.95);代理=rlPPOAgent(演员、评论家、代理)
agent=rlPPOAgent,属性为:AgentOptions:[1x1 rl.option.rlPPOAgentOptions]

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

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

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

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

env = rlPredefinedEnv (“双积分连续”);obsInfo=getObservationInfo(env)
obsInfo=rlNumericSpec,属性:LowerLimit:-Inf上限:Inf名称:“状态”说明:“x,dx”维度:[2 1]数据类型:“双”
actInfo = getActionInfo (env)
actInfo=rlNumericSpec,属性:LowerLimit:-Inf上限:Inf名称:“强制”说明:[0x0字符串]维度:[1]数据类型:“双”

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

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

创建一个评论家表示。多酚氧化酶制剂使用rlValueRepresentation对于批评家。对于连续观测空间,可以使用深度神经网络或自定义基表示。对于本例,创建深度神经网络作为基础近似器。

%在批评家中创建网络作为近似器使用它必须以观测信号为输入,并产生一个标量值[errorcode] [errorcode]错误码尺寸1],“正常化”“没有”“名字”“状态”) fullyConnectedLayer (10“名字”"fc_in") reluLayer (“名字”“relu”)完全连接层(1,“名字”“出”));为评论家设置一些训练选项criticOpts = rlRepresentationOptions (“LearnRate”,8e-3,“GradientThreshold”1);%从网络中创建批评家表示评论家=rlValueRepresentation(评论家网、obsInfo、,“观察”,{“状态”}, criticOpts);

多酚氧化酶制剂使用随机表示. 对于连续动作空间,随机参与者只能使用神经网络逼近器。

观察输入(这里称为myobs)必须接受二维向量,如obsInfo.输出(这里称为myact)也必须是一个二维向量(是肌动蛋白).输出向量的元素依次表示每个动作的所有平均值和所有标准偏差(在本例中只有一个平均值和一个标准偏差)。

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

%输入路径层(2×1输入和1×1输出)inPath = [imageInputLayer([obsInfo. inPath])]尺寸1],“正常化”“没有”“名字”“状态”) fullyConnectedLayer (10“名字”“ip_fc”%10乘1输出reluLayer (“名字”“伊普雷鲁”%非线性fullyConnectedLayer (1,“名字”“ip_out”) ];% 1乘1输出%路径层的平均值(1乘1输入和1乘1输出)%使用scalingLayer缩放范围meanPath=[fullyConnectedLayer(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输入和输出)%使用softplus图层使其非负sdevPath=[fullyConnectedLayer(15,“名字”“vp_fc1”% 15 × 1输出reluLayer (“名字”“vp_relu”%非线性fullyConnectedLayer (1,“名字”“vp_fc2”);% 1乘1输出softplusLayer (“名字”“vp_out”) ];%输出范围:(0,+Inf)%将两个输入(沿尺寸#3)合并形成一个(2×1)输出层支出= concatenationLayer (3 2“名字”“平均值和sdev”);添加层到layerGraph网络对象actorNet=layerGraph(inPath);actorNet=addLayers(actorNet,meanPath);actorNet=addLayers(actorNet,sdevPath);actorNet=addLayers(actorNet,outLayer);%连接层:平均值路径输出必须连接到连接层的第一个输入actorNet = connectLayers (actorNet,“ip_out”“mp_fc1/in”);%将inPath的输出连接到meanPath输入actorNet = connectLayers (actorNet,“ip_out”“vp_fc1/in”);%连接inPath输出到sdevPath输入actorNet = connectLayers (actorNet,“mp_out”“平均值和sdev/in1”);将meanPath的输出连接到mean&sdev输入#1actorNet = connectLayers (actorNet,“vp_out”“平均值和sdev/in2”);%将sdevPath的输出连接到均值和sdev输入#2%绘图网络情节(actorNet)

为参与者指定一些选项,并使用深度神经网络创建随机参与者表示actorNet

为演员设置一些训练选项actorOpts = rlRepresentationOptions (“LearnRate”,8e-3,“GradientThreshold”1);%使用网络创建参与者actor=rl随机因素表示(actorNet、obsInfo、actInfo、,...“观察”,{“状态”}, actorOpts);

指定代理选项,并使用actor、critic和agent选项创建PPO代理。

agentOpts=rlPPOAgentOptions(...“体验地平线”,1024,...“DiscountFactor”,0.95);代理=rlPPOAgent(演员、评论家、代理)
agent=rlPPOAgent,属性为:AgentOptions:[1x1 rl.option.rlPPOAgentOptions]

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

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

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

创造环境,获取观察和行动信息。

env = rlPredefinedEnv (“CartPole-Discrete”); obsInfo=获取观测信息(env);actInfo=getActionInfo(env);numObs = obsInfo.Dimension (1);numDiscreteAct =元素个数(actInfo.Elements);

为批评家创建递归深层神经网络。要创建递归神经网络,请使用序列输入层作为输入层,并包括第一层作为其他网络层之一。

临界网络=[sequenceInputLayer(numObs,“正常化”“没有”“名字”“状态”)完全连接层(8,“名字”“俱乐部”) reluLayer (“名字”“relu”) lstmLayer (8,“输出模式”“序列”“名字”“lstm”)完全连接层(1,“名字”“输出”));

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

criticOptions = rlRepresentationOptions (“LearnRate”,1e-2,“GradientThreshold”1);评论家= rlValueRepresentation (criticNetwork obsInfo,...“观察”“状态”, criticOptions);

类似地,为参与者定义一个递归神经网络。

actorNetwork=[sequenceInputLayer(numObs,“正常化”“没有”“名字”“状态”)完全连接层(8,“名字”“俱乐部”) reluLayer (“名字”“relu”) lstmLayer (8,“输出模式”“序列”“名字”“lstm”) fullyConnectedLayer (numDiscreteAct“名字”“输出”) softmaxLayer (“名字”“actionProb”));

为网络创建一个随机参与者表示。

actorOptions = rlRepresentationOptions (“LearnRate”,1e-3,“GradientThreshold”,1);actor=rl随机性actor表示(actorNetwork、obsInfo、actInfo、,...“观察”“状态”, actorOptions);

使用actor和评论家表示创建PPO代理。

agentOptions = rlPPOAgentOptions (...“优势估计法”“finite-horizon”...“ClipFactor”, 0.1);代理= rlPPOAgent(演员、评论家、agentOptions);

提示

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

介绍了R2019b