主要内容

rlPPOAgent

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

描述

近端政策优化(PPO)是一个模范自由,在网上,在政策、策略梯度强化学习方法。该算法交替采样数据通过环境之间交互和优化剪使用随机梯度下降法替代目标函数。可以是离散或连续的行动空间。

PPO代理的更多信息,请参阅近端政策优化代理。更多信息在不同类型的强化学习代理,看看强化学习代理

创建

描述

从观察和行动规范创建代理

例子

代理= rlPPOAgent (observationInfo,actionInfo)创建一个近端政策优化(PPO)代理一个环境与给定的观察和操作规范,使用默认初始化选择。代理的演员和评论家表示使用默认深层神经网络由观测规范observationInfo和操作规范actionInfo

例子

代理= rlPPOAgent (observationInfo,actionInfo,initOpts)创建一个PPO代理一个环境与给定的观察和操作规范。代理使用默认使用选项中指定的网络配置initOpts对象。Actor-critic代理不支持递归神经网络。初始化选项的更多信息,请参阅rlAgentInitializationOptions

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

代理= rlPPOAgent (演员,评论家)创建一个PPO代理指定的演员和评论家,对代理使用默认选项。

指定代理选项

例子

代理= rlPPOAgent (___,agentOptions)创建一个PPO代理并设置AgentOptions财产agentOptions输入参数。使用这个语法的任何输入参数后以前的语法。

输入参数

全部展开

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

您可以提取observationInfo从现有的环境或代理使用getObservationInfo。您还可以手动构建规范使用rlFiniteSetSpecrlNumericSpec

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

一个离散的行动空间,您必须指定actionInfo作为一个rlFiniteSetSpec对象。

一个持续的行动空间,您必须指定actionInfo作为一个rlNumericSpec对象。

您可以提取actionInfo从现有的环境或代理使用getActionInfo。您还可以手动构建规范使用rlFiniteSetSpecrlNumericSpec

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

演员网络政策表示,作为一个指定rlStochasticActorRepresentation对象。创建演员表示更多的信息,请参阅创建政策和价值函数表示

你的演员表示可以使用递归神经网络函数的估计值。在这种情况下,你的评论家也必须使用递归神经网络。例如,看到的创建PPO与复发性神经网络代理

评论家网络表示估计折现长期回报,作为一个指定rlValueRepresentation。创建评论家表示更多的信息,请参阅创建政策和价值函数表示

您的评论家表示可以使用递归神经网络函数的估计值。在这种情况下,你的演员也必须使用递归神经网络。例如,看到的创建PPO与复发性神经网络代理

属性

全部展开

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

对象的功能

火车 强化学习培训代理在指定的环境中
sim卡 模拟训练强化学习代理在指定的环境中
getAction 从代理或演员获得行动表示给定环境的观察
getActor 从强化学习得到演员表示代理
setActor 强化学习代理组演员表示
getCritic 从强化学习代理获得评论家表示
setCritic 将强化学习的评论家表示代理
generatePolicyFunction 创建函数评估训练策略的强化学习代理

例子

全部折叠

创造一个环境,一个离散的行动空间,并获得其观察和操作规范。对于这个示例,负载在示例中使用的环境使用深度网络设计师创建代理和培训使用图像的观察。这个环境有两个观察:50-by-50灰度图像和一个标量(摆的角速度)。行动是一个标量和五个可能的元素(一个力矩的-2,1,0,1,或2纳米应用于摆动杆)。

%负载预定义的环境env = rlPredefinedEnv (“SimplePendulumWithImage-Discrete”);%获得观察和操作规范obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

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

% rng (0)

创建一个actor-critic代理从环境中观察和操作规范。

代理= rlPPOAgent (obsInfo actInfo);

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

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

您现在可以测试和培训环境内的代理。

