主要内容

rlSACAgent

软演员批评强化学习代理

描述

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

有关详细信息,请参阅软演员评论家.

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

创造

描述

根据观察和操作规范创建代理

实例

代理人=rlSACAgent(观测信息,行动信息)为具有给定观察和操作规范的环境创建SAC代理(观测信息)和操作规范(行动信息).agent中的参与者和批评家表示使用使用观察规范构建的默认深度神经网络观测信息和动作规范行动信息.

实例

代理人=rlSACAgent(观测信息,行动信息,初始化选项)创建具有使用指定初始化选项配置的深层神经网络表示的SAC代理(初始化选项).

从参与者和批评家表示创建代理

实例

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

指定代理选项

代理人=rlSACAgent(___,代理)设定代理以前任何语法的属性。

输入参数

全部展开

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

你可以提取观测信息从现有环境或代理使用获取观测信息。您也可以使用手动构造规范rlFiniteSetSpecrlNumericSpec.

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

你可以提取行动信息从现有环境或代理使用getActionInfo。您也可以使用手动构造规范rlFiniteSetSpecrlNumericSpec.

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

参与者网络表示,指定为随机表示对象

有关创建参与者表示的详细信息,请参见创建策略和值函数表示.

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

  • rlQValueRepresentation对象-使用单个Q值函数创建SAC代理。

  • 二元行向量rlQValueRepresentation对象-创建具有两个临界值函数的SAC代理。这两个临界值网络必须是唯一的rlQValueRepresentation具有相同观察和动作规范的对象。表示可以具有不同的结构,也可以具有相同的结构但具有不同的初始参数。

对于SAC代理,每个批评家必须是一个输出rlQValueRepresentation对象,该对象将动作和观察作为输入。

有关创建批评家表达的详细信息,请参见创建策略和值函数表示.

性质

全部展开

代理选项,指定为RLS代理对象

经验缓冲区,指定为经验缓冲器对象。在培训期间,代理存储其每个体验(s,A.,R,是的)在缓冲区中。此处:

  • s是当前对环境的观察。

  • A.是代理采取的行动。

  • R是采取行动的回报吗A..

  • 是的采取行动后的下一个观察结果是什么A..

有关代理示例在培训期间如何从缓冲区体验的更多信息,请参阅软演员评论家.

目标函数

火车 在特定环境中培训强化学习代理
模拟 在指定环境中模拟经过培训的强化学习代理
getAction 从给定环境观察的代理或参与者表示中获取操作
getActor 从强化学习代理获取参与者表示
设置器 强化学习agent的集参与者表示
Get批评家 从强化学习代理获取批评表示
赛特评论家 强化学习agent的集批评表示
生成策略函数 创建评估强化学习代理的培训策略的函数

例子

全部崩溃

创建环境并获取观察和操作规范。对于本例,加载示例中使用的环境培训DDPG代理控制双积分系统环境观测是一个包含质量位置和速度的矢量。作用是一个标量,表示施加在质量上的力,范围从-2.2.牛顿。

env=rlPredefinedEnv(“双积分连续”);obsInfo=getObservationInfo(env);actInfo=getActionInfo(env);

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

%rng(0)

根据环境观察和行动规范创建SAC代理。

agent=rlsaagent(obsInfo,actInfo);

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

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

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

创建具有连续动作空间的环境,并获取其观察和动作规范。对于本例,加载示例中使用的环境培训DDPG代理控制双积分系统环境观测是一个包含质量位置和速度的矢量。作用是一个标量,表示施加在质量上的力,范围从-2.2.牛顿。

env=rlPredefinedEnv(“双积分连续”);obsInfo=getObservationInfo(env);actInfo=getActionInfo(env);

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

initOpts=rlagentinizationoptions(“NumHiddenUnit”,128);

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

%rng(0)

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

agent=rlsaagent(obsInfo、actInfo、initOpts);

从参与者中提取深层神经网络。

actorNet=getModel(getActor(agent));

从两位评论家那里提取深层神经网络getModel(评论家)仅返回第一个评论家网络。

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

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

临界值1.层
ans=10x1带层的层阵列:1“concat”串联2个输入沿维度串联12“relu_body”relu relu 3“fc_body”完全连接128个完全连接的层4“body_输出”relu relu 5“input_1”功能输入2功能6“fc_1”完全连接128个完全连接的层7“input_2”功能输入1功能8“fc_2”完全连接已连接128完全连接层9“输出”完全连接1完全连接层10“表示损失”回归输出均方误差

