主要内容

rlACAgent

Actor-critic (AC)强化学习代理

自从R2019a

描述

Actor-critic (AC)代理实现Actor-critic算法如A2C和A3C,模范自由,在网上,在政策强化学习方法。actor-critic代理直接优化政策(演员),并使用一个评论家估计返回或未来的回报。可以是离散或连续的行动空间。连续操作空间,这个代理不强制约束集的操作规范;因此,如果您需要执行行动的限制,你必须这样做,内环境。

有关更多信息,请参见Actor-Critic (AC)代理。更多信息在不同类型的强化学习代理,看看强化学习代理

创建

描述

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

例子

代理= rlACAgent (observationInfo,actionInfo)创建一个actor-critic代理一个环境与给定的观察和操作规范,使用默认初始化选择。代理使用默认的演员兼评论家深层神经网络由观测规范observationInfo和操作规范actionInfo。的ObservationInfoActionInfo的属性代理是设置为observationInfoactionInfo分别输入参数。

例子

代理= rlACAgent (observationInfo,actionInfo,initOpts)创建一个actor-critic代理一个环境与给定的观察和操作规范。代理使用默认的网络中,每个隐藏完全连接层单位中指定的数量initOpts对象。Actor-critic代理不支持递归神经网络。万博1manbetx初始化选项的更多信息,请参阅rlAgentInitializationOptions

从演员兼评论家创建代理

例子

代理= rlACAgent (演员,评论家)创建一个actor-critic代理指定的演员和评论家,使用默认选项的代理。

指定代理选项

例子

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

输入参数

全部展开

代理初始化选项,指定为一个rlAgentInitializationOptions对象。Actor-critic代理不支持递归神经网络。万博1manbetx

演员实现政策,指定为一个rlDiscreteCategoricalActorrlContinuousGaussianActor函数近似者对象。创建演员接近者的更多信息,请参阅创建政策和价值功能

评论家估计折现长期回报,作为一个指定rlValueFunction对象。创建评论家合拢器的更多信息,请参阅创建政策和价值功能

属性

全部展开

观测规范,指定为一个rlFiniteSetSpecrlNumericSpec对象或数组包含一个混合的对象。数组中每个元素定义了一个环境观测通道的特性,比如尺寸,数据类型和名称。

如果您创建代理通过指定一个演员和评论家的价值ObservationInfo匹配指定的值在演员和批评的对象。

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

动作规范,要么作为一个指定rlFiniteSetSpec(离散行动空间)rlNumericSpec(连续动作空间)对象。这个对象定义环境行动通道的属性,如尺寸,数据类型和名称。

请注意

只有一个动作频道是被允许的。

如果您创建代理通过指定一个演员和评论家的价值ActionInfo匹配指定的值在演员和批评的对象。

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

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

选择使用探索政策选择行为时,指定为以下之一的逻辑值。

  • 真正的——使用基本代理探索政策选择行为时sim卡generatePolicyFunction。在这种情况下,代理人选择其行动抽样概率分布,因此,政策是随机和代理其观测太空探索。

  • 使用基本代理贪婪策略(行动与最大似然)在选择行动sim卡generatePolicyFunction。在这种情况下,模拟生成代理和政策行为的确定性。

请注意

此选项只影响仿真和部署;它不影响训练。

样本代理的时候,作为一个积极的标量或指定1。设置这个参数1支持基于事件的模拟。的价值SampleTime匹配指定的值AgentOptions

在一个模型万博1manbetx®环境中,RL代理块中执行每一个指定的代理SampleTime秒的仿真时间。如果SampleTime1块继承了样本时间从母公司子系统。

在MATLAB®环境中,代理执行每一次进步的环境。在这种情况下,SampleTime之间的时间间隔连续元素返回的输出的经验吗sim卡火车。如果SampleTime1之间的时间间隔连续元素返回的输出经验反映了事件触发代理执行的时机。

对象的功能

火车 强化学习培训代理在指定的环境中
sim卡 模拟训练强化学习代理在指定的环境中
getAction 从代理,获得动作演员,或政策对象环境的观察
getActor 从强化学习代理提取的演员
setActor 集演员强化学习代理
getCritic 从强化学习代理提取评论家
setCritic 评论家强化学习代理
generatePolicyFunction 生成MATLAB函数,评价代理人的政策或政策对象

例子

全部折叠

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

env = rlPredefinedEnv (“SimplePendulumWithImage-Discrete”);

获得观察和操作规范

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

代理创建函数初始化演员和评论家网络随机。确保修复种子再现性的随机发生器。

rng (0)

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

代理= rlACAgent (obsInfo actInfo);

检查您的代理,使用getAction返回随机观察的行动。

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