创造一个环境,一个连续的操作空间和获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG代理摇摆起来,平衡摆与图像观察。这个环境有两个观察:50-by-50灰度图像和一个标量(摆的角速度)。行动是一个标量代表一个力矩范围从-不断22Nm。

%负载预定义的环境env = rlPredefinedEnv (“SimplePendulumWithImage-Continuous”);%获得观察和操作规范obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

创建一个代理对象初始化选项,指定每个隐藏在网络必须完全连接层128年神经元(而不是默认的号码,256年)。

initOpts = rlAgentInitializationOptions (“NumHiddenUnit”,128);

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

% rng (0)

创建一个PPO actor-critic代理从环境中观察和操作规范。

代理= rlPPOAgent (obsInfo actInfo initOpts);

减少1 e - 3评论家学习速率。

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

提取深层神经网络代理的演员和评论家。

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

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

criticNet.Layers
ans x1 = 12层与层:数组1的concat串联连接2输入沿着维度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完全连接128完全连接层9 input_2的图像输入和图像10“fc_2”完全连接128完全连接层11“输出”完全连接1完全连接层12 RepresentationLoss回归输出均方误差

情节演员和评论家网络

情节(actorNet)

情节(criticNet)

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

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

您现在可以测试和培训环境内的代理。

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

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

创建一个评论家表示。

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

创建一个演员表示。

%创建网络作为近似者的演员。actorNetwork = [featureInputLayer (4“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (2“名字”,“行动”));%设置选项的演员。actorOpts = rlRepresentationOptions (“LearnRate”,8 e - 3,“GradientThreshold”1);%创建的演员。演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,“观察”,{“状态”},actorOpts);

指定代理选项,创建PPO代理使用环境,演员和评论家。

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

检查你的代理,用getAction返回从一个随机观察行动。

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

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

创造一个环境,一个持续的行动空间,获得其观察和操作规范。对于这个示例,加载双积分器连续行动空间环境中使用的例子火车DDPG剂来控制双积分器系统。观察从环境中包含位置和速度是一个向量的质量。行动是一个标量代表一种力量,不断应用于质量,范围从-22牛顿。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env)
obsInfo = rlNumericSpec属性:LowerLimit:无穷UpperLimit:正的名字:“状态”的描述:“x, dx”维度:[2 1]数据类型:“替身”
actInfo = getActionInfo (env)
actInfo = rlNumericSpec属性:LowerLimit:无穷UpperLimit:正的名字:“力”描述:[0 x0字符串]维度:[1]数据类型:“替身”

自行动必须包含在一个有限的范围内,这是一个好主意来设置相应的行动信号的上、下限。必须这样做当演员有一个非线性的网络表示输出层比需要扩展相应产生一个输出在所需的范围。

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

创建一个评论家表示。PPO代理使用一个rlValueRepresentation评论家。连续观察空间,您可以使用深神经网络或一个自定义的基础上表示。对于这个示例,创建一个深层神经网络作为底层估计值。

