rlPGAgent
描述
策略梯度(PG)算法是一个模范自由,在网上,在政策强化学习方法。PG代理是一个基于策略的强化学习代理使用加强算法直接计算最优政策,最大化的长期回报。可以是离散或连续的行动空间。连续操作空间,这个代理不强制约束集的操作规范;因此,如果您需要执行行动的限制,你必须这样做,内环境。
更多信息在PG代理和增强算法,明白了策略梯度(PG)代理。更多信息在不同类型的强化学习代理,看看强化学习代理。
创建
语法
描述
从观察和行动规范创建代理
创建一个策略梯度代理一个环境与给定的观察和操作规范,使用默认初始化选择。代理使用默认的演员兼评论家深层神经网络由观测规范代理
= rlPGAgent (observationInfo
,actionInfo
)observationInfo
和操作规范actionInfo
。的ObservationInfo
和ActionInfo
的属性代理
是设置为observationInfo
和actionInfo
分别输入参数。
创建一个策略梯度代理一个环境与给定的观察和操作规范。代理使用默认的网络中,每个隐藏完全连接层单位中指定的数量代理
= rlPGAgent (observationInfo
,actionInfo
,initOpts
)initOpts
对象。政策梯度代理不支持递归神经网络。金宝app初始化选项的更多信息,请参阅rlAgentInitializationOptions
。
从演员兼评论家创建代理
创建一个网络政策梯度代理指定的演员。默认情况下,代理
= rlPGAgent (演员
)UseBaseline
代理的属性假
在这种情况下。
指定代理选项
创建一个策略梯度代理和设置代理
= rlPGAgent (___,agentOptions
)AgentOptions
财产agentOptions
输入参数。使用这个语法的任何输入参数后以前的语法。
输入参数
initOpts
- - - - - -代理初始化选项
rlAgentInitializationOptions
对象
代理初始化选项,指定为一个rlAgentInitializationOptions
对象。政策梯度代理不支持递归神经网络。金宝app
演员
- - - - - -演员
rlDiscreteCategoricalActor
对象|rlContinuousGaussianActor
对象
演员实现政策,指定为一个rlDiscreteCategoricalActor
或rlContinuousGaussianActor
函数近似者对象。创建演员接近者的更多信息,请参阅创建政策和价值功能。
评论家
- - - - - -基线评论家
rlValueFunction
对象
基线评论家估计折现长期回报,作为一个指定rlValueFunction
对象。创建评论家合拢器的更多信息,请参阅创建政策和价值功能。
属性
ObservationInfo
- - - - - -观测规范
规范对象|规范对象的数组
观测规范,指定为一个rlFiniteSetSpec
或rlNumericSpec
对象或数组包含一个混合的对象。数组中每个元素定义了一个环境观测通道的特性,比如尺寸,数据类型和名称。
如果您创建代理通过指定一个演员和评论家的价值ObservationInfo
匹配指定的值在演员和批评的对象。
您可以提取observationInfo
从现有的环境或代理使用getObservationInfo
。您还可以手动构建规范使用rlFiniteSetSpec
或rlNumericSpec
。
ActionInfo
- - - - - -操作规范
rlFiniteSetSpec
对象|rlNumericSpec
对象
动作规范,要么作为一个指定rlFiniteSetSpec
(离散行动空间)rlNumericSpec
(连续动作空间)对象。这个对象定义环境行动通道的属性,如尺寸,数据类型和名称。
请注意
只有一个动作频道是被允许的。
如果您创建代理通过指定一个演员和评论家的价值ActionInfo
匹配指定的值在演员和批评的对象。
您可以提取actionInfo
从现有的环境或代理使用getActionInfo
。您还可以手动构建规范使用rlFiniteSetSpec
或rlNumericSpec
。
AgentOptions
- - - - - -剂的选择
rlPGAgentOptions
对象
代理选项,指定为一个rlPGAgentOptions
对象。
UseExplorationPolicy
- - - - - -选择使用探索政策
真正的
(默认)|假
选择使用探索政策选择行为时,指定为以下之一的逻辑值。
真正的
——使用基本代理探索政策选择行为时sim卡
和generatePolicyFunction
。在这种情况下,代理人选择其行动抽样概率分布,因此,政策是随机和代理其观测太空探索。假
使用基本代理贪婪策略(行动与最大似然)在选择行动sim卡
和generatePolicyFunction
。在这种情况下,模拟生成代理和政策行为的确定性。
请注意
此选项只影响仿真和部署;它不影响训练。
SampleTime
- - - - - -样本的代理
积极的标量|1
对象的功能
例子
创建离散策略梯度代理从观察和操作规范
创造一个环境,一个离散的行动空间,并获得其观察和操作规范。对于这个示例,负载在示例中使用的环境创建DQN代理使用深层网络设计师和训练使用图像的观察。这个环境有两个观察:50-by-50灰度图像和一个标量(摆的角速度)。行动是一个标量和五个可能的元素(转矩的2 1 0 1或2纳米应用于钢管)。
env = rlPredefinedEnv (“SimplePendulumWithImage-Discrete”);
获得观察和操作规范对象。
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
代理创建函数初始化演员和评论家网络随机。确保修复种子再现性的随机发生器。
rng (0)
创建一个策略梯度代理从环境中观察和操作规范。
代理= rlPGAgent (obsInfo actInfo);
检查您的代理,使用getAction
返回操作从一个随机的观察。
getAction(代理,{兰特(obsInfo (1) .Dimension),兰德(obsInfo (2) .Dimension)})
ans =1 x1单元阵列{[2]}
您现在可以测试和培训环境内的代理。
使用初始化选项创建连续梯度代理政策
创造一个环境,一个连续的操作空间和获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车DDPG代理摇摆起来,平衡摆与图像观察。这个环境有两个观察:50-by-50灰度图像和一个标量(摆的角速度)。行动是一个标量代表一个扭矩不断从2到2海里。
env = rlPredefinedEnv (“SimplePendulumWithImage-Continuous”);
获得观察和操作规范
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
创建一个代理对象初始化选项,指定每个网络中隐藏的完全连接层必须有128个神经元(而不是默认的数字,256)。政策梯度代理不支持复发性网络,所以设置金宝appUseRNN
选项真正的
创建代理时生成一个错误。
initOpts = rlAgentInitializationOptions (NumHiddenUnit = 128);
代理创建函数初始化演员和评论家网络随机。确保修复种子再现性的随机发生器。
rng (0)
创建一个策略梯度代理从环境中观察和操作规范。
代理= rlPGAgent (obsInfo actInfo initOpts);
提取深层神经网络代理的演员和评论家。
actorNet = getModel (getActor(代理));criticNet = getModel (getCritic(代理));
验证每个隐藏完全连接层有128个神经元,可以显示层MATLAB®命令窗口,
criticNet.Layers
或可视化结构交互使用analyzeNetwork
。
analyzeNetwork (criticNet)
情节演员和评论家网络,并显示他们的重量。
情节(layerGraph (actorNet))
总结(actorNet)
初始化:可学的真正的数字:18.9输入:1“input_1”50 x50x1图片2的input_2 1功能
情节(layerGraph (criticNet))
总结(criticNet)
初始化:可学的真正的数字:18.9输入:1“input_1”50 x50x1图片2的input_2 1功能
检查您的代理,使用getAction
返回操作从一个随机的观察。
getAction(代理,{兰特(obsInfo (1) .Dimension),兰德(obsInfo (2) .Dimension)})
ans =1 x1单元阵列{[0.9228]}
您现在可以测试和培训环境内的代理。
创建一个离散PG代理从演员和基线评论家
创造一个环境,一个离散的行动空间,并获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车PG代理与基线控制双积分器系统。观察从环境中包含位置和速度是一个向量的质量。行动是一个标量代表一种力量,应用于质量,有三个可能的值(2 0 2牛顿)。
env = rlPredefinedEnv (“DoubleIntegrator-Discrete”);obsInfo = getObservationInfo (env)
obsInfo = rlNumericSpec属性:LowerLimit:无穷UpperLimit:正的名字:“状态”的描述:“x, dx”维度:[2 1]数据类型:“替身”
actInfo = getActionInfo (env)
actInfo = rlFiniteSetSpec属性:元素:(2 0 2)名称:“力”描述:[0 x0字符串]维度:[1]数据类型:“替身”
Policy-gradient代理可以使用参数化基准函数近似的价值的政策。一个值函数近似者以当前观测作为输入并返回一个标量输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。
模型参数化的基本功能,使用一个输入神经网络层(接收观测通道的内容,按照奥林匹克广播服务公司信息
)和一个输出层(返回标量值)。请注意,刺激(obsInfo.Dimension)
返回总数的维度观察空间无论观察空间是一个列向量,行向量或矩阵。
层的网络定义为一个数组对象。
baselineNet = [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (64) reluLayer fullyConnectedLayer (1)];
转换为一个dlnetwork
对象和显示权重的数量。
baselineNet = dlnetwork (baselineNet);总结(baselineNet)
初始化:可学的真正的数字:257输入:1“输入”2的特性
创建基线接近者对象使用baselineNet
并观察规范。价值函数近似者的更多信息,请参阅rlValueFunction
。
基线= rlValueFunction (baselineNet obsInfo);
检查随机输入的评论家观察。
getValue(基线,{兰德(obsInfo.Dimension)})
ans =单-0.1204
政策使用参数化随机梯度代理政策,离散行动空间由一个离散实现分类的演员。这演员需要一个观察作为输入并返回输出随机行动采样(在有限数量的可能的行动)从分类概率分布。
模型中的参数化政策的演员,使用一个输入神经网络层(接收环境观察频道的内容,规定obsInfo
)和一个输出层。输出层必须返回一个向量的概率为每个可能的行动,是指定的actInfo
。请注意,元素个数(actInfo.Dimension)
返回的元素数量的离散动作空间。
层的网络定义为一个数组对象。
actorNet = [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (64) reluLayer fullyConnectedLayer(元素个数(actInfo.Elements)));
转换为一个dlnetwork
对象和显示权重的数量。
actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:可学的真正的数字:387输入:1“输入”2的特性
创建一个演员使用actorNet
和观察和操作规范。离散分类演员的更多信息,请参阅rlDiscreteCategoricalActor
。
演员= rlDiscreteCategoricalActor (actorNet obsInfo actInfo);
检查演员与一个随机观测输入。
getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[2]}
创建PG代理使用演员和基线评论家。
代理= rlPGAgent(演员、基线)
代理= rlPGAgent属性:AgentOptions: [1 x1 rl.option。rlPGAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec] SampleTime: 1
为代理指定选项,包括演员培训选项和评论家。
agent.AgentOptions。UseBaseline= true; agent.AgentOptions.DiscountFactor = 0.99; agent.AgentOptions.CriticOptimizerOptions.LearnRate = 5e-3; agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1; agent.AgentOptions.ActorOptimizerOptions.LearnRate = 5e-3; agent.AgentOptions.ActorOptimizerOptions.GradientThreshold = 1;
检查代理使用一个随机观察输入。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[2]}
您现在可以测试和培训环境内的代理。
创建一个连续的PG代理从演员和基线评论家
创造一个环境,一个持续的行动空间,获得其观察和操作规范。对于这个示例,加载双积分器连续行动空间环境中使用的例子火车DDPG剂来控制双积分器系统。
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]数据类型:“替身”
在这个例子中,这个动作是一个标量值代表一个力从2到2牛顿。以确保代理的输出是在这个范围内,你执行一个适当的缩放操作。存储这些限制,所以你以后可以很容易地访问它们。
actInfo。LowerLimit = 2;actInfo。UpperLimit = 2;
Policy-gradient代理可以使用参数化基准函数近似的价值的政策。一个值函数近似者以当前观测作为输入并返回一个标量输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。
模型参数化的基本功能,使用一个输入神经网络层(接收观测通道的内容,规定obsInfo
)和一个输出层(返回标量值)。请注意,刺激(obsInfo.Dimension)
返回总数的维度观察空间无论观察空间是一个列向量,行向量或矩阵。
层的网络定义为一个数组对象。
baselineNet = [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (64) reluLayer fullyConnectedLayer (1)];
转换为一个dlnetwork
对象和显示权重的数量。
baselineNet = dlnetwork (baselineNet);总结(baselineNet)
初始化:可学的真正的数字:257输入:1“输入”2的特性
创建基线接近者对象使用baselineNet
并观察规范。价值函数近似者的更多信息,请参阅rlValueFunction
。
基线= rlValueFunction (baselineNet obsInfo);
检查随机输入的评论家观察。
getValue(基线,{兰德(obsInfo.Dimension)})
ans =单-0.1204
Policy-gradient代理使用参数化随机策略,连续动作空间由一个连续实现高斯的演员。这演员需要一个观察作为输入并返回输出随机行动从高斯概率分布采样。
近似高斯分布的平均值和标准偏差,您必须使用神经网络和两个输出层,每一个拥有尽可能多的元素行为空间的维数。一个输出层必须返回一个向量包含每个行动维度的平均值。另一个必须返回向量包含每个行动维度的标准差。
注意,必须负的值和均值标准差必须在范围之内的所有行动。因此输出层返回必须softplus或标准差ReLU层,执行nonnegativity,而输出层返回平均值必须扩展层,按比例输出范围的平均值。
对于这个示例环境只有一个观测通道,因此网络只有一个输入层。
定义每个网络路径层对象数组,并将名称分配给每条路径的输入和输出层。这些名字让你连接路径,然后明确关联网络的输入和输出通道层与适当的环境。
%的输入路径inPath = [featureInputLayer (prod (obsInfo.Dimension),名称=“obs_in”)fullyConnectedLayer (32) reluLayer (Name =“ip_out”));%的意思是路径meanPath = = [fullyConnectedLayer(16日的名字“mp_fc1”)reluLayer fullyConnectedLayer (1) tanhLayer (Name =”“双曲正切);%范围:1、1scalingLayer (Name =“mp_out”,…规模= actInfo.UpperLimit)];%范围:2,2%标准差路径sdevPath = = [fullyConnectedLayer(16日的名字“sp_fc1”)reluLayer fullyConnectedLayer (1);softplusLayer (Name =“sp_out”));%非负%添加层layerGraph对象actorNet = layerGraph (inPath);actorNet = addLayers (actorNet meanPath);actorNet = addLayers (actorNet sdevPath);%连接inPath meanPath输入的输出actorNet = connectLayers (actorNet,“ip_out”,“mp_fc1 /”);%连接inPath variancePath输入的输出actorNet = connectLayers (actorNet,“ip_out”,“sp_fc1 /”);%的阴谋网络情节(actorNet)
%转换为dlnetwork对象actorNet = dlnetwork (actorNet);%显示权重的数量总结(actorNet)
初始化:真很多可学的:1.1 k输入:1“obs_in”2功能
创建角色接近者对象使用actorNet
、环境的规范和网络的输入和输出层的名称作为输入参数。更多的信息,在连续高斯演员,看到rlContinuousGaussianActor
。
演员= rlContinuousGaussianActor (actorNet,…obsInfo actInfo,…ObservationInputNames =“obs_in”,…ActionMeanOutputNames =“mp_out”,…ActionStandardDeviationOutputNames =“sp_out”);
检查演员与一个随机输入的观察。
getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0.0963]}
创建PG代理使用演员和基线评论家。
代理= rlPGAgent(演员、基线)
代理= rlPGAgent属性:AgentOptions: [1 x1 rl.option。rlPGAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlNumericSpec] SampleTime: 1
为代理指定选项,包括演员培训选项和评论家。
agent.AgentOptions。UseBaseline= true; agent.AgentOptions.DiscountFactor = 0.99; agent.AgentOptions.CriticOptimizerOptions.LearnRate = 5e-3; agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1; agent.AgentOptions.ActorOptimizerOptions.LearnRate = 5e-3; agent.AgentOptions.ActorOptimizerOptions.GradientThreshold = 1;
检查你的代理和一个随机输入的观察。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[1.1197]}
您现在可以测试和培训环境内的代理。
创建一个离散PG与复发性神经网络代理
对于这个示例,负载在示例中使用的环境火车PG代理与基线控制双积分器系统。观察从环境中包含位置和速度是一个向量的质量。行动是一个标量代表一种力量,应用于质量,有三个可能的值(2 0 2牛顿)。
env = rlPredefinedEnv (“DoubleIntegrator-Discrete”);
观察和规范信息。
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
Policy-gradient代理可以使用参数化基准函数近似的价值的政策。模型参数化的基本功能,使用递归神经网络。
层的网络定义为一个数组对象。创建一个周期性网络,使用sequenceInputLayer
作为输入层,包括至少一个lstmLayer
。
baselineNet = [sequenceInputLayer (prod (obsInfo.Dimension)) lstmLayer (32) reluLayer fullyConnectedLayer (1)];
转换为一个dlnetwork
对象和显示权重的数量。
baselineNet = dlnetwork (baselineNet);总结(baselineNet)
初始化:可学的真正的数量:4.5 k输入:1“sequenceinput”序列与二维输入
创建基线接近者对象使用baselineNet
并观察规范。
基线= rlValueFunction (baselineNet obsInfo);
检查随机输入观测基线评论家。
getValue(基线,{兰德(obsInfo.Dimension)})
ans =单-0.0065
政策使用参数化随机梯度代理政策,离散行动空间由一个离散实现分类的演员。
一个离散分类演员实现参数化随机离散行动空间政策。
这演员需要一个观察作为输入并返回输出随机行动采样(在有限数量的可能的行动)从分类概率分布。
评论家有复发性网络以来,演员必须有复发性网络。网络必须具有一个输入层(接收环境观察的内容频道,是指定的obsInfo
)和一个输出层。输出层必须返回一个向量的概率为每个可能的行动,是指定的actInfo
。
层的网络定义为一个数组对象。
actorNet = [sequenceInputLayer (prod (obsInfo.Dimension)) lstmLayer (32) reluLayer fullyConnectedLayer(元素个数(actInfo.Elements)));
转换为一个dlnetwork
对象和显示权重的数量。
actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:可学的真正的数量:4.5 k输入:1“sequenceinput”序列与二维输入
创建一个演员使用actorNet
和观察和操作规范。
演员= rlDiscreteCategoricalActor (actorNet obsInfo actInfo);
检查演员与一个随机观测输入。
getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0]}
创建一个PG代理使用演员和基线网络。
代理= rlPGAgent(演员、基线)
代理= rlPGAgent属性:AgentOptions: [1 x1 rl.option。rlPGAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec] SampleTime: 1
检查代理使用一个随机观察输入。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[0]}
评估代理使用连续的观测,使用序列长度(时间)维度。例如,获得一系列的行动9
观察。
(行动、州)= getAction(代理,…{兰德([obsInfo。尺寸1 9])});
显示相对应的行动第七元素的观察。
action ={1}行动;行动(1,1,1,7)
ans = 0
您现在可以测试和培训环境内的代理。
提示
连续操作空间,
rlPGAgent
代理不执行规定的约束行为规范,所以您必须执行行动空间中约束环境。
版本历史
介绍了R2019a
Abrir比如
这种版本modificada德埃斯特比如。害怕Desea abrir埃斯特比如con sus modificaciones吗?
第一de MATLAB
Ha事实clic en联合国围绕此时一个埃斯特第一de MATLAB:
Ejecute el第一introduciendolo en la ventana de第一de MATLAB。洛杉矶navegadores网络没有admiten第一de MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。