rlPGAgent
策略梯度强化学习代理
描述
策略梯度(PG)算法是一种无模型、在线、基于策略的强化学习方法。PG智能体是一种基于策略的强化学习智能体,它使用强化算法直接计算出使长期奖励最大化的最优策略。动作空间可以是离散的,也可以是连续的。
创建
语法
描述
根据观察和操作规范创建代理
使用默认初始化选项,为具有给定观察和操作规范的环境创建策略梯度代理。代理中的演员和评论家使用从观察规范构建的默认深度神经网络代理
= rlPGAgent (observationInfo
,actionInfo
)observationInfo
动作规范actionInfo
.的ObservationInfo
和ActionInfo
的属性代理
设置为observationInfo
和actionInfo
分别为输入参数。
为具有给定观察和操作规范的环境创建策略梯度代理。代理使用默认网络,其中每个隐藏的完全连接层具有指定的单元数量代理
= rlPGAgent (observationInfo
,actionInfo
,initOpts
)initOpts
对象。策略梯度代理不支持递归神经网络。金宝app有关初始化选项的详细信息,请参见rlAgentInitializationOptions
.
从演员和评论家中创建代理
使用指定的参与者网络创建PG代理。默认情况下,代理
= rlPGAgent (演员
)UseBaseline
代理人的财产为假
在这种情况下。
指定座席选项
创建PG代理并设置代理
= rlPGAgent (___,agentOptions
)AgentOptions
属性赋给agentOptions
输入参数。在前面语法中的任何输入参数之后使用此语法。
输入参数
initOpts
- - - - - -代理初始化选项
rlAgentInitializationOptions
对象
代理初始化选项,指定为rlAgentInitializationOptions
对象。策略梯度代理不支持递归神经网络。金宝app
演员
- - - - - -演员
rlDiscreteCategoricalActor
对象|rlContinuousGaussianActor
对象
实现策略的参与者,指定为rlDiscreteCategoricalActor
或rlContinuousGaussianActor
函数逼近器对象。有关创建参与者近似器的更多信息,请参见创建策略和价值功能.
评论家
- - - - - -基线评论家
rlValueFunction
对象
基线评论家,估计贴现的长期回报,指定为一个rlValueFunction
对象。有关创建临界近似器的更多信息,请参见创建策略和价值功能.
属性
ObservationInfo
- - - - - -观测规范
规范对象|规范对象数组
观察规范,指定为强化学习规范对象或规范对象数组,定义诸如维度、数据类型和观察信号的名称等属性。
如果通过指定演员和评论家来创建代理,则ObservationInfo
匹配角色和评论家对象中指定的值。
你可以提取observationInfo
从现有的环境或代理使用getObservationInfo
.您还可以使用rlFiniteSetSpec
或rlNumericSpec
.
ActionInfo
- - - - - -操作规范
规范对象
动作规范,作为强化学习规范对象指定,定义诸如维度、数据类型和动作信号名称等属性。
对于离散动作空间,必须指定actionInfo
作为一个rlFiniteSetSpec
对象。
对于连续操作空间,必须指定actionInfo
作为一个rlNumericSpec
对象。
如果通过指定演员和评论家来创建代理,则ActionInfo
匹配角色和评论家对象中指定的值。
你可以提取actionInfo
从现有的环境或代理使用getActionInfo
.您还可以使用rlFiniteSetSpec
或rlNumericSpec
.
AgentOptions
- - - - - -剂的选择
rlPGAgentOptions
对象
代理选项,指定为anrlPGAgentOptions
对象。
UseExplorationPolicy
- - - - - -使用勘探策略的选项
真正的
(默认)|假
选项,在选择操作时使用探索策略,指定为以下逻辑值之一。
真正的
-在选择动作时使用基本代理探索策略。假
-在选择动作时使用基本代理贪婪策略。
SampleTime
- - - - - -药剂取样时间
积极的标量|-1
对象的功能
例子
根据观察和操作规范创建离散策略梯度代理
创建一个具有离散行动空间的环境,并获得其观察和行动规范。对于本例,加载示例中使用的环境使用深度网络设计器创建代理并使用图像观察进行训练.这个环境有两个观测值:一个50 × 50的灰度图像和一个标量(钟摆的角速度)。作用是一个有五个可能元素的标量(转矩为-或-)2
,1
,0
,1
,或2
Nm施加到极点)。
%加载预定义环境env = rlPredefinedEnv()“SimplePendulumWithImage-Discrete”);%获得观察和行动规范obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);
代理创建功能随机初始化演员和评论家网络。您可以通过固定随机生成器的种子来确保再现性。为此,取消下面一行的注释。
% rng (0)
根据环境观察和操作规范创建策略梯度代理。
agent = rlPGAgent(obsInfo,actInfo);
要检查代理,请使用getAction
从随机观察返回动作。
getAction(代理,{兰特(obsInfo (1) .Dimension),兰德(obsInfo (2) .Dimension)})
ans =1x1单元阵列{[2]}
现在可以在环境中测试和训练代理。
使用初始化选项创建连续策略梯度代理
创造一个具有连续行动空间的环境,并获得其观察和行动规范。对于本例,加载示例中使用的环境用图像观察训练DDPG Agent摆动和平衡摆锤.这个环境有两个观测值:一个50 × 50的灰度图像和一个标量(钟摆的角速度)。作用是一个标量,表示从-的连续范围内的扭矩2
来2
Nm。
%加载预定义环境env = rlPredefinedEnv()“SimplePendulumWithImage-Continuous”);%获得观察和行动规范obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);
创建一个代理初始化选项对象,指定网络中每个隐藏的完全连接层必须具有128
神经元(而不是默认的数目,256
).策略梯度代理不支持循环网络,所以设置金宝appUseRNN
选项真正的
在创建代理时生成错误。
initOpts = rlAgentInitializationOptions(“NumHiddenUnit”, 128);
代理创建功能随机初始化演员和评论家网络。您可以通过固定随机生成器的种子来确保再现性。为此,取消下面一行的注释。
% rng (0)
根据环境观察和操作规范创建策略梯度代理。
agent = rlPGAgent(obsInfo,actInfo,initOpts);
从代理、演员和评论家中提取深度神经网络。
actorNet = getModel(getActor(agent));criticNet = getModel(getCritic(agent));
显示批评家网络的层,并验证每个隐藏的完全连接层有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]}
现在可以在环境中测试和训练代理。
从演员和基线评论家创建一个独立的PG代理
创建一个具有离散行动空间的环境,并获得其观察和行动规范。对于本例,加载示例中使用的环境用基线训练PG Agent控制双积分器系统.来自环境的观测是包含质量的位置和速度的矢量。作用是一个标量,表示施加在质量上的力,有三个可能的值(-)2
,0
,或2
牛顿)。
env = rlPredefinedEnv()“DoubleIntegrator-Discrete”);obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);
创建一个神经网络,用作基线批评中的近似模型。对于策略梯度代理,基线批评家估计一个值函数,因此它必须将观测信号作为输入并返回一个标量值。
baselinenetn = [featureInputLayer(prod(obsInfo.Dimension),…“归一化”,“没有”,“名字”,“状态”) fullyConnectedLayer (8,“名字”,“BaselineFC”) reluLayer (“名字”,“CriticRelu1”) fullyConnectedLayer (1,“名字”,“BaselineFC2”,…“BiasLearnRateFactor”, 0)];
创建一个评论作为基准。策略梯度代理使用anrlValueFunction
反对实施批评。
baseline = rlValueFunction(baselinenet,obsInfo);
为评论家设置一些培训选项。
baselineoptions = rlooptimizeroptions (…“LearnRate”, 5 e - 3,“GradientThreshold”1);
创建一个深度神经网络,用作actor内部的近似模型。对于策略梯度代理,参与者执行随机策略,对于离散动作空间,由离散分类参与者实现。在这种情况下,网络必须将观察信号作为输入,并返回每个动作的概率。因此,输出层的元素数量必须与可能的操作数量一样多。
actorNetwork = [featureInputLayer(prod(obsInfo.Dimension),…“归一化”,“没有”,“名字”,“状态”) fullyConnectedLayer(元素个数(actInfo.Elements),…“名字”,“行动”,“BiasLearnRateFactor”, 0)];
使用以下命令创建角色rlDiscreteCategoricalActor
,以及观察和行动规范。
actor = rlDiscreteCategoricalActor(actorNetwork,obsInfo,actInfo);
为演员设置一些训练选项。
actorOpts = rlooptimizeroptions (…“LearnRate”, 5 e - 3,“GradientThreshold”1);
指定代理选项。
agentOpts = rlPGAgentOptions(…“UseBaseline”,真的,…“DiscountFactor”, 0.99,…“CriticOptimizerOptions”baselineOpts,…“ActorOptimizerOptions”, actorOpts);
使用角色、评论家和代理选项对象创建PG代理。
agent = rlpagent (actor,baseline,agentOpts)
agent = rlPGAgent with properties: AgentOptions: [1x1 rl.option.]rlPGAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec] SampleTime: 1
要检查代理,请使用getAction
从随机观察返回动作。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1x1单元阵列{[2]}
现在可以在环境中测试和训练代理。
从演员和基线评论家创建一个连续PG代理
创造一个具有连续行动空间的环境,并获得其观察和行动规范。对于本例,加载示例中使用的双积分器连续动作空间环境训练DDPG代理控制双积分器系统.
env = rlPredefinedEnv()“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo(env)
obsInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf Name: "states" Description: "x, dx" Dimension: [21 1] DataType: "double"
actInfo = getActionInfo(env)
actInfo = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf Name: "force" Description: [0x0 string] Dimension: [1 1] DataType: "double"
在这个例子中,作用是一个标量输入,表示从-的力2
来2
,因此,设置动作信号的上下限是一个好主意。当行动者的网络有一个非线性输出层,需要相应地缩放以产生期望范围内的输出时,必须这样做。
actInfo.LowerLimit = 2;actInfo.UpperLimit = 2;
策略梯度代理使用一个值函数批评家作为基线。对于策略梯度代理,基线批评家估计一个值函数,因此它必须将观测信号作为输入并返回一个标量值。
baselinenetn = [featureInputLayer(prod(obsInfo.Dimension),…“归一化”,“没有”,“名字”,“状态”) fullyConnectedLayer (8,“名字”,“bFC1”) reluLayer (“名字”,“bRelu1”) fullyConnectedLayer (1,“名字”,“bFC2”,…“BiasLearnRateFactor”, 0)];
创建一个评论作为基准。策略梯度代理使用anrlValueFunction
反对实施批评。
baseline = rlValueFunction(baselinenet,obsInfo);
为评论家设置一些培训选项。
baselineoptions = rlooptimizeroptions (…“LearnRate”, 5 e - 3,“GradientThreshold”1);
创建一个深度神经网络,用作actor内部的近似模型。对于策略梯度代理,参与者执行随机策略,对于连续动作空间,参与者由连续高斯参与者实现。在这种情况下,网络必须将观测信号作为输入,并为每个动作返回平均值和标准差值。因此,它必须有两个输出层(一个用于平均值,另一个用于标准偏差值),每个层都有与动作空间维数相同的元素。
注意,标准偏差必须是非负的,平均值必须落在作用的范围内。因此,返回标准差的输出层必须是一个softplus或ReLU层,以强制非负性,而返回平均值的输出层必须是一个缩放层,以将平均值缩放到输出范围。
%输入路径层数(1 × 1输出)inPath = [featureInputLayer(prod(obsInfo.Dimension),…“归一化”,“没有”,“名字”,“状态”) fullyConnectedLayer (10“名字”,“ip_fc”) reluLayer (“名字”,“ip_relu”) fullyConnectedLayer (1,“名字”,“ip_out”));%平均路径层数(1 × 1输出)meanPath = [fulllyconnectedlayer (15;“名字”,“mp_fc1”) reluLayer (“名字”,“mp_relu”) fullyConnectedLayer (1,“名字”,“mp_fc2”);tanhLayer (“名字”,的双曲正切);%超出范围:-1,1scalingLayer (“名字”,“mp_out”,…“规模”actInfo.UpperLimit)];%取值范围:-2,2% STD路径层数(1 × 1输出)sdevPath = [fulllyconnectedlayer (15,“名字”,“vp_fc1”) reluLayer (“名字”,“vp_relu”) fullyConnectedLayer (1,“名字”,“vp_fc2”);softplusLayer (“名字”,“vp_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”,“vp_fc1 /”);%地块网络情节(actorNet)
使用以下命令创建角色rlContinuousGaussianActor
,连同…actorNet
,观察和动作规范,以及网络输入和输出层的名称。
actor = rlContinuousGaussianActor(actorNet)…obsInfo actInfo,…“ObservationInputNames”, {“状态”},…“ActionMeanOutputNames”, {“mp_out”},…“ActionStandardDeviationOutputNames”, {“vp_out”});
为演员设置一些训练选项。
actorOpts = rlooptimizeroptions (…“LearnRate”, 5 e - 3,“GradientThreshold”1);
指定代理选项,并使用参与者、基线和代理选项创建PG代理。
agentOpts = rlPGAgentOptions(…“UseBaseline”,真的,…“DiscountFactor”, 0.99,…“ActorOptimizerOptions”, actorOpts);agent = rlpagent (actor,baseline,agentOpts)
agent = rlPGAgent with properties: AgentOptions: [1x1 rl.option.]rlPGAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlNumericSpec] SampleTime: 1
要检查代理,请使用getAction从随机观察中返回操作。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1x1单元阵列{[0.0347]}
现在可以在环境中测试和训练代理。
用递归神经网络创建离散PG代理
对于本例,加载示例中使用的环境用基线训练PG Agent控制双积分器系统.来自环境的观测是包含质量的位置和速度的矢量。作用是一个标量,表示施加在质量上的力,有三个可能的值(- 2,0或2牛顿)。
env = rlPredefinedEnv()“DoubleIntegrator-Discrete”);
获取观察和规格信息。
obsInfo = getObservationInfo(env);actInfo = getActionInfo(env);
创建一个评论作为基准。对于策略梯度代理,基线批评家估计一个值函数,因此它必须将观测信号作为输入并返回一个标量值。要为评论家创建一个循环神经网络,使用sequenceInputLayer
作为输入层,并包含一个lstmLayer
作为其他网络层之一。
baselinenetn = [sequenceInputLayer(prod(obsInfo.Dimension),…“归一化”,“没有”,“名字”,“myobs”) fullyConnectedLayer (8,“名字”,“BaselineFC”) lstmLayer (8,“OutputMode”,“序列”,“名字”,“lstm”) reluLayer (“名字”,“CriticRelu1”) fullyConnectedLayer (1,“名字”,“BaselineFC2”,…“BiasLearnRateFactor”, 0)];
基于网络逼近器模型创建评论家。策略梯度代理使用anrlValueFunction
反对实施批评。
baseline = rlValueFunction(baselinenet,obsInfo);
为评论家设置一些培训选项。
baselineoptions = rlooptimizeroptions (…“LearnRate”, 5 e - 3,“GradientThreshold”1);
既然评论家有一个循环网络,那么演员也一定有一个循环网络。为行动者定义一个循环神经网络。对于策略梯度代理,参与者执行随机策略,对于离散动作空间,由离散分类参与者实现。在这种情况下,网络必须将观察信号作为输入,并返回每个动作的概率。因此,输出层的元素数量必须与可能的操作数量一样多。
actorNetwork = [sequenceInputLayer(prod(obsInfo.Dimension),…“归一化”,“没有”,“名字”,“myobs”) lstmLayer (8,“OutputMode”,“序列”,“名字”,“lstm”) fullyConnectedLayer(元素个数(actInfo.Elements),…“名字”,“行动”,“BiasLearnRateFactor”, 0)];
创建角色。策略梯度代理使用随机行为体,对于离散动作空间,随机行为体由rlDiscreteCategoricalActor
对象。
actor = rlDiscreteCategoricalActor(actorNetwork,…obsInfo actInfo,…“观察”, {“myobs”});
为演员设置一些训练选项。
actorOpts = rlooptimizeroptions (…“LearnRate”, 5 e - 3,“GradientThreshold”1);
指定代理选项,并使用角色和评论家创建PG代理。
agentOpts = rlPGAgentOptions(…“UseBaseline”,真的,…“DiscountFactor”, 0.99,…“CriticOptimizerOptions”baselineOpts,…“ActorOptimizerOptions”, actorOpts);agent = rlpagent (actor,baseline);
对于具有递归神经网络的PG智能体,训练序列长度为整集。
要检查代理,请使用getAction从随机观察中返回操作。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1x1单元阵列{[2]}
现在可以在环境中测试和训练代理。
提示
对于连续动作空间,
rlPGAgent
代理不执行操作规范设置的约束,因此必须在环境中执行操作空间约束。
版本历史
Abrir比如
Tiene una versión modificada de este ejemploo。是否对所有的修改进行了修改?
MATLAB编程
在MATLAB中,该函数对应于一个最基本的函数:
在MATLAB中,用MATLAB编写了仿真程序。Los navegadores web no admit commandos de MATLAB。
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。