主要内容

rlSACAgent

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

描述

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

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

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

创建

描述

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

例子

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

例子

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

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

例子

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

指定代理选项

代理= rlsacagent(___agentOptions设置AgentOptions属性为以前的任何语法。

输入参数

展开全部

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

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

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

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

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

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

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

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

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

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

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

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

属性

展开全部

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

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

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

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

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

  • 年代是采取行动后的下一次观察一个

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

对象的功能

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

例子

全部折叠

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

env = rlPredefinedEnv (“双凝集器连续”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

代理创建功能随机初始化演员和批评网络。您可以通过固定随机发生器的种子来确保再现性。为此,请取消关注以下行。

%rng(0)

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

代理= rlSACAgent (obsInfo actInfo);

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

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

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

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

env = rlPredefinedEnv (“双凝集器连续”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

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

Initopts = rlagentinitializationOptions('numhidandenit', 128);

代理创建功能随机初始化演员和批评网络。您可以通过固定随机发生器的种子来确保再现性。为此,请取消关注以下行。

%rng(0)

使用初始化选项创建来自环境观测和操作规范的SAC代理。

代理= rlSACAgent (obsInfo actInfo initOpts);

从演员提取深神经网络。

actorNet = getModel (getActor(代理));

从两个批评者中提取深神经网络。注意GetModel(批评者)只返回第一个批评网络。

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

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

criticNet1。层
ans = 10x1 Layer array with layers:1的concat串联连接2输入沿着维度1 2的relu_body ReLU ReLU 3“fc_body”完全连接128完全连接层4的body_output ReLU ReLU 5“input_1”功能输入2功能6 fc_1完全连接128完全连接层7“input_2”功能输入1功能8 fc_2完全连接128完全连接层9'output' Fully Connected 1 fully connected layer 10 'RepresentationLoss' Regression Output mean-squared-error

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

情节(actorNet)

绘图(批判网)

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

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

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

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

env = rlPredefinedEnv (“双凝集器连续”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

获得观察数和行动次数。

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

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

equenateppath1 = [featureInputLayer(numobs,'正常化'“没有”“名字”'观察') fullyConnectedLayer (400,“名字”“CriticStateFC1”) reluLayer (“名字”“CriticStateRelu1”) fullyConnectedLayer (300,“名字”“CriticStateFC2”));actionPath1 = [featureInputLayer(numAct,'正常化'“没有”“名字”“行动”) fullyConnectedLayer (300,“名字”'批评FC1'));commonPath1 =[附加图层(2,“名字”“添加”) reluLayer (“名字”'批判杂志') fullyConnectedLayer (1,“名字”“CriticOutput”));批评=图表图(attnalPath1);批评= addlayers(批评,actionpath1);批评= Addlayers(批评,CommonPath1);criticNet = connectLayers (criticNet,“CriticStateFC2”“添加/三机一体”);criticNet = connectLayers (criticNet,'批评FC1'“添加/ 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 = TallayGraph(attypath);Actornetwork = Addlayers(Actornetwork,意思);Actornetwork = Addlayers(Actornetwork,STDPath);ActornetWork = Addlayers(ActorNetwork,Concatpath);actorNetwork = connectLayers (actorNetwork,'commonrelu'“MeanFC1 /”);actorNetwork = connectLayers (actorNetwork,'commonrelu''stdfc1 /');actorNetwork = connectLayers (actorNetwork,'意思''高斯参数/ IN1');actorNetwork = connectLayers (actorNetwork,'standarddeviation''高斯参数/ 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 =1x1细胞阵列{[0.1259]}

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

介绍了R2019a