描绘演员和第二位评论家的关系网。

情节(actorNet)

绘图(关键ET2)

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

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

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

创建环境并获取观察和操作规范。对于本例,加载示例中使用的环境培训DDPG代理控制双积分系统环境观测是一个包含质量位置和速度的矢量。作用是一个标量,表示施加在质量上的力,范围从-2.2.牛顿。

env=rlPredefinedEnv(“双积分连续”);obsInfo=getObservationInfo(env);actInfo=getActionInfo(env);

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

numObs=obsInfo.Dimension(1);numAct=numel(actInfo);

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

statePath1=[featureInputLayer(numObs,“正常化”,“没有”,“姓名”,“观察”)完全连接层(400,“姓名”,“CriticStateFC1”)雷卢耶(“姓名”,“Criticsaterelu1”)完全连接层(300,“姓名”,“CriticStateFC2”)];actionPath1=[featureInputLayer(numAct,“正常化”,“没有”,“姓名”,“行动”)完全连接层(300,“姓名”,“CriticActionFC1”)];commonPath1=[additionLayer(2,“姓名”,“添加”)雷卢耶(“姓名”,“CriticCommonRelu1”)完全连接层(1,“姓名”,“临界输出”)];criticNet=layerGraph(状态路径1);criticNet=addLayers(criticNet,actionPath1);criticNet=addLayers(criticNet,commonPath1);criticNet=connectLayers(criticNet,“CriticStateFC2”,“添加/in1”);criticNet=连接层(criticNet,“CriticActionFC1”,“添加/in2”);

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

临界点=rlRepresentationOptions(“优化器”,“亚当”,“LearnRate”,1e-3,...“梯度阈值”1.“L2调节因子”,2e-4);临界C1=rlQValueRepresentation(临界网、obsInfo、actInfo、,...“观察”,{“观察”},“行动”,{“行动”},临界点);临界点2=rlQValueRepresentation(临界点网、obsInfo、actInfo、,...“观察”,{“观察”},“行动”,{“行动”},批评);

创建一个演员深度神经网络。不要添加坦莱尔缩放层在平均输出路径中,SAC代理将无界高斯分布内部转换为有界分布,以正确计算概率密度函数和熵。

statePath=[featureInputLayer(numObs,“正常化”,“没有”,“姓名”,“观察”)完全连接层(400,“姓名”,“commonFC1”)雷卢耶(“姓名”,“CommonRelu”)];平均路径=[fullyConnectedLayer(300,“姓名”,“MeanFC1”)雷卢耶(“姓名”,“MeanRelu”)完全连接层(numAct,“姓名”,“中庸”) ]; stdPath=[fullyConnectedLayer(300,“姓名”,‘StdFC1’)雷卢耶(“姓名”,“斯特德鲁”)完全连接层(numAct,“姓名”,‘StdFC2’)软杀伤(“姓名”,“标准偏差”)];concatPath=连接层(1,2,“姓名”,“高斯参数”);actorNetwork=layerGraph(statePath);actorNetwork=addLayers(actorNetwork,meanPath);actorNetwork=addLayers(actorNetwork,stdPath);actorNetwork=addLayers(actorNetwork,concatPath);actorNetwork=connectLayers(actorNetwork,“CommonRelu”,'MeanFC1/in');actorNetwork=连接层(actorNetwork,“CommonRelu”,“StdFC1/in”);actorNetwork=连接层(actorNetwork,“中庸”,“高斯参数/in1”);actorNetwork=连接层(actorNetwork,“标准偏差”,“高斯参数/in2”);

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

ActorProptions=rlRepresentationOptions(“优化器”,“亚当”,“LearnRate”,1e-3,...“梯度阈值”1.“L2调节因子”,1e-5);actor=rl随机性actor表示(actorNetwork、obsInfo、actInfo、actorOptions、,...“观察”,{“观察”});

指定代理选项。

agentOptions=RLSAAgentOptions;agentOptions.SampleTime=env.Ts;agentOptions.DiscountFactor=0.99;agentOptions.TargetSmoothFactor=1e-3;agentOptions.ExperienceBufferLength=1e6;agentOptions.MiniBatchSize=32;

使用演员、评论家和选项创建SAC代理。

agent=rlsaagent(参与者,[critic1-critic2],代理);

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

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

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

在R2019a中引入