主要内容

rlSACAgent

软演员-评论家强化学习代理

描述

软行为者-批评(SAC)算法是一种无模型、在线、非政策的行为者-批评强化学习方法。SAC算法计算一个最优策略,使长期预期回报和策略的熵最大化。政策熵是给定状态下政策不确定性的度量。更高的熵值促进更多的探索。奖励和熵的最大化平衡了对环境的探索和开发。动作空间只能是连续的。

有关更多信息,请参见软Actor-Critic代理

有关不同类型的强化学习代理的更多信息,请参见强化学习代理

创建

描述

从观察和操作规范中创建代理

例子

代理= rlSACAgent (observationInfoactionInfo使用默认初始化选项,为具有给定观察和操作规范的环境创建SAC代理。代理中的行动者和批评者使用默认的深度神经网络,这些神经网络是使用观察规范建立的observationInfo和行为规范actionInfo

例子

代理= rlSACAgent (observationInfoactionInfoinitOptions使用指定的初始化选项创建具有深度神经网络表示的SAC代理(initOptions).

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

例子

代理= rlSACAgent (演员批评人士使用指定的演员和评论家网络以及默认代理选项创建SAC代理。

指定代理选项

代理= rlSACAgent (___agentOptions设置AgentOptions属性用于前面的任何语法。

输入参数

全部展开

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

您可以提取observationInfo从现有环境或代理使用getObservationInfo.您还可以使用以下方法手工构造规范rlFiniteSetSpecrlNumericSpec

连续动作空间的动作规范,指定为rlNumericSpec对象定义属性,如维度、数据类型和动作信号的名称。

您可以提取actionInfo从现有环境或代理使用getActionInfo.您还可以使用rlFiniteSetSpecrlNumericSpec

表示初始化选项,指定为rlAgentInitializationOptions对象。

角色网络表示,指定为rlStochasticActorRepresentation对象。

有关创建角色表示的更多信息,请参见创建策略和价值功能表示

批评家网络表示,指定为下列之一:

  • rlQValueRepresentationobject -创建一个具有单个q值函数的SAC代理。

  • 两个元素的行向量rlQValueRepresentationobjects—创建一个具有两个批判值函数的SAC代理。这两个评论网络必须是独一无二的rlQValueRepresentation具有相同观察和动作规范的对象。表示形式可以具有不同的结构,也可以具有相同的结构但具有不同的初始参数。

对于SAC代理,每个评论家必须是一个单一输出rlQValueRepresentation对象,该对象将操作和观察结果作为输入。

有关创建评论家表示的更多信息,请参见创建策略和价值功能表示

属性

全部展开

代理选项,指定为rlSACAgentOptions对象。

如果您创建一个SAC代理,其默认参与者和批评者表示使用递归神经网络,则默认值为AgentOptions。年代equenceLength32

经验缓冲区,指定为ExperienceBuffer对象。在培训期间,代理存储它的每个经验(年代一个R年代)在缓冲中。在这里:

  • 年代是对当前环境的观察。

  • 一个是代理所采取的行动。

  • R是对行动的奖励吗一个

  • 年代下一步观察是在采取行动之后吗一个

有关代理样本在训练期间如何从缓冲区获得经验的更多信息,请参见软Actor-Critic代理

对象的功能

火车 在指定的环境中训练强化学习代理
sim卡 在指定的环境中模拟训练过的强化学习代理
getAction 根据环境观察,从行为者或行动者的表现中获得行动
getActor 从强化学习代理中获得角色表示
setActor 设置强化学习主体的主体表示
getCritic 从强化学习代理获得批判表示
setCritic 集合强化学习代理的批判表示
generatePolicyFunction 创建评估强化学习代理的训练策略的函数

例子

全部折叠

创造环境并获得观察和行动规范。对于本示例,请加载示例中使用的环境培训DDPG Agent控制双积分系统.从环境中观察到的是一个包含质量的位置和速度的矢量。作用是一个标量,表示作用于物体上的力,从-开始连续变化22牛顿。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

代理创建函数随机初始化参与者和批评者网络。您可以通过固定随机生成器的种子来确保重现性。为此,取消下面一行的注释。

% rng (0)

从环境观察和行动规范创建一个SAC代理。

代理= rlSACAgent (obsInfo actInfo);

要检查你的代理,使用getAction从随机观察中返回动作。

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

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

创造一个具有连续动作空间的环境,并获得其观察和动作规范。对于本示例,请加载示例中使用的环境培训DDPG Agent控制双积分系统.从环境中观察到的是一个包含质量的位置和速度的矢量。作用是一个标量,表示作用于物体上的力,从-开始连续变化22牛顿。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

创建一个agent初始化选项对象,指定网络中每个隐藏的全连接层必须有128个神经元。

initOpts = rlAgentInitializationOptions (“NumHiddenUnit”, 128);

代理创建函数随机初始化参与者和批评者网络。您可以通过固定随机生成器的种子来确保重现性。为此,取消下面一行的注释。

% rng (0)

使用初始化选项从环境观察和操作规范创建SAC代理。

代理= rlSACAgent (obsInfo actInfo initOpts);

从actor中提取深度神经网络。

actorNet = getModel (getActor(代理));

从这两位评论家身上提取深层神经网络。请注意,getModel(批评)只返回第一个批评家网络。

批评者= getCritic(代理);criticNet1 = getModel(批评者(1));criticNet2 = getModel(批评者(2));

显示第一批判网络的各层,并验证每个隐藏的全连接层有128个神经元。

criticNet1。层
ans = 9x1图层数组1“input_1”功能输入2功能2 fc_1完全连接128完全连接第三层“input_2”功能输入1功能4“fc_2”完全连接128完全连接层的concat串联连接2输入沿着维度1 6的relu_body ReLU ReLU 7“fc_body”完全连接128完全连接层8 ' body_output ReLU ReLU 9'output' Fully Connected 1 fully connected layer

画出演员和第二个评论家的关系网。

情节(layerGraph (actorNet))

图中包含一个轴对象。axis对象包含一个graphplot类型的对象。

情节(layerGraph (criticNet2))

图中包含一个轴对象。axis对象包含一个graphplot类型的对象。

要检查你的代理,使用getAction从随机观察中返回动作。

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

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

创造一个环境,并获得观察和行动规范。对于本示例,请加载示例中使用的环境培训DDPG Agent控制双积分系统.从环境中观察到的是一个包含质量的位置和速度的矢量。作用是一个标量,表示作用于物体上的力,从-开始连续变化22牛顿。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

获得观察次数和行动次数。

numObs = obsInfo.Dimension (1);numAct =元素个数(actInfo);

创建两个q值批评家表示。首先,建立批判深度神经网络结构。

statePath1 = [featureInputLayer(numObs,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (400,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticStateRelu1”) fullyConnectedLayer (300,“名字”“CriticStateFC2”));actionPath1 = [featureInputLayer(numAct,“归一化”“没有”“名字”“行动”) fullyConnectedLayer (300,“名字”“CriticActionFC1”));commonPath1 =[附加图层(2,“名字”“添加”) reluLayer (“名字”“CriticCommonRelu1”) fullyConnectedLayer (1,“名字”“CriticOutput”));criticNet = layerGraph (statePath1);criticNet = addLayers (criticNet actionPath1);criticNet = addLayers (criticNet commonPath1);criticNet = connectLayers (criticNet,“CriticStateFC2”“添加/三机一体”);criticNet = connectLayers (criticNet,“CriticActionFC1”“添加/ in2”);

创建批评家表示。对两个批评者使用相同的网络结构。SAC代理使用不同的默认参数初始化两个网络。

criticOptions = rlRepresentationOptions (“优化”“亚当”“LearnRate”1 e - 3,...“GradientThreshold”, 1“L2RegularizationFactor”2的军医);摘要= rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”, {“观察”},“行动”, {“行动”}, criticOptions);critic2 = rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”, {“观察”},“行动”, {“行动”}, criticOptions);

创建一个参与者深度神经网络。不要添加tanhLayerscalingLayer在平均输出路径中。SAC智能体内部将无界高斯分布转化为有界分布,合理计算概率密度函数和熵。

statePath = [featureInputLayer(numObs,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (400,“名字”“commonFC1”) reluLayer (“名字”“CommonRelu”));meanPath = [fulllyconnectedlayer (300,“名字”“MeanFC1”) reluLayer (“名字”“MeanRelu”) fullyConnectedLayer (numAct“名字”“的意思是”));stdPath = [fulllyconnectedlayer (300,“名字”“StdFC1”) reluLayer (“名字”“StdRelu”) fullyConnectedLayer (numAct“名字”“StdFC2”) softplusLayer (“名字”“StandardDeviation”));concatPath = concatenationLayer(1、2、“名字”“GaussianParameters”);actorNetwork = layerGraph (statePath);actorNetwork = addLayers (actorNetwork meanPath);actorNetwork = addLayers (actorNetwork stdPath);actorNetwork = addLayers (actorNetwork concatPath);actorNetwork = connectLayers (actorNetwork,“CommonRelu”“MeanFC1 /”);actorNetwork = connectLayers (actorNetwork,“CommonRelu”“StdFC1 /”);actorNetwork = connectLayers (actorNetwork,“的意思是”“GaussianParameters /三机一体”);actorNetwork = connectLayers (actorNetwork,“StandardDeviation”“GaussianParameters / in2”);

使用深度神经网络创建随机参与者表示。

actorOptions = rlRepresentationOptions (“优化”“亚当”“LearnRate”1 e - 3,...“GradientThreshold”, 1“L2RegularizationFactor”1 e-5);演员= rlStochasticActorRepresentation (actorNetwork obsInfo、actInfo actorOptions,...“观察”, {“观察”});

指定代理选项。

agentOptions = rlSACAgentOptions;agentOptions。年代ampleTime = env.Ts; agentOptions.DiscountFactor = 0.99; agentOptions.TargetSmoothFactor = 1e-3; agentOptions.ExperienceBufferLength = 1e6; agentOptions.MiniBatchSize = 32;

使用演员、评论家和选项创建SAC特工。

agent = rlSACAgent(actor,[critic1 critic2],agentOptions);

要检查你的代理,使用getAction从随机观察中返回动作。

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

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

对于本示例,请加载示例中使用的环境培训DDPG Agent控制双积分系统.从环境中观察到的是一个包含质量的位置和速度的矢量。作用是一个标量,表示作用于物体上的力,从-开始连续变化22牛顿。

env = rlPredefinedEnv (“DoubleIntegrator-Continuous”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

获得观察次数和行动次数。

numObs = obsInfo.Dimension (1);numAct =元素个数(actInfo);

创建两个q值批评家表示。首先,建立批判深度神经网络结构。要创建递归神经网络,请使用sequenceInputLayer作为输入层,并包含lstmLayer作为其他网络层之一。

statePath1 = [sequenceInputLayer(nummobs,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (400,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticStateRelu1”) fullyConnectedLayer (300,“名字”“CriticStateFC2”));actionPath1 = [sequenceInputLayer(numAct,“归一化”“没有”“名字”“行动”) fullyConnectedLayer (300,“名字”“CriticActionFC1”));commonPath1 =[附加图层(2,“名字”“添加”) lstmLayer (8,“OutputMode”“序列”“名字”“lstm”) reluLayer (“名字”“CriticCommonRelu1”) fullyConnectedLayer (1,“名字”“CriticOutput”));criticNet = layerGraph (statePath1);criticNet = addLayers (criticNet actionPath1);criticNet = addLayers (criticNet commonPath1);criticNet = connectLayers (criticNet,“CriticStateFC2”“添加/三机一体”);criticNet = connectLayers (criticNet,“CriticActionFC1”“添加/ in2”);

创建批评家表示。对两个批评者使用相同的网络结构。SAC代理使用不同的默认参数初始化两个网络。

criticOptions = rlRepresentationOptions (“优化”“亚当”“LearnRate”1 e - 3,...“GradientThreshold”, 1“L2RegularizationFactor”2的军医);摘要= rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”, {“观察”},“行动”, {“行动”}, criticOptions);critic2 = rlQValueRepresentation (criticNet obsInfo actInfo,...“观察”, {“观察”},“行动”, {“行动”}, criticOptions);

创建一个参与者深度神经网络。既然评论家有一个循环网络,那么演员也必须有一个循环网络。不要添加tanhLayerscalingLayer在平均输出路径中。SAC智能体内部将无界高斯分布转化为有界分布,合理计算概率密度函数和熵。

statePath = [sequenceInputLayer(nummobs,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (400,“名字”“commonFC1”) lstmLayer (8,“OutputMode”“序列”“名字”“lstm”) reluLayer (“名字”“CommonRelu”));meanPath = [fulllyconnectedlayer (300,“名字”“MeanFC1”) reluLayer (“名字”“MeanRelu”) fullyConnectedLayer (numAct“名字”“的意思是”));stdPath = [fulllyconnectedlayer (300,“名字”“StdFC1”) reluLayer (“名字”“StdRelu”) fullyConnectedLayer (numAct“名字”“StdFC2”) softplusLayer (“名字”“StandardDeviation”));concatPath = concatenationLayer(1、2、“名字”“GaussianParameters”);actorNetwork = layerGraph (statePath);actorNetwork = addLayers (actorNetwork meanPath);actorNetwork = addLayers (actorNetwork stdPath);actorNetwork = addLayers (actorNetwork concatPath);actorNetwork = connectLayers (actorNetwork,“CommonRelu”“MeanFC1 /”);actorNetwork = connectLayers (actorNetwork,“CommonRelu”“StdFC1 /”);actorNetwork = connectLayers (actorNetwork,“的意思是”“GaussianParameters /三机一体”);actorNetwork = connectLayers (actorNetwork,“StandardDeviation”“GaussianParameters / in2”);

使用深度神经网络创建随机参与者表示。

actorOptions = rlRepresentationOptions (“优化”“亚当”“LearnRate”1 e - 3,...“GradientThreshold”, 1“L2RegularizationFactor”1 e-5);演员= rlStochasticActorRepresentation (actorNetwork obsInfo、actInfo actorOptions,...“观察”, {“观察”});

指定代理选项。要使用递归神经网络,必须指定SequenceLength大于1。

agentOptions = rlSACAgentOptions;agentOptions。年代ampleTime = env.Ts; agentOptions.DiscountFactor = 0.99; agentOptions.TargetSmoothFactor = 1e-3; agentOptions.ExperienceBufferLength = 1e6; agentOptions.SequenceLength = 32; agentOptions.MiniBatchSize = 32;

使用演员、评论家和选项创建SAC特工。

agent = rlSACAgent(actor,[critic1 critic2],agentOptions);

要检查你的代理,使用getAction从随机观察中返回动作。

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

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

介绍了R2020b