您现在可以测试和培训环境内的代理。您还可以使用getActorgetCritic分别提取演员和评论家getModel提取近似者模型(默认情况下深神经网络)的演员或评论家。

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

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

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

initOpts = rlAgentInitializationOptions (NumHiddenUnit = 128);

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

rng (0)

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

代理= rlACAgent (obsInfo actInfo initOpts);

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

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

验证每个隐藏完全连接层有128个神经元,可以显示层MATLAB®命令窗口,

criticNet.Layers

或可视化结构交互使用analyzeNetwork

analyzeNetwork (criticNet)

情节演员和评论家网络

情节(layerGraph (actorNet))

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

情节(layerGraph (criticNet))

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

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

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

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

创造一个环境,一个离散的操作空间和获得其观察和操作规范。对于这个示例,负载在示例中使用的环境火车DQN代理Cart-Pole平衡系统。这个环境中有一个四维的观测向量(车的位置和速度、极角和极角导数),和一个标量行动有两种可能的元素(-10或+ 10 N的力应用于购物车)。

env = rlPredefinedEnv (“CartPole-Discrete”);

获得观察和操作规范。

obsInfo = getObservationInfo (env)
obsInfo = rlNumericSpec属性:LowerLimit:无穷UpperLimit:正的名字:“CartPole国家”描述:“x, dx,θ,dtheta”维度:[4 1]数据类型:“替身”
actInfo = getActionInfo (env)
actInfo = rlFiniteSetSpec属性:元素:-10[10]的名字:“CartPole行动”描述:[0 x0字符串]维度:[1]数据类型:“替身”

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

rng (0)

Actor-critic代理使用一个参数化的值函数近似者估计价值的政策。值函数批评以当前观测作为输入并返回一个标量输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。

在评论家,模型参数化的值函数使用一个输入神经网络层(接收观测通道的内容,按照奥林匹克广播服务公司信息)和一个输出层(返回标量值)。请注意,刺激(obsInfo.Dimension)返回总数的维度观察空间无论观察空间是一个列向量,行向量或矩阵。

层对象的网络定义为一个数组,并获得观测空间的维数从环境规范的对象。

criticNet = [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (50) reluLayer fullyConnectedLayer (1)];

网络转换为一个dlnetwork对象,并显示权重的数量。

criticNet = dlnetwork (criticNet);总结(criticNet)
初始化:可学的真正的数字:301输入:1“输入”4特性

创建评论家接近者对象使用criticNet并观察规范。价值函数近似者的更多信息,请参阅rlValueFunction

评论家= rlValueFunction (criticNet obsInfo);

检查你的批评与随机观测输入。

getValue(评论家,{兰德(obsInfo.Dimension)})
ans =-0.1411

Actor-critic代理使用参数化随机策略,对离散行动空间由一个离散实现分类的演员。这演员需要一个观察作为输入并返回输出随机行动采样(在有限数量的可能的行动)从分类概率分布。

模型中的参数化政策的演员,使用一个输入神经网络层(接收观测通道的内容,规定obsInfo)和一个输出层。输出层必须返回一个向量的概率为每个可能的行动,是指定的actInfo。请注意,元素个数(actInfo.Dimension)返回的元素数量的离散动作空间。

层的网络定义为一个数组对象。

actorNet = [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (16) reluLayer fullyConnectedLayer (16) reluLayer fullyConnectedLayer(元素个数(actInfo.Dimension)));

网络转换为一个dlnetwork对象,并显示权重的数量。

actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:可学的真正的数字:386输入:1“输入”4特性

创建一个演员使用actorNet和观察和操作规范。离散分类演员的更多信息,请参阅rlDiscreteCategoricalActor

演员= rlDiscreteCategoricalActor (actorNet obsInfo actInfo);

检查你的演员与一个随机观测输入。

getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[10]}

创建交流代理使用演员和评论家。

代理= rlACAgent(演员,评论家)
代理= rlACAgent属性:AgentOptions: [1 x1 rl.option。rlACAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec] SampleTime: 1

为代理指定一些选项,包括演员培训选项和评论家。

agent.AgentOptions.NumStepsToLookAhead = 32;agent.AgentOptions.DiscountFactor = 0.99;agent.AgentOptions.CriticOptimizerOptions.LearnRate = 8 e - 3;agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1;agent.AgentOptions.ActorOptimizerOptions.LearnRate = 8 e - 3;agent.AgentOptions.ActorOptimizerOptions.GradientThreshold = 1;

检查你的代理和一个随机观察。

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

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

创造一个环境,一个持续的行动空间,获得其观察和操作规范。对于这个示例,加载双积分器连续行动空间环境中使用的例子火车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;

