rlPPOAgent
近端策略优化强化学习代理
描述
近端策略优化(Proximal policy optimization, PPO)是一种无模型、在线、策略上、策略梯度强化学习方法。该算法在通过环境相互作用采样数据和使用随机梯度下降优化剪辑代理目标函数之间进行交替。动作空间可以是离散的,也可以是连续的。
创建
语法
描述
根据观察和行动规格创建代理
使用默认初始化选项,为具有给定观察和操作规范的环境创建近端策略优化(PPO)代理。代理中的行动者和评论家使用从观察规范构建的默认深度神经网络代理
= rlPPOAgent (observationInfo
,actionInfo
)observationInfo
以及动作规范actionInfo
.的ObservationInfo
而且ActionInfo
的属性代理
设置为observationInfo
而且actionInfo
分别输入参数。
用给定的观察和操作规范为环境创建PPO代理。属性中指定的选项配置的默认网络代理
= rlPPOAgent (observationInfo
,actionInfo
,initOpts
)initOpts
对象。行动者-评论家代理不支持循环神经网络。金宝app有关初始化选项的详细信息,请参见rlAgentInitializationOptions
.
指定代理选项
创建一个PPO代理并设置AgentOptions属性代理
= rlPPOAgent (___,agentOptions
)agentOptions
输入参数。在前面语法中的任何输入参数之后使用此语法。
输入参数
initOpts
- - - - - -代理初始化选项
rlAgentInitializationOptions
对象
代理初始化选项,指定为rlAgentInitializationOptions
对象。
演员
- - - - - -演员
rlDiscreteCategoricalActor
对象|rlContinuousGaussianActor
对象
实现策略的参与者,指定为rlDiscreteCategoricalActor
或rlContinuousGaussianActor
函数逼近对象。有关创建角色逼近器的详细信息,请参见创建策略和值函数.
评论家
- - - - - -评论家
rlValueFunction
对象
评论家估计贴现长期奖励,指定为rlValueFunction
对象。有关创建临界逼近器的详细信息,请参见创建策略和值函数.
你的评论家可以使用循环神经网络作为函数逼近器。在这种情况下,您的参与者还必须使用循环神经网络。有关示例,请参见利用循环神经网络创建PPO Agent.
属性
ObservationInfo
- - - - - -观测规范
规范对象|规范对象数组
观察规范,指定为强化学习规范对象或定义维度、数据类型和观察信号名称等属性的规范对象数组。
如果通过指定演员和评论家来创建代理,则ObservationInfo
匹配参与者和评论家对象中指定的值。
你可以提取observationInfo
从现有环境或代理中使用getObservationInfo
.您还可以使用rlFiniteSetSpec
或rlNumericSpec
.
ActionInfo
- - - - - -操作规范
规范对象
动作规范,作为强化学习规范对象指定,定义诸如维度、数据类型和动作信号的名称等属性。
对于离散动作空间,必须指定actionInfo
作为一个rlFiniteSetSpec
对象。
对于连续的动作空间,必须指定actionInfo
作为一个rlNumericSpec
对象。
如果通过指定演员和评论家来创建代理,则ActionInfo
匹配参与者和评论家对象中指定的值。
你可以提取actionInfo
从现有环境或代理中使用getActionInfo
.您还可以使用rlFiniteSetSpec
或rlNumericSpec
.
AgentOptions
- - - - - -剂的选择
rlPPOAgentOptions
对象
代理选项,指定为rlPPOAgentOptions
对象。
UseExplorationPolicy
- - - - - -选择使用探索策略
真正的
(默认)|假
选项,在选择操作时使用探索策略,指定为以下逻辑值之一。
真正的
—选择动作时,使用基础代理探索策略。假
—选择动作时使用base agent greedy策略。
SampleTime
- - - - - -药剂取样时间
积极的标量|-1
对象的功能
例子
根据观察和行动规范创建离散的PPO代理
创造一个具有离散动作空间的环境,并获得其观察和动作规范。对于本例,加载示例中使用的环境使用深度网络设计器创建代理,并使用图像观察进行训练.这个环境有两个观测值:一个50 × 50的灰度图像和一个标量(钟摆的角速度)。动作是一个有五个可能元素的标量(一个扭矩为-)2
,1
,0
,1
,或2
Nm适用于秋千杆)。
负载百分比预定义环境环境= rlPredefinedEnv(“SimplePendulumWithImage-Discrete”);
从环境中获取观察和操作规范。
obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);
代理创建函数随机初始化演员网络和评论家网络。你可以通过固定随机生成器的种子来确保重现性。为此,取消注释下面的行。
% rng (0)
根据环境观察和操作规范创建PPO代理。
agent = rlPPOAgent(obsInfo,actInfo);
要检查代理,请使用getAction
从随机观察中返回动作。
getAction(代理,{兰特(obsInfo (1) .Dimension),兰德(obsInfo (2) .Dimension)})
ans =1x1单元阵列{[2]}
现在可以在环境中测试和训练代理。
使用初始化选项创建连续的PPO代理
创造一个具有连续动作空间的环境,并获得其观察和动作规范。对于本例,加载示例中使用的环境训练DDPG Agent用图像观察摆动和平衡摆.这个环境有两个观测值:一个50 × 50的灰度图像和一个标量(钟摆的角速度)。动作是表示扭矩的标量,范围从-连续2
来2
Nm。
负载百分比预定义环境环境= rlPredefinedEnv(“SimplePendulumWithImage-Continuous”);获得观察和行动规范obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);
创建一个代理初始化选项对象,指定网络中每个隐藏的全连接层必须具有128
神经元(不是默认数量,256
).
initOpts = rlAgentInitializationOptions“NumHiddenUnit”, 128);
代理创建函数随机初始化演员网络和评论家网络。你可以通过固定随机生成器的种子来确保重现性。为此,取消注释下面的行。
% rng (0)
根据环境观察和操作规范创建PPO actor-批评家代理。
agent = rlPPOAgent(obsInfo,actInfo,initOpts);
从行动者和评论家中提取深度神经网络。
actorNet = getModel(代理);criticNet = getModel(get批评家(代理));
显示批评网络的层,并验证每个隐藏的全连接层有128个神经元
criticNet。层
ans = 11x1带有图层的图层数组:1的concat串联连接2输入沿着维度1 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”功能输入1功能10“fc_2”完全连接128完全连接层11“输出”完全连接1完全连接层
情节演员和评论家网络
情节(layerGraph (actorNet))
情节(layerGraph (criticNet))
要检查代理,请使用getAction
从随机观察中返回动作。
getAction(代理,{兰特(obsInfo (1) .Dimension),兰德(obsInfo (2) .Dimension)})
ans =1x1单元阵列{[0.9228]}
现在可以在环境中测试和训练代理。
创建近端策略优化代理
创建环境接口,获取其观察和操作规范。
环境= rlPredefinedEnv(“CartPole-Discrete”);obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);
创建一个深度神经网络,用作评论家内部的近似模型。对于PPO代理,评论家估计一个值函数,因此它必须以观测信号为输入,并返回一个标量值。
criticNetwork = [featureInputLayer(prod(obsInfo.Dimension)),...“归一化”,“没有”,“名字”,“状态”) fullyConnectedLayer (1,“名字”,“CriticFC”));
使用criticNetwork
.PPO代理商使用rlValueFunction
对象来实现批评家。
批评家= rlValueFunction(criticNetwork,obsInfo);
为评论家设置一些训练选项。
criticOpts = rlOptimizerOptions(...“LearnRate”, 5 e - 3,“GradientThreshold”1);
创建一个深度神经网络,用作actor内的近似模型。对于PPO代理,行为人执行随机策略,对于离散动作空间,由离散类别行为人执行随机策略。在这种情况下,网络必须将观察信号作为输入,并返回每个动作的概率。因此,输出层必须拥有与可能的操作数量一样多的元素。
actorNetwork = [featureInputLayer(prod(obsInfo.Dimension)),...“归一化”,“没有”,“名字”,“状态”) fullyConnectedLayer(元素个数(actInfo.Dimension),...“名字”,“行动”));
使用以下命令创建参与者actorNetwork
.PPO代理商使用rlDiscreteCategoricalActor
对象来实现离散操作空间的参与者。
actor = rlDiscreteCategoricalActor(actorNetwork,obsInfo,actInfo);
为演员设置一些训练选项。
actorOpts = rlOptimizerOptions(“LearnRate”, 8 e - 3,...“GradientThreshold”1);
指定代理选项,并使用参与者、评论家和代理选项对象创建PPO代理。
agentOpts = rlPPOAgentOptions(...“ExperienceHorizon”, 1024,...“DiscountFactor”, 0.95,...“CriticOptimizerOptions”criticOpts,...“ActorOptimizerOptions”, actorOpts);agent = rlPPOAgent(actor,批评家,agentOpts)
agent = rlPPOAgent with properties: AgentOptions: [1x1 rl.option.]rlPPOAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec] SampleTime: 1
要检查代理,请使用getAction
从随机观察中返回动作。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1x1单元阵列{[-10]}
现在可以针对环境测试和训练代理。
创建持续的PPO代理
创造一个具有连续动作空间的环境,并获得其观察和动作规范。对于本例,加载双积分器连续动作空间环境所使用的实例训练DDPG Agent控制双积分系统.来自环境的观测是一个包含质量的位置和速度的矢量。作用是表示施加在质量上的力的标量,范围从-连续2
来2
牛顿。
环境= rlPredefinedEnv(“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo(env)
obsInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf名称:"states"描述:"x, dx"维度:[2 1]数据类型:"double"
getActionInfo(env)
actInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf名称:"force"描述:[0x0 string]维度:[1 1]数据类型:"double"
由于动作必须包含在一个有限的范围内,因此要相应地设置动作信号的上限和下限,这样在构建行为者网络时就可以很容易地检索它们。
actInfo.LowerLimit = 2;actInfo.UpperLimit = 2;
演员网络和评论家网络是随机初始化的。你可以通过固定随机生成器的种子来确保重现性。
rng (0)
创建一个深度神经网络,用作评论家内部的近似模型。对于PPO代理,评论家估计一个值函数,因此它必须以观测信号为输入,并返回一个标量值。
criticNet = [featureInputLayer(prod(obsInfo.Dimension)),...“归一化”,“没有”,“名字”,“状态”) fullyConnectedLayer (10“名字”,“fc_in”) reluLayer (“名字”,“relu”) fullyConnectedLayer (1,“名字”,“出”));
使用criticNet
.PPO代理商使用rlValueFunction
对象来实现批评家。
评论= rlValueFunction(批评网,obsInfo);
为评论家设置一些训练选项。
criticOpts = rlOptimizerOptions(...“LearnRate”, 8 e - 3,“GradientThreshold”1);
创建一个深度神经网络,用作actor内的近似模型。对于PPO代理,actor执行随机策略,对于连续动作空间,该策略由连续高斯actor实现。在这种情况下,网络必须将观察信号作为输入,并为每个动作返回平均值和标准偏差值。因此,它必须有两个输出层(一个用于平均值,另一个用于标准偏差值),每个输出层具有与动作空间维度相同的元素。
注意,标准偏差必须是非负的,平均值必须落在动作的范围内。因此,返回标准差的输出层必须是softplus或ReLU层,以强制非负性,而返回平均值的输出层必须是缩放层,以将平均值缩放到输出范围。
%输入路径层inPath = [featureInputLayer(prod(obsInfo.Dimension)),...“归一化”,“没有”,“名字”,“状态”) fullyConnectedLayer (10“名字”,“ip_fc”) reluLayer (“名字”,“ip_relu”) fullyConnectedLayer (1,“名字”,“ip_out”));%路径层为平均值meanPath = [fulllyconnectedlayer (15,“名字”,“mp_fc1”) reluLayer (“名字”,“mp_relu”) fullyConnectedLayer (1,“名字”,“mp_fc2”);tanhLayer (“名字”,的双曲正切);scalingLayer (“名字”,“mp_out”,...“规模”actInfo.UpperLimit)];%范围:(-2N,2N)%路径层为标准偏差sdevPath = [fullyConnectedLayer(15,“名字”,“vp_fc1”) reluLayer (“名字”,“vp_relu”) fullyConnectedLayer (1,“名字”,“vp_fc2”);softplusLayer (“名字”,“vp_out”));%范围:(0,+Inf)将图层添加到layerGraph网络对象actorNet = layerGraph(inPath);actorNet = addLayers(actorNet,meanPath);actorNet = addLayers(actorNet,sdevPath);%连接层actorNet = connectLayers(actorNet,“ip_out”,“mp_fc1 /”);actorNet = connectLayers(actorNet,“ip_out”,“vp_fc1 /”);百分比图网络情节(actorNet)
使用以下命令创建参与者actorNet
.PPO代理商使用rlContinuousGaussianActor
对象来实现连续操作空间的参与者。
actor = rlContinuousGaussianActor(actorNet, obsInfo, actInfo,...“ActionMeanOutputNames”,“mp_out”,...“ActionStandardDeviationOutputNames”,“vp_out”,...“ObservationInputNames”,“状态”);
为演员设置一些训练选项。
actorOpts = rlOptimizerOptions(...“LearnRate”, 8 e - 3,“GradientThreshold”, 1)
actorOpts = rlOptimizerOptions with properties: LearnRate: 0.0080 GradientThreshold: 1 GradientThresholdMethod:“l2norm”L2RegularizationFactor: 1.0000 -04算法:“adam”OptimizerParameters: [1x1 rl.option.OptimizerParameters]
指定代理选项,并使用actor、批评家和代理选项创建PPO代理。
agentOpts = rlPPOAgentOptions(...“ExperienceHorizon”, 1024,...“DiscountFactor”, 0.95);agent = rlPPOAgent(actor,批评家,agentOpts)
agent = rlPPOAgent with properties: AgentOptions: [1x1 rl.option.]rlPPOAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlNumericSpec] SampleTime: 1
要检查代理,请使用getAction
从随机观察中返回动作。
getAction(代理,{兰德(2,1)})
ans =1x1单元阵列{[0.6668]}
现在可以在环境中测试和训练代理。
利用循环神经网络创建PPO Agent
类所使用的预定义环境训练DQN人员平衡车杆系统的例子。
环境= rlPredefinedEnv(“CartPole-Discrete”);
获取观察和行动信息。该环境具有连续的四维观测空间(车和杆的位置和速度)和离散的一维作用空间,由两种可能的力(-10N或10N)的应用组成。
obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);
为评论家创建一个循环深度神经网络。对于PPO代理,评论家估计一个值函数,因此它必须以观测信号为输入,并返回一个标量值。要创建循环神经网络,请使用sequenceInputLayer
作为输入层并包含一个lstmLayer
作为其他网络层之一。
criticNetwork = [sequenceInputLayer(prod(obsInfo.Dimension)),...“归一化”,“没有”,“名字”,“myobs”) fullyConnectedLayer (8,“名字”,“俱乐部”) reluLayer (“名字”,“relu”) lstmLayer (8,“OutputMode”,“序列”,“名字”,“lstm”) fullyConnectedLayer (1,“名字”,“输出”));
使用criticNetwork
.PPO代理商使用rlValueFunction
对象来实现批评家。
批评家= rlValueFunction(criticNetwork,obsInfo);
为评论家设置一些训练选项。
criticOptions = rlOptimizerOptions(...“LearnRate”1飞行,“GradientThreshold”1);
创建一个神经网络,用作角色内的近似模型。既然评论家有一个循环网络,那么演员也一定有一个循环网络。对于PPO代理,行为人执行随机策略,对于离散动作空间,由离散类别行为人执行随机策略。在这种情况下,网络必须将观察信号作为输入,并返回每个动作的概率。因此,输出层必须拥有与可能的操作数量一样多的元素。
actorNetwork = [sequenceInputLayer(prod(obsInfo.Dimension)),...“归一化”,“没有”,“名字”,“myobs”) fullyConnectedLayer (8,“名字”,“俱乐部”) reluLayer (“名字”,“relu”) lstmLayer (8,“OutputMode”,“序列”,“名字”,“lstm”) fullyConnectedLayer(元素个数(actInfo.Elements),“名字”,“输出”) softmaxLayer (“名字”,“actionProb”));
使用以下命令创建参与者actorNetwork
.PPO代理商使用rlDiscreteCategoricalActor
对象来实现离散操作空间的参与者。
actor = rlDiscreteCategoricalActor(actorNetwork,obsInfo,actInfo);
为演员设置一些训练选项。
actorOptions = rlOptimizerOptions(...“LearnRate”1 e - 3,“GradientThreshold”1);
创建代理选项对象。
agentOptions = rlPPOAgentOptions(...“AdvantageEstimateMethod”,“finite-horizon”,...“ClipFactor”, 0.1,...“CriticOptimizerOptions”criticOptions,...“ActorOptimizerOptions”, actorOptions);
当使用循环神经网络时MiniBatchSize
属性是学习轨迹的长度。
agentOptions。MiniBatchSize
Ans = 128
使用参与者和评论家以及代理选项对象创建代理。
agent = rlPPOAgent(actor,批评家,agentOptions);
检查您的代理,使用getAction从随机观察中返回操作。
getAction(代理,兰德(obsInfo.Dimension))
ans =1x1单元阵列{[10]}
提示
对于连续操作空间,此代理不强制操作规范设置的约束。在这种情况下,必须在环境中强制执行操作空间约束。
对于PPO智能体,调优行为体网络的学习率是必要的,而对于TRPO智能体,则不需要调优。
版本历史
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。