主要内容

rlDQNAgent

深Q-network强化学习代理

描述

深Q-network (DQN)算法是一个模范自由,在网上,off-policy强化学习方法。DQN代理是一个基于价值观的强化学习代理列车评论家估计返回或未来的回报。DQN是q学习的变体,它操作只在离散的行动空间。

有关更多信息,深Q-Network代理。更多信息在不同类型的强化学习代理,看看强化学习代理

创建

描述

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

例子

代理= rlDQNAgent (observationInfo,actionInfo)创建一个DQN代理一个环境与给定的观察和操作规范,使用默认初始化选择。评论家表示代理使用一个默认的多输出核反应能量深层神经网络由观测规范observationInfo和操作规范actionInfo

例子

代理= rlDQNAgent (observationInfo,actionInfo,initOpts)创建一个DQN代理一个环境与给定的观察和操作规范。代理使用一个默认网络配置使用选项中指定initOpts对象。初始化选项的更多信息,请参阅rlAgentInitializationOptions

从评论家表示创建代理

代理= rlDQNAgent (评论家)创建一个DQN代理指定的评论家网络使用默认选项设置DQN代理。

指定代理选项

例子

代理= rlDQNAgent (评论家,agentOptions)创建一个DQN代理指定的评论家网络和设置AgentOptions财产agentOptions输入参数。使用这个语法后的任何输入参数在前面的语法。

输入参数

全部展开

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

您可以提取observationInfo从现有的环境或代理使用getObservationInfo。您还可以手动构建规范使用rlFiniteSetSpecrlNumericSpec

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

自从DDPG代理运行在一个离散的行动空间,您必须指定actionInfo作为一个rlFiniteSetSpec对象。

您可以提取actionInfo从现有的环境或代理使用getActionInfo。您还可以手动构建规范使用rlFiniteSetSpec

代理初始化选项,指定为一个rlAgentInitializationOptions对象。

评论家网络表示,作为一个指定rlQValueRepresentation对象。创建评论家表示更多的信息,请参阅创建政策和价值函数表示

您的评论家表示可以使用递归神经网络函数的估计值。然而,只有多输出核反应能量函数表示支持递归神经网络。金宝app例如,看到的创建DQN代理与递归神经网络

属性

全部展开

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

经验缓冲区,指定为一个ExperienceBuffer对象。在训练代理商店每个经验(年代,一个,R,年代)在一个缓冲区。在这里:

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

  • 一个由受托人采取的动作。

  • R奖励采取行动吗一个

  • 年代是下一个观测后采取行动一个

更多信息关于代理从缓冲区在训练样本的经验,明白了深Q-Network代理

对象的功能

火车 强化学习培训代理在指定的环境中
sim卡 模拟训练强化学习代理在指定的环境中
getAction 从代理或演员获得行动表示给定环境的观察
getActor 从强化学习得到演员表示代理
setActor 强化学习代理组演员表示
getCritic 从强化学习代理获得评论家表示
setCritic 将强化学习的评论家表示代理
generatePolicyFunction 创建函数评估训练策略的强化学习代理

例子

全部折叠

创造一个环境,一个离散的行动空间,并获得其观察和操作规范。对于这个示例,负载在示例中使用的环境使用深度网络设计师创建代理和培训使用图像的观察。这个环境有两个观察:50-by-50灰度图像和一个标量(摆的角速度)。行动是一个标量和五个可能的元素(一个力矩的-2,1,0,1,或2纳米应用于摆动杆)。

%负载预定义的环境env = rlPredefinedEnv (“SimplePendulumWithImage-Discrete”);%获得观察和操作规范obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

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

% rng (0)

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

代理= rlDQNAgent (obsInfo actInfo);

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

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

您现在可以测试和培训环境内的代理。

创造一个环境,一个离散的行动空间,并获得其观察和操作规范。对于这个示例,负载在示例中使用的环境使用深度网络设计师创建代理和培训使用图像的观察。这个环境有两个观察:50-by-50灰度图像和一个标量(摆的角速度)。行动是一个标量和五个可能的元素(一个力矩的-2,1,0,1,或2纳米应用于摆动杆)。

%负载预定义的环境env = rlPredefinedEnv (“SimplePendulumWithImage-Discrete”);%获得观察和操作规范obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

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

initOpts = rlAgentInitializationOptions (“NumHiddenUnit”,128);

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

% rng (0)

创建一个策略梯度代理从环境中观察和操作规范。

代理= rlPGAgent (obsInfo actInfo initOpts);

减少1 e - 3评论家学习速率。

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

提取深层神经网络的评论家。

criticNet = getModel (getCritic(代理));

默认DQN代理使用一个多输出核反应能量评论家估计值。一个多输出接近者已经观察输入和政府行动值作为输出。每个输出元素代表预期的长期累积奖励从国家采取相应的离散行动观察输入所示。

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

criticNet.Layers
ans x1 = 12层与层:数组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完全连接128完全连接层9 input_2的图像输入和图像10“fc_2”完全连接128完全连接层11“输出”完全连接1完全连接层12 RepresentationLoss回归输出均方误差

情节评论家网络