演员和评论家网络随机初始化。可以通过修复确保再现性的种子随机发生器。

rng (0)

Actor-critic代理使用一个参数化的值函数近似者估计价值的政策。值函数批评以当前观测作为输入并返回一个标量输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。

在评论家,模型参数化的值函数使用一个输入神经网络层(接收观测通道的内容,按照奥林匹克广播服务公司信息)和一个输出层(返回标量值)。请注意,刺激(obsInfo.Dimension)返回总数的维度观察空间无论观察空间是一个列向量,行向量或矩阵。

层的网络定义为一个数组对象。

criticNet = [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (50) reluLayer fullyConnectedLayer (1)];

网络转换为一个dlnetwork对象和显示权重的数量。

criticNet = dlnetwork (criticNet);总结(criticNet)
初始化:可学的真正的数字:201输入:1“输入”2的特性

创建评论家接近者对象使用criticNet并观察规范。价值函数近似者的更多信息,请参阅rlValueFunction

评论家= rlValueFunction (criticNet obsInfo);

检查你的批评与随机输入的观察。

getValue(评论家,{兰德(obsInfo.Dimension)})
ans =-0.0969

Actor-critic代理使用参数化随机策略,连续动作空间由一个连续实现高斯的演员。这演员需要一个观察作为输入并返回输出随机行动从高斯概率分布采样。

近似高斯分布的平均值和标准偏差,您必须使用神经网络和两个输出层,每一个拥有尽可能多的元素行为空间的维数。一个输出层必须返回一个向量包含每个行动维度的平均值。另一个必须返回向量包含每个行动维度的标准差。

注意,必须负的值和均值标准差必须在范围之内的所有行动。因此输出层返回必须softplus或标准差ReLU层,执行nonnegativity,而输出层返回平均值必须扩展层,按比例输出范围的平均值。

对于这个示例环境只有一个观测通道,因此网络只有一个输入层。

定义每个网络路径层对象数组,并将名称分配给每条路径的输入和输出层。这些名字让你连接路径,然后明确关联网络的输入和输出通道层与适当的环境。

%的输入路径inPath = [featureInputLayer (prod (obsInfo.Dimension),名称=“netObsIn”)fullyConnectedLayer (prod (actInfo.Dimension),名称=“infc”));%值路径meanPath = [tanhLayer (Name =“tanhMean”);fullyConnectedLayer (50) reluLayer fullyConnectedLayer(刺激(actInfo.Dimension));scalingLayer (Name =“netMout”,规模= actInfo.UpperLimit)%比例范围];%标准差路径sdevPath = [tanhLayer (Name =“tanhStdv”);fullyConnectedLayer (50) reluLayer fullyConnectedLayer(刺激(actInfo.Dimension));softplusLayer (Name =“netSDout”)%非负];%添加层网络对象actorNet = layerGraph;actorNet = addLayers (actorNet inPath);actorNet = addLayers (actorNet meanPath);actorNet = addLayers (actorNet sdevPath);%连接层actorNet = connectLayers (actorNet,“infc”,“tanhMean /”);actorNet = connectLayers (actorNet,“infc”,“tanhStdv /”);%的阴谋网络情节(actorNet)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

网络转换为一个dlnetwork对象和显示可学的参数的数量(重量)。

actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:可学的真正的数字:305输入:1“netObsIn”2的特性

创建角色接近者对象使用actorNet和环境规范。更多的信息,在连续高斯演员,看到rlContinuousGaussianActor

演员= rlContinuousGaussianActor (actorNet obsInfo actInfo,ActionMeanOutputNames =“netMout”,ActionStandardDeviationOutputNames =“netSDout”,ObservationInputNames =“netObsIn”);

检查你的演员与一个随机输入的观察。

getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[-1.2332]}

创建交流代理使用演员和评论家。

代理= rlACAgent(演员,评论家)
代理= rlACAgent属性:AgentOptions: [1 x1 rl.option。rlACAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlNumericSpec] SampleTime: 1

指定代理选项,包括培训选择演员和评论家。

agent.AgentOptions。NumStepsToLookAhead = 32;agent.AgentOptions.DiscountFactor = 0.99;agent.AgentOptions.CriticOptimizerOptions.LearnRate = 8 e - 3;agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1;agent.AgentOptions.ActorOptimizerOptions.LearnRate = 8 e - 3;agent.AgentOptions.ActorOptimizerOptions.GradientThreshold = 1;

检查你的代理使用一个随机输入的观察。

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

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

对于这个示例加载用于预定义的环境火车DQN代理Cart-Pole平衡系统的例子。这个环境中有一个四维的观测向量(车的位置和速度、极角和极角导数),和一个标量行动有两种可能的元素(-10或+ 10 N的力应用于购物车)。

