rlDQNAgent
描述
深Q-network (DQN)算法是一个模范自由,在网上,off-policy强化学习方法。DQN代理是一个基于价值观的强化学习代理列车评论家估计返回或未来的回报。DQN是q学习的变体,它操作只在离散的行动空间。
有关更多信息,深Q-Network (DQN)代理。更多信息在不同类型的强化学习代理,看看强化学习代理。
创建
语法
描述
从观察和行动规范创建代理
创建一个DQN代理一个环境与给定的观察和操作规范,使用默认初始化选择。评论家在代理使用一个默认的向量(即多输出)核反应能量深层神经网络由观测规范代理
= rlDQNAgent (observationInfo
,actionInfo
)observationInfo
和操作规范actionInfo
。的ObservationInfo
和ActionInfo
的属性代理
是设置为observationInfo
和actionInfo
分别输入参数。
创建一个DQN代理一个环境与给定的观察和操作规范。代理使用一个默认网络配置使用选项中指定代理
= rlDQNAgent (observationInfo
,actionInfo
,initOpts
)initOpts
对象。初始化选项的更多信息,请参阅rlAgentInitializationOptions
。
从评论家创建代理
创建一个DQN代理指定的评论家网络使用默认选项设置DQN代理。代理
= rlDQNAgent (评论家
)
指定代理选项
创建一个DQN代理指定的评论家网络和设置代理
= rlDQNAgent (评论家
,agentOptions
)AgentOptions
财产agentOptions
输入参数。使用这个语法后的任何输入参数在前面的语法。
输入参数
initOpts
- - - - - -代理初始化选项
rlAgentInitializationOptions
对象
代理初始化选项,指定为一个rlAgentInitializationOptions
对象。
评论家
- - - - - -评论家
rlQValueFunction
对象|rlVectorQValueFunction
对象
评论家,指定为一个rlQValueFunction
或者通常更有效率rlVectorQValueFunction
对象。创建批评者的更多信息,请参阅创建政策和价值功能。
您的批评可以使用递归神经网络函数的估计值。然而,只有rlVectorQValueFunction
金宝app支持递归神经网络。例如,看到的创建DQN代理与递归神经网络。
属性
ObservationInfo
- - - - - -观测规范
规范对象|规范对象的数组
观测规范,指定为一个rlFiniteSetSpec
或rlNumericSpec
对象或数组包含一个混合的对象。数组中每个元素定义了一个环境观测通道的特性,比如尺寸,数据类型和名称。
如果您创建代理对象,通过指定一个评论家的价值ObservationInfo
匹配指定的值评论家
。
您可以提取observationInfo
从现有的环境或代理使用getObservationInfo
。您还可以手动构建规范使用rlFiniteSetSpec
或rlNumericSpec
。
ActionInfo
- - - - - -操作规范
rlFiniteSetSpec
对象
动作规范,指定为一个rlFiniteSetSpec
对象。这个对象定义环境行动通道的属性,如尺寸,数据类型和名称。
请注意
只有一个动作频道是被允许的。
如果您创建代理对象,通过指定一个评论家的价值ActionInfo
匹配指定的值评论家
。
您可以提取actionInfo
从现有的环境或代理使用getActionInfo
。您还可以手动构建规范使用rlFiniteSetSpec
。
AgentOptions
- - - - - -剂的选择
rlDQNAgentOptions
对象
代理选项,指定为一个rlDQNAgentOptions
对象。
如果您创建了一个DQN代理和一个默认的评论家使用递归神经网络,默认值的AgentOptions.SequenceLength
是32
。
ExperienceBuffer
- - - - - -经验的缓冲
rlReplayMemory
对象
经验缓冲区,指定为一个rlReplayMemory
对象。在训练代理商店每个经验(年代,一个,R,年代,D)在一个缓冲区。在这里:
年代是当前环境的观察。
一个由受托人采取的动作。
R奖励采取行动吗一个。
年代是下一个观测后采取行动一个。
D完成信号后采取行动吗一个。
UseExplorationPolicy
- - - - - -选择使用探索政策
假
(默认)|真正的
选择使用探索政策选择行为时,指定为以下之一的逻辑值。
真正的
——代理探索政策选择行为时使用基地。假
——使用基本代理贪婪策略在选择行动。
SampleTime
- - - - - -样本的代理
积极的标量|1
对象的功能
例子
创建DQN代理从观察和操作规范
创造一个环境,一个离散的行动空间,并获得其观察和操作规范。对于这个示例,负载在示例中使用的环境创建DQN代理使用深层网络设计师和训练使用图像的观察。这个环境有两个观察:50-by-50灰度图像和一个标量(摆的角速度)。行动是一个标量和五个可能的元素(转矩的2 1 0 1,或2 Nm应用于摆动杆)。
%负载预定义的环境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 x1单元阵列{[1]}
您现在可以测试和培训环境内的代理。
使用初始化选项创建DQN代理
创造一个环境,一个离散的行动空间,并获得其观察和操作规范。对于这个示例,负载在示例中使用的环境创建DQN代理使用深层网络设计师和训练使用图像的观察。这个环境有两个观察:50-by-50灰度图像和一个标量(摆的角速度)。行动是一个标量和五个可能的元素(转矩的2 1 0,1,或2 Nm应用于摆动杆)。
%负载预定义的环境env = rlPredefinedEnv (“SimplePendulumWithImage-Discrete”);%获得观察和操作规范obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
创建一个代理对象初始化选项,指定每个网络中隐藏的完全连接层必须有128个神经元(而不是默认的数字,256)。
initOpts = rlAgentInitializationOptions (NumHiddenUnit = 128);
代理创建函数初始化演员和评论家网络随机。确保修复种子再现性的随机发生器。
rng (0)
创建一个策略梯度代理从环境中观察和操作规范。
代理= rlDQNAgent (obsInfo actInfo initOpts);
提取深层神经网络的评论家。
criticNet = getModel (getCritic(代理));
验证每个隐藏完全连接层有128个神经元,可以显示层MATLAB®命令窗口,
criticNet.Layers
或可视化结构交互使用analyzeNetwork
。
analyzeNetwork (criticNet)
情节评论家网络
情节(layerGraph (criticNet))
检查您的代理,使用getAction
返回随机观察的行动。
getAction(代理,{兰特(obsInfo (1) .Dimension),兰德(obsInfo (2) .Dimension)})
ans =1 x1单元阵列{[0]}
您现在可以测试和培训环境内的代理。
创建DQN代理使用一个多输出评论家
创建一个环境接口并获得其观察和操作规范。对于这个示例加载用于预定义的环境火车DQN代理Cart-Pole平衡系统的例子。这个环境中有一个连续四维观测空间(两车的位置和速度和极)和离散维操作空间组成应用程序的两个可能的部队,-10 n或10 n。
创建预定义的环境。
env = rlPredefinedEnv (“CartPole-Discrete”);
观察和操作规范对象。
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
DQN代理接近长期奖励,观察和操作,使用参数化核反应能量函数评论家。
DQN代理一个离散的行动空间,您可以选择创建一个向量(这是一个多输出)核反应能量函数评论家,通常比对于类似的批评更有效。矢量核反应能量函数的映射一个环境观测向量的每个元素代表预期的折扣累积长期奖励当代理人开始从国家对应于给定的观察和执行相对应的动作元素数量(后来和遵循一个给定的政策)。
模型评论家中的核反应能量函数,利用神经网络。网络必须具有一个输入层(接收观测通道的内容,规定obsInfo
)和一个输出层(返回值的向量对所有可能的行为)。
层对象的网络定义为一个数组,并获得观测空间的尺寸(即,刺激(obsInfo.Dimension)
)和可能的行动的数量(即,元素个数(actInfo.Elements)
直接从环境规范对象)。
款= [featureInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (24) reluLayer fullyConnectedLayer (24) reluLayer fullyConnectedLayer(元素个数(actInfo.Elements)));
网络转换为一个dlnetwork
对象的广告显示权重的数量。
款= dlnetwork(款);总结(款)
初始化:可学的真正的数字:770输入:1“输入”4特性
创建一个评论家使用rlVectorQValueFunction
,网络款
以及观察和操作规范。
评论家= rlVectorQValueFunction(款、obsInfo actInfo);
检查评论家与随机观察输入。
getValue(评论家,{兰德(obsInfo.Dimension)})
ans =2 x1单一列向量-0.0361 - 0.0913
创建使用评论家DQN代理。
代理= rlDQNAgent(批评)
代理= rlDQNAgent属性:ExperienceBuffer: [1 x1 rl.replay。rlReplayMemory] AgentOptions: [1 x1 rl.option。rlDQNAgentOptions] UseExplorationPolicy: 0 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec] SampleTime: 1
指定代理选项,包括培训选项评论家。
agent.AgentOptions.UseDoubleDQN = false;agent.AgentOptions.TargetUpdateMethod =“周期”;agent.AgentOptions.TargetUpdateFrequency = 4;agent.AgentOptions.ExperienceBufferLength = 100000;agent.AgentOptions.DiscountFactor = 0.99;agent.AgentOptions.MiniBatchSize = 256;agent.AgentOptions.CriticOptimizerOptions.LearnRate = 1飞行;agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1;
检查您的代理,使用getAction
返回操作从一个随机的观察。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[10]}
您现在可以测试和培训环境内的代理。
对于创建DQN代理使用一个评论家
创建一个环境接口并获得其观察和操作规范。对于这个示例加载用于预定义的环境火车DQN代理Cart-Pole平衡系统的例子。这个环境中有一个连续四维观测空间(两车的位置和速度和极)和离散维操作空间组成应用程序的两个可能的部队,-10 N或10 N。
创建预定义的环境。
env = rlPredefinedEnv (“CartPole-Discrete”);
观察和操作规范对象。
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
DQN代理,您可以使用多输出核反应能量函数批评,对于通常是更有效的比一个类似的批评。但是,对于这个示例,创建一个对于核反应能量函数评论家。
核反应能量函数批评家接受当前的观察和行动作为输入并返回一个标量输出(估计折扣累积长期奖励采取对应的行动从国家目前的观察,和后政策之后)。
模型中的参数化核反应能量函数评论家,使用神经网络和两个输入层(一个用于观测通道,所指定的obsInfo
,行动的其他渠道,指定的actInfo
)和一个输出层(返回标量值)。
请注意,刺激(obsInfo.Dimension)
和刺激(actInfo.Dimension)
返回的数量的维度观察和行动空间,分别不管他们是否安排行向量,列向量或矩阵。
定义每个网络路径层对象数组,并将名称分配给每条路径的输入和输出层,所以你可以连接路径。
%观察路径obsPath = [featureInputLayer (prod (obsInfo.Dimension),名称=“netOin”)fullyConnectedLayer (24) reluLayer fullyConnectedLayer(24日Name =“fcObsPath”));%的行动路径actPath = [featureInputLayer (prod (actInfo.Dimension),名称=“netAin”Name =) fullyConnectedLayer(24日“fcActPath”));%的共同路径(连接输入沿着昏暗的# 1)commonPath = = [concatenationLayer(1、2、名称“猫”)reluLayer fullyConnectedLayer (Name =“出去”));%添加路径网络网= layerGraph;网= addLayers(净,obsPath);网= addLayers(净,actPath);网= addLayers(净,commonPath);%连接层网= connectLayers(网络,“fcObsPath”,“猫/三机一体”);网= connectLayers(网络,“fcActPath”,“猫/ in2”);%的阴谋网络情节(净)
%转换为dlnetwork对象网= dlnetwork(净);%显示权重的数量总结(净)
初始化:可学的真正的数字:817输入:1“netOin”4 2“netAin”1功能特性
创建评论家接近者对象使用净
、环境的观察和行动规范和网络输入层的名称与渠道环境的观察和行动。有关更多信息,请参见rlQValueFunction
。
评论家= rlQValueFunction(网络,…obsInfo,…actInfo,…ObservationInputNames =“netOin”,…ActionInputNames =“netAin”);
检查评论家与输入随机观察和行动。
getValue(评论家,{兰德(obsInfo.Dimension)},{兰德(actInfo.Dimension)})
ans =单-0.0232
创建使用评论家DQN代理。
代理= rlDQNAgent(批评)
代理= rlDQNAgent属性:ExperienceBuffer: [1 x1 rl.replay。rlReplayMemory] AgentOptions: [1 x1 rl.option。rlDQNAgentOptions] UseExplorationPolicy: 0 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec] SampleTime: 1
指定代理选项,包括培训选项评论家。
agent.AgentOptions.UseDoubleDQN = false;agent.AgentOptions.TargetUpdateMethod =“周期”;agent.AgentOptions.TargetUpdateFrequency = 4;agent.AgentOptions.ExperienceBufferLength = 100000;agent.AgentOptions.DiscountFactor = 0.99;agent.AgentOptions.MiniBatchSize = 256;agent.AgentOptions.CriticOptimizerOptions.LearnRate = 1飞行;agent.AgentOptions.CriticOptimizerOptions.GradientThreshold = 1;
检查您的代理,使用getAction
返回操作从一个随机的观察。
getAction(代理,{兰德(obsInfo.Dimension)})
ans =1 x1单元阵列{[10]}
您现在可以测试和培训环境内的代理。
创建DQN代理与递归神经网络
对于这个示例加载用于预定义的环境火车DQN代理Cart-Pole平衡系统的例子。这个环境中有一个连续四维观测空间(两车的位置和速度和极)和离散维操作空间组成应用程序的两个可能的部队,-10 n或10 n。
env = rlPredefinedEnv (“CartPole-Discrete”);
观察和操作规范对象。
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
DQN代理,只有向量函数的估计值,rlVectorQValueFunction
,支金宝app持递归神经网络模型。网络必须具有一个输入层(采取观察的内容频道)和一个输出层(返回值的向量对所有可能的行为)。
层的网络定义为一个数组对象。创建一个递归神经网络,使用sequenceInputLayer
作为输入层,包括至少一个lstmLayer
。
网= [sequenceInputLayer (prod (obsInfo.Dimension)) fullyConnectedLayer (50) reluLayer lstmLayer (20, OutputMode =“序列”);fullyConnectedLayer (20) reluLayer fullyConnectedLayer(元素个数(actInfo.Elements)));
转换为一个dlnetwork
对象和显示权重的数量。
网= dlnetwork(净);总结(净);
初始化:真很多可学的:6.3 k输入:1“sequenceinput”序列输入4维度
创建评论家接近者对象使用净
和环境规范。
评论家= rlVectorQValueFunction(网,obsInfo, actInfo);
检查你的批评与随机输入的观察。
getValue(评论家,{兰德(obsInfo.Dimension)})
ans =2 x1单一列向量0.0136 - 0.0067
定义一些评论家培训选项。
criticOptions = rlOptimizerOptions (…LearnRate = 1 e - 3,…GradientThreshold = 1);
为创建DQN代理指定选项。使用递归神经网络,您必须指定一个SequenceLength
大于1。
agentOptions = rlDQNAgentOptions (…UseDoubleDQN = false,…TargetSmoothFactor = 5 e - 3,…ExperienceBufferLength = 1 e6,…SequenceLength = 32,…CriticOptimizerOptions = criticOptions);agentOptions.EpsilonGreedyExploration。EpsilonDecay = 1的军医;
创建代理。演员和评论家网络随机初始化。
代理= rlDQNAgent(评论家,agentOptions)
代理= rlDQNAgent属性:ExperienceBuffer: [1 x1 rl.replay。rlReplayMemory] AgentOptions: [1 x1 rl.option。rlDQNAgentOptions] UseExplorationPolicy: 0 ObservationInfo: [1x1 rl.util.rlNumericSpec] ActionInfo: [1x1 rl.util.rlFiniteSetSpec] SampleTime: 1
检查你的代理使用getAction
返回操作从一个随机的观察。
getAction(代理,兰德(obsInfo.Dimension))
ans =1 x1单元阵列{[-10]}
评估代理使用连续的观测,使用序列长度(时间)维度。例如,获得一系列的行动9
观察。
(行动、州)= getAction(代理,…{兰德([obsInfo。Dimension 1 9])});
显示相对应的行动第七元素的观察。
action ={1}行动;行动(1,1,1,7)
ans = -10
您现在可以测试和培训环境内的代理。
版本历史
介绍了R2019a
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。