情节(criticNet)

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

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

您现在可以测试和培训环境内的代理。

创建一个环境接口并获得其观察和操作规范。对于这个示例加载用于预定义的环境火车DQN代理Cart-Pole平衡系统的例子。这个环境中有一个连续四维观测空间(两车的位置和速度和极)和离散维操作空间组成应用程序的两个可能的部队,-10 n或10 n。

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

代理的一个离散的行动空间,您可以选择创建一个多输出评论家表示,这是通常比对于类似的批评更有效的表示。

多输出评论家只观察作为输入,和一个输出向量有尽可能多的元素数量的离散动作。每个输出元素代表预期的长期累积奖励根据输入的观察后,当对应的离散采取行动。

创建多输出评论家表示使用深层神经网络近似者。

%创建一个深层神经网络近似者%观察输入层必须有4个元素(obsInfo.Dimension (1))%动作输出层必须2元素(长度(actInfo.Elements))款= [imageInputLayer ([obsInfo.Dimension (1) 1 (1),“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer(24日“名字”,“CriticStateFC1”)reluLayer (“名字”,“CriticRelu1”)fullyConnectedLayer(24日“名字”,“CriticStateFC2”)reluLayer (“名字”,“CriticCommonRelu”)fullyConnectedLayer(长度(actInfo.Elements),“名字”,“输出”));%设置一些选项评论家criticOpts = rlRepresentationOptions (“LearnRate”,0.01,“GradientThreshold”1);%创建基于网络评论家估计值评论家= rlQValueRepresentation(款、obsInfo actInfo,“观察”,{“状态”},criticOpts);

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

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

检查你的代理,用getAction返回从一个随机观察行动。

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

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

创建一个环境接口并获得其观察和操作规范。对于这个示例加载用于预定义的环境火车DQN代理Cart-Pole平衡系统的例子。这个环境中有一个连续四维观测空间(两车的位置和速度和极)和离散维操作空间组成应用程序的两个可能的部队,-10 n或10 n。

%负载预定义的环境env = rlPredefinedEnv (“CartPole-Discrete”);%得到观察和规范信息obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

创建一个使用深层神经网络近似者对于评论家表示。它必须有观察和行动作为输入层,和一个标量输出代表预期的长期累积奖励后从给定的观察和行动。

%创建一个深层神经网络近似者%观察输入层必须有4个元素(obsInfo.Dimension (1))%的操作输入层必须有1元素(actInfo.Dimension (1))%的输出必须是一个标量statePath = [featureInputLayer obsInfo.Dimension (1),“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer(24日“名字”,“CriticStateFC1”)reluLayer (“名字”,“CriticRelu1”)fullyConnectedLayer(24日“名字”,“CriticStateFC2”));actionPath = [featureInputLayer actInfo.Dimension (1),“归一化”,“没有”,“名字”,“行动”)fullyConnectedLayer(24日“名字”,“CriticActionFC1”));commonPath = [additionLayer (2,“名字”,“添加”)reluLayer (“名字”,“CriticCommonRelu”)fullyConnectedLayer (1,“名字”,“输出”));criticNetwork = layerGraph (statePath);criticNetwork = addLayers (criticNetwork actionPath);criticNetwork = addLayers (criticNetwork commonPath);criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”,“添加/三机一体”);criticNetwork = connectLayers (criticNetwork,“CriticActionFC1”,“添加/ in2”);%设置一些选项评论家criticOpts = rlRepresentationOptions (“LearnRate”,0.01,“GradientThreshold”1);%创建基于网络评论家估计值评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,“观察”,{“状态”},“行动”,{“行动”},criticOpts);

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

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

检查你的代理,用getAction返回从一个随机观察行动。

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

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

创建一个环境和获得观察和操作信息。

env = rlPredefinedEnv (“CartPole-Discrete”);obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);numObs = obsInfo.Dimension (1);numDiscreteAct =元素个数(actInfo.Elements);

为你创建一个经常性深层神经网络评论家。创建一个递归神经网络,使用sequenceInputLayer作为输入层,包括一个lstmLayer的另一个网络层。

DQN代理,只有多输出核反应能量函数表示支持递归神经网络。金宝app

criticNetwork = [sequenceInputLayer numObs,“归一化”,“没有”,“名字”,“状态”)fullyConnectedLayer (50,“名字”,“CriticStateFC1”)reluLayer (“名字”,“CriticRelu1”)lstmLayer (20“OutputMode”,“序列”,“名字”,“CriticLSTM”);fullyConnectedLayer (20,“名字”,“CriticStateFC2”)reluLayer (“名字”,“CriticRelu2”)fullyConnectedLayer (numDiscreteAct“名字”,“输出”));

创建一个使用递归神经网络表示对你的批评。

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

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

agentOptions = rlDQNAgentOptions (“UseDoubleDQN”假的,“TargetSmoothFactor”,5 e - 3,“ExperienceBufferLength”1 e6,“SequenceLength”,20);agentOptions.EpsilonGreedyExploration。EpsilonDecay = 1的军医;代理= rlDQNAgent(评论家,agentOptions);
介绍了R2019a