主要内容

rlDQNAgent

深度Q网络强化学习agent

描述

深度q -网络(DQN)算法是一种无模型、在线、非策略的强化学习方法。DQN代理是一种基于价值的强化学习代理,它训练批评者来估计回报或未来的回报。DQN是q学习的一种变体,它只在离散的动作空间内运行。

欲了解更多信息,深Q-Network代理.有关不同类型的强化学习代理的更多信息,请参见强化学习代理

创建

描述

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

实例

代理人=rlDQNAgent(观测信息,行动信息)使用默认初始化选项,为具有给定观察和操作规范的环境创建DQN代理。agent中的批判表示使用了一个由观测规范构建的默认多输出q值深度神经网络观测信息和动作规范行动信息

实例

代理人=rlDQNAgent(观测信息,行动信息,initOpts)为具有给定的观察和操作规范的环境创建DQN代理。属性中指定的选项配置的默认网络initOpts有关初始化选项的详细信息,请参阅rlagentinizationoptions

从批评家表示创建代理

代理人=rlDQNAgent(评论家)使用为DQN代理设置的默认选项,创建具有指定评论家网络的DQN代理。

指定代理选项

实例

代理人=rlDQNAgent(评论家,代理)创建具有指定评论家网络的DQN代理,并设置AgentOptions财产归代理输入参数。在前面语法中的任何输入参数之后使用此语法。

输入参数

全部展开

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

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

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

由于DDPG代理在离散的操作空间中运行,因此必须指定行动信息作为一个rlFiniteSetSpec对象。

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

代理初始化选项,指定为rlagentinizationoptions对象。

评论网络表示,指定为rlQValueRepresentation对象。有关创建评论家表示的更多信息,请参见创建策略和价值功能表示

批评家表示法可以使用递归神经网络作为其函数逼近器。但是,只有多输出Q值函数表示法支持递归神经网络。有关示例,请参阅万博1manbetx用递归神经网络创建DQN智能体

属性

全部展开

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

如果使用使用递归神经网络的默认批评家表示创建DQN代理,则默认值为AgentOptions。sequenceLength32

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

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

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

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

  • 是的下一步观察是在采取行动之后吗A.

有关代理示例在培训期间如何从缓冲区体验的更多信息,请参阅深Q-Network代理

目标函数

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

例子

全部崩溃

创造一个具有离散动作空间的环境,并获得其观察和动作规范。对于本示例,请加载示例中使用的环境使用深度网络设计器创建代理和使用图像观察训练。此环境有两个观测值:一个50×50的灰度图像和一个标量(摆锤的角速度)。动作是一个标量,有五个可能的元素(扭矩为-2., -1.,0,1.2.Nm应用于摆动杆)。

加载预定义环境env=rlPredefinedEnv(“SimplePendulumWithImage离散”);%获取观察和行动规范obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

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

% rng (0)

创建一个深度q网络代理,从环境观察和行动规范。

代理=rlDQNAgent(obsInfo、actInfo);

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

