主要内容

rlDQNAgent

深度q -网络强化学习代理

描述

Deep Q-Network(DQN)算法是一种无模型,在线,禁止策略强化学习方法。DQN代理是一个基于价值的强化学习代理,可以训练批准批评奖励或未来奖励。DQN是Q-Learning的变体,它仅在离散动作空间内运行。

有关更多信息,深度Q-Network代理商.有关不同类型的强化学习代理商的更多信息,请参阅强化学习代理

创建

描述

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

例子

代理= rlDQNAgent (observationInfoactionInfo使用默认初始化选项创建具有给定观察和操作规范的环境的DQN代理。代理中的批评批评代表使用从观察规范构建的默认多输出Q值深神经网络observationInfo以及动作规范actionInfo

例子

代理= rlDQNAgent (observationInfoactionInfo初学者使用给定的观察和操作规范创建一个环境的DQN代理。代理使用使用指定的选项配置的默认网络初学者对象。有关初始化选项的更多信息,请参见rlAgentInitializationOptions

从评论家表示创建代理

代理= rlDQNAgent (评论家使用为DQN代理程序设置的默认选项创建DQN代理使用指定的批评网络。

指定代理选项

例子

代理= rlDQNAgent (评论家agentOptions使用指定的批评网络创建DQN代理并设置代理选项财产agentOptions输入参数。在上一个语法中的任何输入参数后使用此语法。

输入参数

展开全部

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

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

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

由于DDPG代理在离散的操作空间中操作,因此必须指定actionInfo作为A.rlfinitesetspec.对象。

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

的代理初始化选项rlAgentInitializationOptions对象。

批评网络表示,指定为rlQValueRepresentation对象。有关创建批评识别的更多信息,请参阅创建策略和值函数表示

你的评论表示可以使用递归神经网络作为函数近似器。然而,只有多输出q值函数表示支持递归神经网络。金宝app例如,请参见用递归神经网络创建DQN Agent

特性

展开全部

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

如果您创建一个DQN代理,该代理具有使用递归神经网络的默认批评家表示,则默认值为AgentOptions.SequencElength.32

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

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

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

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

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

有关代理样本在训练期间如何从缓冲区获得经验的更多信息,请参见深度Q-Network代理商

对象的功能

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

例子

全部折叠

创建具有离散动作空间的环境,并获得其观察和操作规范。对于此示例,请加载示例中使用的环境使用深度网络设计师和使用图像观察创建代理.这个环境有两个观测值:一个50乘50的灰度图像和一个标量(钟摆的角速度)。这个动作是一个标量,有五个可能的元素(一个扭矩是-2, -101,或2Nm适用于摆动杆)。

%加载预定义环境env = rlPredefinedEnv (“SimplePendulumWithImage-Discrete”);%获得观察和行动规范ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(ENV);

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

%rng(0)

从环境观察和操作规范中创建一个深Q网络代理。

代理= rlDQNAgent (obsInfo actInfo);

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

getAction(代理,{兰特(obsInfo (1) .Dimension),兰德(obsInfo (2) .Dimension)})
ans = 1

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

创建具有离散动作空间的环境,并获得其观察和操作规范。对于此示例,请加载示例中使用的环境使用深度网络设计师和使用图像观察创建代理.这个环境有两个观测值:一个50乘50的灰度图像和一个标量(钟摆的角速度)。这个动作是一个标量,有五个可能的元素(一个扭矩是-2, -101,或2Nm适用于摆动杆)。

%加载预定义环境env = rlPredefinedEnv (“SimplePendulumWithImage-Discrete”);%获得观察和行动规范ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(ENV);

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

Initopts = rlagentinitializationOptions('numhidendentunit', 128);

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

%rng(0)

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

代理= rlPGAgent (obsInfo actInfo initOpts);

将批评评论率降低到1E-3。

评论家=克罗里特(代理人);批评.Options.Learnrate = 1E-3;代理= setcritic(代理商,批评者);

从两个批评家中提取深度神经网络。

批评= getModel(accritic(代理));

默认的DQN代理使用多输出q值评估逼近器。多输出近似器将观察值作为输入,状态行为值作为输出。每个输出元素表示从观察输入所指示的状态中采取相应离散行动的预期累积长期回报。

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

criticNet。层
ans = 12x1 Layer array with layers:1的concat串联连接2输入沿着维度3 2的relu_body ReLU ReLU 3“fc_body”完全连接128完全连接层4的body_output ReLU ReLU 5 input_1的图像输入50 x50x1图片6 conv_1卷积64 3 x3x1旋转步[1]和填充[0 0 0 0]7‘relu_input_1 ReLU ReLU 8 fc_1完全连接10 'fc_2' fully connected 128 fully connected layer 11 'output' fully connected 1 fully connected layer 12 'RepresentationLoss' Regression output mean-平方误差

策划评论家网络

情节(criticNet)

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

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

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

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

创建一个环境界面,并获取其观察和操作规范。在本例中,加载用于培训DQN Agent来平衡车杆系统的例子。这个环境有一个连续的四维观察空间(车和杆的位置和速度)和一个离散的一维作用空间,由两个可能的力的应用组成,-10N或10N。

%加载预定义环境env = rlPredefinedEnv (“cartpole  - 离散”);%获得观察和行动规范对象ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(ENV);

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

多输出批读仅具有作为输入的观察,以及具有与可能的离散动作的数量一样多的元素的输出向量。每个输出元素代表在拍摄相应的离散动作时从给出的观察结果之后的预期累积长期奖励。

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

%创建一个深度神经网络近似器%观察输入层必须具有4个元素(ObsInfo.dimension(1))动作输出层必须具有2个元素(长度(actinfo.elements))dnn = [imageInputlayer([obsInfo.dimension(1)1 1],'正常化'“没有”“名字”“状态”) fullyConnectedLayer(24日“名字”“CriticStateFC1”) reluLayer (“名字”'rictrelu1') fullyConnectedLayer(24日“名字”“CriticStateFC2”) reluLayer (“名字”“CriticCommonRelu”) fullyConnectedLayer(长度(actInfo.Elements),“名字”“输出”));%为评论家设置一些选项criticOpts = rlRepresentationOptions (“LearnRate”,0.01,“GradientThreshold”1);%创建基于网络近似器的批评家评论家= rlqvalueerepresentation(DNN,Obsinfo,Actinfo,“观察”, {“状态”}, criticOpts);

指定代理选项,并使用批评者创建DQN代理。

agentOpts = rlDQNAgentOptions (...“UseDoubleDQN”假的,...“TargetUpdateMethod”“周期”...'targetupdatefrquency',4,...“ExperienceBufferLength”, 100000,...“DiscountFactor”, 0.99,...'minibatchsize', 256);代理= rlDQNAgent(评论家,agentOpts)
agent = rlDQNAgent带有属性:AgentOptions: [1x1 rl.option.]rlDQNAgentOptions] ExperienceBuffer: [1x1 rl.util.ExperienceBuffer]

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

GetAction(代理,{rand(4,1)})
ans = 10.

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

创建一个环境界面,并获取其观察和操作规范。在本例中,加载用于培训DQN Agent来平衡车杆系统的例子。这个环境有一个连续的四维观察空间(车和杆的位置和速度)和一个离散的一维作用空间,由两个可能的力的应用组成,-10N或10N。

%加载预定义环境env = rlPredefinedEnv (“cartpole  - 离散”);%获得观察和规格信息ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(ENV);

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

%创建一个深度神经网络近似器%观察输入层必须具有4个元素(ObsInfo.dimension(1))%操作输入层必须有1个元素(actInfo.Dimension(1))%输出必须是一个标量statePath = [featureInputLayer(obsInfo.Dimension(1)),'正常化'“没有”“名字”“状态”) fullyConnectedLayer(24日“名字”“CriticStateFC1”) reluLayer (“名字”'rictrelu1') fullyConnectedLayer(24日“名字”“CriticStateFC2”));actionPath = [featureInputLayer(actInfo.Dimension(1)),'正常化'“没有”“名字”“行动”) fullyConnectedLayer(24日“名字”'批评FC1'));commonPath =[附加路径]“名字”“添加”) reluLayer (“名字”“CriticCommonRelu”)全康连接层(1,“名字”“输出”));批判性=图表图(州路);批评网络= addlayers(批判性,ActionPath);批评网络= addlayers(批判性,commonpath);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,'批评FC1'“添加/ in2”);%为评论家设置一些选项criticOpts = rlRepresentationOptions (“LearnRate”,0.01,“GradientThreshold”1);%创建基于网络近似器的批评家评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,...“观察”, {“状态”},'行动', {“行动”}, criticOpts);