%创建网络作为近似者的评论家%,它必须采取观察信号作为输入,并生成一个标量值criticNet = [imageInputLayer ([obsInfo。尺寸1],“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (10“名字”,“fc_in”)reluLayer (“名字”,“relu”)fullyConnectedLayer (1,“名字”,“出”));%设置一些培训选项的评论家criticOpts = rlRepresentationOptions (“LearnRate”,8 e - 3,“GradientThreshold”1);%的评论家表示创建网络评论家= rlValueRepresentation (criticNet obsInfo,“观察”,{“状态”},criticOpts);

PPO代理使用一个rlStochasticActorRepresentation。连续操作空间,随机演员只能使用神经网络近似者。

观察输入(这里称为myobs)必须接受一个二维向量,作为中指定obsInfo。输出(这里称为myact)也必须是一个二维向量(维度中指定数量的两倍actInfo)。输出向量代表的元素,在序列,所有手段和每一个行动的标准差(在本例中只有一个值和一个标准差)。

标准偏差的事实必须是非负数而平均值必须属于输出范围意味着网络必须有两个独立的路径。第一个路径是平均值,任何输出非线性必须按比例缩小的,这样它可以产生输出在输出范围。第二个路径是标准差,您必须使用一个执行non-negativity softplus或relu层。

%的输入路径层(2×1输入和1×1输出)inPath = [imageInputLayer ([obsInfo。尺寸1],“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (10“名字”,“ip_fc”)% 10 1的输出reluLayer (“名字”,“ip_relu”)%非线性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)scalingLayer (“名字”,“mp_out”,“规模”actInfo.UpperLimit)];%输出范围:(2 n, n)%路径层标准偏差(1×1的输入和输出)%使用softplus层非负sdevPath = [fullyConnectedLayer(15日“名字”,“vp_fc1”)% 15×1的输出reluLayer (“名字”,“vp_relu”)%非线性fullyConnectedLayer (1,“名字”,“vp_fc2”);% 1×1的输出softplusLayer (“名字”,“vp_out”));%输出范围:(0,+正)% conctatenate两个输入沿着维度(# 3),形成一个由1(2)输出层支出= concatenationLayer (3 2“名字”,“mean&sdev”);%添加层layerGraph网络对象actorNet = layerGraph (inPath);actorNet = addLayers (actorNet meanPath);actorNet = addLayers (actorNet sdevPath);actorNet = addLayers (actorNet,支出);%连接层:中值路径输出必须首先连接到输入的连接层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输入# 1的输出actorNet = connectLayers (actorNet,“vp_out”,“mean&sdev / in2”);%连接sdevPath mean&sdev输入# 2的输出%的阴谋网络情节(actorNet)

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

%设置一些演员培训选项actorOpts = rlRepresentationOptions (“LearnRate”,8 e - 3,“GradientThreshold”1);%创建演员使用网络演员= rlStochasticActorRepresentation (actorNet obsInfo actInfo,“观察”,{“状态”},actorOpts);

指定代理选项,创建PPO代理使用演员,评论家和代理的选择。

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

检查你的代理,用getAction返回从一个随机观察行动。

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

您现在可以测试和培训环境内的代理。

创建一个环境和获得观察和操作信息。

env = rlPredefinedEnv (“CartPole-Discrete”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);numObs = obsInfo.Dimension (1);numDiscreteAct =元素个数(actInfo.Elements);

创建一个周期性的深层神经网络的评论家。创建一个递归神经网络,使用sequenceInputLayer作为输入层,包括一个lstmLayer的另一个网络层。

criticNetwork = [sequenceInputLayer numObs,“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (8,“名字”,“俱乐部”)reluLayer (“名字”,“relu”)lstmLayer (8,“OutputMode”,“序列”,“名字”,“lstm”)fullyConnectedLayer (1,“名字”,“输出”));

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

criticOptions = rlRepresentationOptions (“LearnRate”1飞行,“GradientThreshold”1);评论家= rlValueRepresentation (criticNetwork obsInfo,“观察”,“状态”,criticOptions);

类似地,定义一个演员的递归神经网络。

actorNetwork = [sequenceInputLayer numObs,“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (8,“名字”,“俱乐部”)reluLayer (“名字”,“relu”)lstmLayer (8,“OutputMode”,“序列”,“名字”,“lstm”)fullyConnectedLayer (numDiscreteAct“名字”,“输出”)softmaxLayer (“名字”,“actionProb”));

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

actorOptions = rlRepresentationOptions (“LearnRate”1 e - 3,“GradientThreshold”1);演员= rlStochasticActorRepresentation (actorNetwork obsInfo actInfo,“观察”,“状态”,actorOptions);

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

agentOptions = rlPPOAgentOptions (“AdvantageEstimateMethod”,“finite-horizon”,“ClipFactor”,0.1);代理= rlPPOAgent(演员、评论家、agentOptions);

提示

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

介绍了R2019b
Baidu
map