getAction(代理,{rand(obsInfo(1.Dimension),rand(obsInfo(2.Dimension)})
ans=1

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

创造一个具有离散动作空间的环境,并获得其观察和动作规范。对于本示例,请加载示例中使用的环境使用深度网络设计器创建代理和使用图像观察训练。此环境有两个观测值:一个50×50的灰度图像和一个标量(摆锤的角速度)。动作是一个标量,有五个可能的元素(扭矩为-2., -1.,0,1.2.Nm应用于摆动杆)。

加载预定义环境env=rlPredefinedEnv(“SimplePendulumWithImage离散”);%获取观察和行动规范obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

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

initOpts = rlAgentInitializationOptions (“NumHiddenUnit”,128);

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

% rng (0)

根据环境观察和操作规范创建策略梯度代理。

agent=rlPGAgent(obsInfo、actInfo、initOpts);

将批判学习率降低到1e-3。

评论家= getCritic(代理);critic.Options.LearnRate = 1 e - 3;代理= setCritic(代理、批评);

从两个批评家身上提取深层神经网络。

criticNet = getModel (getCritic(代理));

默认的DQN代理使用多输出Q值临界近似器。多输出近似器将观察值作为输入,将状态动作值作为输出。每个输出元素表示从观察输入指示的状态采取相应离散动作的预期累积长期奖励。

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

临界层
ans=12x1带层的层阵列:1“concat”沿维度2个输入的串联3“relu_body”relu relu 3“fc_body”完全连接128个完全连接的层4“body_输出”relu relu 5“input_1”图像输入50x50x1图像6“conv_1”卷积64 3x1x1带跨步[1]和填充的卷积[0 0 0 0 0]7“relu_输入_1”relu relu 8“fc_1”完全连接128完全连接层9“input_2”图像输入1x1x1图像10“fc_2”完全连接128完全连接层11“output”完全连接1完全连接层12“RepresentationLoss”回归输出均方误差

策划评论家网络

绘图(关键网)

图形包含轴。轴包含graphplot类型的对象。

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

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

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

创建环境接口并获取其观察和操作规范培训DQN员工平衡车杆系统例如,这种环境有一个连续的四维观察空间(小车和杆子的位置和速度)和一个离散的一维行动空间,由两个可能的力组成,-10N或10N。

加载预定义环境env=rlPredefinedEnv(“CartPole-Discrete”);%获取观察和操作规范对象obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

对于具有离散动作空间的代理,可以选择创建多输出批评家表示,这通常比可比较的单输出批评家表示更有效。

一个多输出批评家只有观察作为输入,输出向量有尽可能多的元素作为可能的离散动作的数量。当采取相应的离散行动时,每个输出元素表示从作为输入的观测结果开始的预期累积长期回报。

使用深度神经网络近似器创建多输出批评表示。

%创建一个深度神经网络近似器%观测输入层必须有4个元素(obsInfo.Dimension(1))%动作输出层必须有2个元素(长度(actInfo.Elements))dnn = [imageInputLayer([obsInfo.Dimension(1) 1 1]),“归一化”,“没有”,“姓名”,“国家”)完全连接层(24,“姓名”,“CriticStateFC1”)雷卢耶(“姓名”,“CriticRelu1”)完全连接层(24,“姓名”,“CriticStateFC2”)雷卢耶(“姓名”,“CriticCommonRelu”)完整连接层(长度(actInfo.元素),“姓名”,“输出”));为评论家设置一些选项criticOpts=rlRepresentationOptions(“LearnRate”, 0.01,“梯度阈值”1);%基于网络逼近器创建批评家评论家= rlQValueRepresentation(款、obsInfo actInfo,“观察”,{“国家”},批判者);

指定代理选项,并使用评论家创建DQN代理。

agentOpts=rlDQNAgentOptions(...“UsedDoubledQn”错误的...“TargetUpdateMethod”,“定期”,...“TargetUpdateFrequency”,4,...“经验缓冲长度”,100000,...“折扣演员”,0.99,...“MiniBatchSize”,256); 代理=rlDQNAgent(评论家、代理)
agent=rlDQNAgent,属性为:AgentOptions:[1x1 rl.option.rlDQNAgentOptions]ExperienceBuffer:[1x1 rl.util.ExperienceBuffer]

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

getAction(代理,{兰德(4,1)})
ans = 10

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

创建环境接口并获取其观察和操作规范培训DQN员工平衡车杆系统例如,这种环境有一个连续的四维观察空间(小车和杆子的位置和速度)和一个离散的一维行动空间,由两个可能的力组成,-10N或10N。

加载预定义环境env=rlPredefinedEnv(“CartPole-Discrete”);%获取观察和规格信息obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

使用深度神经网络近似器创建单个输出批评家表示。它必须将观察和行动作为输入层,并具有单个标量输出,表示给定观察和行动的预期累积长期回报。

%创建一个深度神经网络近似器%观测输入层必须有4个元素(obsInfo.Dimension(1))%动作输入层必须有1个元素(actInfo.Dimension(1))%输出必须是标量statePath=[featureInputLayer(obsInfo.Dimension(1),“归一化”,“没有”,“姓名”,“国家”)完全连接层(24,“姓名”,“CriticStateFC1”)雷卢耶(“姓名”,“CriticRelu1”)完全连接层(24,“姓名”,“CriticStateFC2”)]; actionPath=[featureInputLayer(actInfo.维度(1),“归一化”,“没有”,“姓名”,“行动”)完全连接层(24,“姓名”,“CriticActionFC1”)];commonPath=[additionLayer(2,“姓名”,“添加”)雷卢耶(“姓名”,“CriticCommonRelu”) fullyConnectedLayer (1,“姓名”,“输出”));criticNetwork = layerGraph (statePath);= addLayers(criticNetwork, actionPath);criticNetwork = addLayers(criticNetwork, commonPath);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”,“添加/in1”); 临界网络=连接层(临界网络,“CriticActionFC1”,“添加/in2”);为评论家设置一些选项criticOpts=rlRepresentationOptions(“LearnRate”, 0.01,“梯度阈值”1);%基于网络逼近器创建批评家critic=rlQValueRepresentation(关键网络、obsInfo、actInfo、,...“观察”,{“国家”},“行动”,{“行动”},批判者);