env = rlPredefinedEnv (“CartPole-Discrete”);

获得观察和操作信息。

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

代理创建函数初始化演员和评论家网络随机。确保修复种子再现性的随机发生器。

rng (0)

在评论家,模型参数化的值函数使用递归神经网络,它必须有一个输入层(接收观测通道的内容,按照奥林匹克广播服务公司信息)和一个输出层(返回标量值)。

层的网络定义为一个数组对象。创建一个周期性网络,使用sequenceInputLayer作为输入层,包括至少一个lstmLayer

criticNet = [sequenceInputLayer (prod (obsInfo.Dimension)) lstmLayer (10) reluLayer fullyConnectedLayer (1)];

网络转换为一个dlnetwork对象和显示可学的参数的数量(重量)。

criticNet = dlnetwork (criticNet);总结(criticNet)
初始化:可学的真正的数字:611输入:1“sequenceinput”序列输入4维度

创建评论家接近者对象使用criticNet并观察规范。价值函数近似者的更多信息,请参阅rlValueFunction

评论家= rlValueFunction (criticNet obsInfo);

检查随机输入的评论家观察。

getValue(评论家,{兰德(obsInfo.Dimension)})
ans =-0.0344

评论家有复发性网络以来,(离散分类)演员也必须使用复发性网络。网络必须具有一个输入层(接收环境观察的内容频道,是指定的obsInfo)和一个输出层(必须返回一个向量的概率为每个可能的行动,是指定的actInfo)。

定义周期性网络层对象数组。

actorNet = [sequenceInputLayer (prod (obsInfo.Dimension)) lstmLayer (20) reluLayer fullyConnectedLayer(元素个数(actInfo.Elements)));

网络转换为一个dlnetwork对象和显示权重的数量。

actorNet = dlnetwork (actorNet);总结(actorNet)
初始化:可学的真正的数量:2 k输入:1“sequenceinput”序列输入4维度

创建一个演员使用actorNet和观察和操作规范。离散分类演员的更多信息,请参阅rlDiscreteCategoricalActor

演员= rlDiscreteCategoricalActor (actorNet obsInfo actInfo);

检查演员与一个随机输入的观察。

getAction(演员,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[10]}

设置一些评论家培训选项。

criticOpts = rlOptimizerOptions (LearnRate = 8 e - 3, GradientThreshold = 1);

设置一些演员培训选项。

actorOpts = rlOptimizerOptions (LearnRate = 8 e - 3, GradientThreshold = 1);

为代理指定训练选项,包括actorOptscriticOpts。由于代理使用递归神经网络,NumStepsToLookAhead被视为训练轨迹长度。

agentOpts = rlACAgentOptions (NumStepsToLookAhead = 32,DiscountFactor = 0.99,CriticOptimizerOptions = criticOpts,ActorOptimizerOptions = actorOpts);

创建一个AC代理使用演员,评论家,和代理的选择对象。

代理= rlACAgent(演员、评论家、agentOpts)
代理= rlACAgent属性:AgentOptions: [1 x1 rl.option。rlACAgentOptions] UseExplorationPolicy: 1 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec] SampleTime: 1

检查你的代理,还从随机观察行动。

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

评估代理使用连续的观测,使用序列长度(时间)维度。例如,获得一系列的行动9观察。

(行动、州)= getAction(代理,{兰德([obsInfo。尺寸1 9])});

显示相对应的行动第七元素的观察。

action ={1}行动;行动(1,1,1,7)
ans = -10

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

训练使用异步代理优势actor-critic (A3C)方法,你必须适当地设置代理和并行训练选项。

当创建交流代理设置NumStepsToLookAhead值要大于1。共同的价值观是64年128年

agentOpts = rlACAgentOptions (NumStepsToLookAhead = 64);

使用agentOpts当创建你的代理。另外,创建您的代理,然后修改它的选项,包括演员和评论家选项后使用点符号。

配置培训使用异步并行算法。

trainOpts = rlTrainingOptions (UseParallel = true);trainOpts.ParallelizationOptions。模式=“异步”;

配置工人梯度数据返回给主机。同时,之前设置的步骤工人回到主机发送数据匹配步骤向前看的数量。

trainOpts.ParallelizationOptions。DataToSendFromWorkers =“梯度”;trainOpts.ParallelizationOptions。StepsUntilDataIsSent =agentOpts.NumStepsToLookAhead;

使用trainOpts当训练你的代理。

例如异步优势actor-critic代理培训,明白了列车空调代理使用并行计算平衡Cart-Pole系统

提示

  • 连续操作空间,rlACAgent对象不执行规定的约束行动规范,所以您必须执行行动空间中约束环境。

版本历史

介绍了R2019a