主要内容

rlSACAgent

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

描述

软演员 - 评论家(SAC)算法是一种无型号,在线,违规政策演员 - 批评批评学习方法。SAC算法计算了最佳策略,最大化了长期预期奖励和策略的熵。政策熵是鉴于国家的政策不确定性的衡量标准。更高的熵值促进了更多的探索。最大化奖励和熵余额的探索和利用环境。动作空间只能是连续的。

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

有关不同类型的强化学习代理商的更多信息,请参阅加固学习代理人

创建

描述

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

例子

代理人= rlsacagent(观察税收,ActionInfo.)使用默认初始化选项,为具有给定观察和操作规范的环境创建一个SAC代理。代理中的行动者和评论家表示使用使用观察规范建立的默认深度神经网络观察税收和行为规范ActionInfo.

例子

代理人= rlsacagent(观察税收,ActionInfo.,initoptions.)使用指定的初始化选项(initoptions.)。

从演员和批评者表示创建代理商

例子

代理人= rlsacagent(演员,批评者)使用指定的演员和批评网络和默认代理选项创建SAC代理。

指定代理选项

代理人= rlsacagent(___,agentOptions)设置代理选项属性用于以前的任何语法。

输入参数

展开全部

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

您可以提取观察税收从现有环境或代理使用getobservationInfo.。您还可以使用手动构造规范rlfinitesetspec.或者rlNumericSpec

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

您可以提取ActionInfo.从现有环境或代理使用getActionInfo.。您还可以使用rlfinitesetspec.或者rlNumericSpec

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

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

有关创建演员表示的更多信息,请参阅创建策略和值函数表示

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

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

  • 两个元素行矢量rlqvalueerepresentation对象—创建一个具有两个临界值函数的SAC代理。这两家评论家网络必须是独一无二的rlqvalueerepresentation具有相同观察和行动规范的对象。表示可以具有不同的结构或相同的结构,但具有不同的初始参数。

对于SAC代理,每个评论家必须是单个输出rlqvalueerepresentation将操作和观察的对象作为输入。

有关创建评论表示的更多信息,请参见创建策略和值函数表示

特性

展开全部

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

如果您创建一个具有使用循环神经网络的默认参与者和评论家表示的SAC代理,则默认值AgentOptions.SequencElength.32.

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

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

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

  • R行动的回报是什么一个

  • S'采取行动后的下一次观察一个

有关代理样本如何在培训期间从缓冲区体验的更多信息,请参阅软Actor-Critic代理

对象的功能

火车 在指定的环境中训练强化学习代理
sim卡 在指定环境中模拟培训的钢筋学习代理
努力 在给定的环境观测中,从agent或actor表示中获得动作
getActor 获取钢筋学习代理人的演员代表
setActor 设置钢筋学习代理的演员代表
透镜 获取钢筋学习代理人的批评奖学金
setCritic 设定批评批评学习代理的代表
生成policyfunction. 创建评估培训的强化学习代理策略的功能

例子

全部收缩

创建环境并获取观察和行动规范。对于此示例,请加载示例中使用的环境训练DDPG代理控制双集成商系统。从环境中观察是含有质量的位置和速度的载体。该动作是代表一种力的标量,从而连续地测量 -22牛顿。

env = rlPredefinedEnv (“双凝胶组连续”);ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(Env);

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

%rng(0)

从环境观测和行动规范中创建SAC代理。

代理= rlsacagent(Obsinfo,Actinfo);

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

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

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

创建具有连续动作空间的环境,并获得其观察和操作规范。对于此示例,请加载示例中使用的环境训练DDPG代理控制双集成商系统。从环境中观察是含有质量的位置和速度的载体。该动作是代表一种力的标量,从而连续地测量 -22牛顿。

env = rlPredefinedEnv (“双凝胶组连续”);ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(Env);

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

Initopts = rlagentinitializationOptions('numhidendentunit', 128);

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

%rng(0)

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

代理= rlSACAgent (obsInfo actInfo initOpts);

从演员中提取深神经网络。

ActORNET = GetModel(GetAttor(代理));

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

批评者=克理克里数据(代理人);批评= getmodel(批评者(1));批评= GetModel(批评者(2));

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

criticNet1。层
包含层的层数组: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)

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

绘图(批判网)

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

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

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

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