指定代理选项,并使用批评者创建DQN代理。

agentOpts = rlDQNAgentOptions (...“UseDoubleDQN”假的,...“TargetUpdateMethod”“周期”...'targetupdatefrquency',4,...“ExperienceBufferLength”, 100000,...“DiscountFactor”, 0.99,...'minibatchsize', 256);代理= rlDQNAgent(评论家,agentOpts)
agent = rlDQNAgent带有属性:AgentOptions: [1x1 rl.option.]rlDQNAgentOptions] ExperienceBuffer: [1x1 rl.util.ExperienceBuffer]

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

GetAction(代理,{rand(4,1)})
ans = 10.

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

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

env = rlPredefinedEnv (“CartPole-Discrete”);

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

ObsInfo = GetobservationInfo(ENV);Actinfo = GetActionInfo(ENV);

为您的评论家创建一个经常性的深神经网络。要创建经常性的神经网络,请使用asequenceInputLayer作为输入层并包括一个lstmlayer.作为其他网络层之一。

对于DQN代理,只有多输出q值函数表示支持递归神经网络。金宝app对于多输出q值函数表示,输出层元素的数量必须等于可能动作的数量:numel(Actinfo.Elements)

批评网络= [sequenceInputlayer(ObsInfo.dimension(1),'正常化'“没有”“名字”“状态”) fullyConnectedLayer (50,“名字”“CriticStateFC1”) reluLayer (“名字”'rictrelu1') lstmLayer (20'OutputMode'“序列”“名字”“CriticLSTM”);fullyConnectedLayer (20,“名字”“CriticStateFC2”) reluLayer (“名字”'transrelu2')全连接列(Numel(Actinfo.Elements),“名字”“输出”));

使用经常性神经网络创建评论家的代表。

criticOptions = rlRepresentationOptions (“LearnRate”1 e - 3,“GradientThreshold”1);评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,...“观察”“状态”, criticOptions);

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

代理选项= rldqnagentoptions(...“UseDoubleDQN”假的,...“TargetSmoothFactor”,5e-3,...“ExperienceBufferLength”1 e6,...“SequenceLength”20);AgentOptions.epsilongredyexpliation.epsilondecay = 1e-4;

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

代理= rlDQNAgent(评论家,agentOptions);

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

getAction(代理,兰德(obsInfo.Dimension))
ans = -10
介绍了R2019a