指定代理选项,并使用评论家创建DQN代理。

agentOpts=rlDQNAgentOptions(...“UsedDoubledQn”错误的...“TargetUpdateMethod”,“定期”,...“TargetUpdateFrequency”,4,...“经验缓冲长度”,100000,...“折扣演员”,0.99,...“MiniBatchSize”,256); 代理=rlDQNAgent(评论家、代理)
agent=rlDQNAgent,属性为:AgentOptions:[1x1 rl.option.rlDQNAgentOptions]ExperienceBuffer:[1x1 rl.util.ExperienceBuffer]

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

getAction(代理,{兰德(4,1)})
ans = 10

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

在本例中,加载用于培训DQN员工平衡车杆系统的例子。

env=rlPredefinedEnv(“CartPole离散型”);

获取观察和行动信息。该环境有一个连续的四维观察空间(小车和杆子的位置和速度)和一个离散的一维行动空间,由两个可能的力组成,-10N或10N。

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

为你的批评者创建一个循环的深层神经网络。要创建递归神经网络,请使用序列输入层作为输入层,并包含lstmLayer作为其他网络层之一。

对于DQN代理,只有多输出Q值函数表示支持递归神经网络。对于多输出Q值函数表示,输出层的元素数必须等于可能的操作数:万博1manbetx元素个数(actInfo.Elements)

[sequenceInputLayer(obsInfo.Dimension(1)),“归一化”,“没有”,“姓名”,“国家”)完全连接层(50,“姓名”,“CriticStateFC1”)雷卢耶(“姓名”,“CriticRelu1”)第1层(20,“OutputMode”,“顺序”,“姓名”,“CriticLSTM”);完全连接层(20,“姓名”,“CriticStateFC2”)雷卢耶(“姓名”,“CriticRelu2”) fullyConnectedLayer(元素个数(actInfo.Elements),“姓名”,“输出”));

用递归神经网络为你的批评者创建一个表示法。

临界点=rlRepresentationOptions(“LearnRate”,1e-3,“梯度阈值”1);critic=rlQValueRepresentation(关键网络、obsInfo、actInfo、,...“观察”,“国家”,批评);

指定用于创建DQN代理的选项。若要使用递归神经网络,必须指定序列长度大于1。

agentOptions = rlDQNAgentOptions (...“UsedDoubledQn”错误的...“目标平滑因子”, 5 e - 3,...“经验缓冲长度”,1e6,...“SequenceLength”, 20);agentOptions.EpsilonGreedyExploration.EpsilonDecay = 1的军医;

创建代理。演员和评论家网络随机初始化。

代理=rlDQNAgent(评论家、代理);

使用getAction检查代理,以从随机观察返回操作。

getAction(代理,兰德(obsInfo.Dimension))
ans = -10
在R2019a中引入