创建环境并获得观察和行动规范。对于此示例,请加载示例中使用的环境训练DDPG代理控制双集成商系统。来自环境的观察是载体含有质量的位置和速度。该动作是代表一种力的标量,从而连续地测量 -22牛顿。

env = rlPredefinedEnv (“双凝胶组连续”);ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(Env);

获得观察数和行动次数。

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

创建两个Q值批评者表示。首先,创造一个评论家深度神经网络结构。

equenatepath1 = [featurenputlayer(numobs,'正常化',“没有”,“名字”,'观察')全连接列(400,“名字”,'批评福尔福克') reluLayer (“名字”,'批评者)全连接层(300,“名字”,'批评福尔2'));actionPath1 = [featureInputLayer(numAct,'正常化',“没有”,“名字”,“行动”)全连接层(300,“名字”,'批评FC1'));commonPath1 = [addtionlayer (2,“名字”,'添加') reluLayer (“名字”,'批判杂志')全康连接层(1,“名字”,'批评'));批评=图表图(attnatpath1);批评= addlayers(批评,actionpath1);批评= AddLayers(批评,CommonPath1);批评= ConnectLayers(批评者,'批评福尔2','添加/ in1');批评= ConnectLayers(批评者,'批评FC1','添加/ in2');

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

QuandOptions = rlrepresentationOptions('优化器','亚当',“LearnRate”,1e-3,......“GradientThreshold”,1,'l2regularizationfactor',2e-4);批评1 = rlqvalueerepresentation(批评,Obsinfo,Actinfo,......'观察',{'观察'},'行动',{“行动”},批评);批评2 = rlqvaluerepresentation(批评,obsinfo,actinfo,......'观察',{'观察'},'行动',{“行动”},批评);

创建一个演员深神经网络。不要添加一个tanhLayer或者scalinglayer.在平均输出路径中。SAC代理内部将无界高斯分布转换为有界分布,以合理计算概率密度函数和熵。

statePath = [featureInputLayer(numObs,'正常化',“没有”,“名字”,'观察')全连接列(400,“名字”,'commonfc1') reluLayer (“名字”,'commonrelu')];vilinpath = [全连接列(300,“名字”,'manfc1') reluLayer (“名字”,“MeanRelu”)全连接层(数量,“名字”,'吝啬的'));stdpath = [全连接列(300,“名字”,'stdfc1') reluLayer (“名字”,'stdrelu')全连接层(数量,“名字”,'stdfc2') softplusLayer (“名字”,'standarddeviation')];concatpath = concatenationlayer(1,2,“名字”,'高斯参数');Actornetwork = TallayGraph(attypath);Actornetwork = Addlayers(ActorNetwork,意思);Actornetwork = Addlayers(ActorNetwork,STDPath);Actornetwork = Addlayers(ActorNetwork,Concatpath);ActorNetWork = ConnectLayers(ActorNetWork,'commonrelu','vishfc1 /');ActorNetWork = ConnectLayers(ActorNetWork,'commonrelu','stdfc1 /');ActorNetWork = ConnectLayers(ActorNetWork,'吝啬的','高斯参数/ in1');ActorNetWork = ConnectLayers(ActorNetWork,'standarddeviation','高斯参数/ IN2');

利用深度神经网络创建一个随机行动者表示。

ACTOROPTIONS = RLREPRESENTATIONOPTIONS('优化器','亚当',“LearnRate”,1e-3,......“GradientThreshold”,1,'l2regularizationfactor',1E-5);actor = rlstochasticRorrepresentation(Actornetwork,Obsinfo,Actinfo,Actoroptions,......'观察',{'观察'});

指定代理选项。

agentOptions = rlSACAgentOptions;代理选项.SampleTime = Env.ts;AgentOptions.discountfactor = 0.99;AgentOptions.targetSmoothFactor = 1E-3;代理选项.ExperienceBufferLength = 1E6;AgentOptions.minibatchsize = 32;

使用参与者、批评者和选项创建SAC代理。

代理= rlsacagent(演员,[批评1批评2],AgentOptions);

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

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

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

对于此示例,请加载示例中使用的环境训练DDPG代理控制双集成商系统。来自环境的观察是载体含有质量的位置和速度。该动作是代表一种力的标量,从而连续地测量 -22牛顿。

env = rlPredefinedEnv (“双凝胶组连续”);ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(Env);

获得观察数和行动次数。

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

创建两个Q值批评者表示。首先,创造一个评论家深度神经网络结构。创建经常性神经网络,使用sequenceInputlayer.作为输入层并包括一个lstmlayer.作为其他网络层之一。

equenatepath1 = [sequenceInputLayer(numobs,'正常化',“没有”,“名字”,'观察')全连接列(400,“名字”,'批评福尔福克') reluLayer (“名字”,'批评者)全连接层(300,“名字”,'批评福尔2'));actionPath1 = [sequentInputLayer(Numact,'正常化',“没有”,“名字”,“行动”)全连接层(300,“名字”,'批评FC1'));commonPath1 = [addtionlayer (2,“名字”,'添加') lstmLayer (8,'OutputMode',“序列”,“名字”,'lstm') reluLayer (“名字”,'批判杂志')全康连接层(1,“名字”,'批评'));批评=图表图(attnatpath1);批评= addlayers(批评,actionpath1);批评= AddLayers(批评,CommonPath1);批评= ConnectLayers(批评者,'批评福尔2','添加/ in1');批评= ConnectLayers(批评者,'批评FC1','添加/ in2');

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

QuandOptions = rlrepresentationOptions('优化器','亚当',“LearnRate”,1e-3,......“GradientThreshold”,1,'l2regularizationfactor',2e-4);批评1 = rlqvalueerepresentation(批评,Obsinfo,Actinfo,......'观察',{'观察'},'行动',{“行动”},批评);批评2 = rlqvaluerepresentation(批评,obsinfo,actinfo,......'观察',{'观察'},'行动',{“行动”},批评);

创建一个演员深神经网络。由于评论家有一个经常性网络,因此演员也必须具有经常性网络。不要添加一个tanhLayer或者scalinglayer.在平均输出路径中。SAC代理内部将无界高斯分布转换为有界分布,以合理计算概率密度函数和熵。

statePath = [sequenceInputLayer(numObs,'正常化',“没有”,“名字”,'观察')全连接列(400,“名字”,'commonfc1') lstmLayer (8,'OutputMode',“序列”,“名字”,'lstm') reluLayer (“名字”,'commonrelu')];vilinpath = [全连接列(300,“名字”,'manfc1') reluLayer (“名字”,“MeanRelu”)全连接层(数量,“名字”,'吝啬的'));stdpath = [全连接列(300,“名字”,'stdfc1') reluLayer (“名字”,'stdrelu')全连接层(数量,“名字”,'stdfc2') softplusLayer (“名字”,'standarddeviation')];concatpath = concatenationlayer(1,2,“名字”,'高斯参数');Actornetwork = TallayGraph(attypath);Actornetwork = Addlayers(ActorNetwork,意思);Actornetwork = Addlayers(ActorNetwork,STDPath);Actornetwork = Addlayers(ActorNetwork,Concatpath);ActorNetWork = ConnectLayers(ActorNetWork,'commonrelu','vishfc1 /');ActorNetWork = ConnectLayers(ActorNetWork,'commonrelu','stdfc1 /');ActorNetWork = ConnectLayers(ActorNetWork,'吝啬的','高斯参数/ in1');ActorNetWork = ConnectLayers(ActorNetWork,'standarddeviation','高斯参数/ IN2');

利用深度神经网络创建一个随机行动者表示。

ACTOROPTIONS = RLREPRESENTATIONOPTIONS('优化器','亚当',“LearnRate”,1e-3,......“GradientThreshold”,1,'l2regularizationfactor',1E-5);actor = rlstochasticRorrepresentation(Actornetwork,Obsinfo,Actinfo,Actoroptions,......'观察',{'观察'});

指定代理选项。要使用经常性神经网络,必须指定一个Sequencelength.大于1。

agentOptions = rlSACAgentOptions;代理选项.SampleTime = Env.ts;AgentOptions.discountfactor = 0.99;AgentOptions.targetSmoothFactor = 1E-3;代理选项.ExperienceBufferLength = 1E6;agentOptions。年代equenceLength = 32; agentOptions.MiniBatchSize = 32;

使用参与者、批评者和选项创建SAC代理。

代理= rlsacagent(演员,[批评1批评2],AgentOptions);

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

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

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

介绍了R2019a