创建DQN代理使用深层网络设计师和训练使用图像的观察
这个例子展示了如何创建一个深q学习网络(DQN)代理,可以和平衡一个钟摆模型在MATLAB®。在本例中,您创建DQN代理使用深层网络设计师。DQN代理的更多信息,请参阅深Q-Network (DQN)代理。
摆摆起MATLAB环境与形象
强化学习环境对于这个示例是一个简单的无摩擦摆,最初挂在一个向下的位置。培训的目标是使钟摆直立而不摔倒使用最少的控制工作。
对于这个环境:
向上的平衡摆位置0弧度,向下悬挂位置
π
弧度。转矩操作信号从代理五的环境可以采取任何可能的整数值从2到2 N·m。
的观测环境简化摆和摆角的灰度图像的导数。
奖励 ,在每一个时间步,提供
在这里:
的位移角直立位置。
的导数是位移角。
从前面的时间步长控制的努力。
更多信息的连续行动空间版本这个模型中,看到的火车DDPG代理摇摆起来,平衡摆与图像观察。
创建环境接口
创建一个预定义的钟摆环境界面。
env = rlPredefinedEnv (“SimplePendulumWithImage-Discrete”);
接口有两个观察。第一个观察,命名“pendImage”
,是一个50-by-50灰度图像。
obsInfo = getObservationInfo (env);obsInfo (1)
ans = rlNumericSpec属性:LowerLimit: 0 UpperLimit: 1名称:“pendImage”描述:[0 x0字符串)尺寸:50[50]数据类型:“替身”
第二步,命名“angularRate”
摆的角速度。
obsInfo (2)
ans = rlNumericSpec属性:LowerLimit:无穷UpperLimit:正的名字:“angularRate”描述:[0 x0字符串]维度:[1]数据类型:“替身”
代理的接口有一个离散的行动空间可以应用的五个可能的钟摆转矩值:2、1、0、1或2 N·m。
actInfo = getActionInfo (env)
actInfo = rlFiniteSetSpec属性:元素:[2 1 0 1 2]的名字:“扭矩”描述:[0 x0字符串]维度:[1]数据类型:“替身”
解决随机发生器再现性的种子。
rng (0)
构建网络评论家使用深层网络设计师
DQN代理使用参数化核反应能量函数近似者估计价值的政策。自从DQN代理有一个离散的行动空间,您可以使用一个向量(即多输出)评论家核反应能量函数,通常比对于类似的批评更有效。但是,对于这个示例,使用一个标准对于核反应能量函数评论家。
模型中的参数化核反应能量函数评论家,使用神经网络输入层有三个(两个观测通道,是指定的obsInfo
,行动的其他渠道,指定的actInfo
)和一个输出层(返回标量值)。有关创建核反应能量函数的更多信息表示基于深层神经网络,看到的创建政策和价值功能。
构建评论家网络交互地使用深层网络设计师应用。为此,首先为每个观察创建单独的输入路径和行动。这些路径学习低层特征从各自的输入。然后创建一个共同的输出路径,结合了从输入输出路径。
创建图像观察路径
创建图像观察路径,首先拖一个imageInputLayer
从层的图书馆面板到画布上。设置层InputSize来50岁,50岁,1
为图像观察,并设置归一化来没有一个
。
第二,拖convolution2DLayer
到画布上,这一层的输入连接到我的输出mageInputLayer
。创建一个卷积层2
过滤器(NumFilters属性)的高度和宽度10
(FilterSize属性),并使用一大步5
在水平和垂直方向上(步属性)。
最后,完成图像路径与两套网络reLULayer
和fullyConnectedLayer
层。第一次和第二次的输出大小fullyConnectedLayer
层分别是400年和300年。
创建所有输入路径和输出路径
构建其他输入路径和输出路径以类似的方式。对于这个示例,使用以下选项。
输入角速度路径(标量):
imageInputLayer
——设置InputSize来1,- 1
和归一化来没有一个
。fullyConnectedLayer
——设置OutputSize来400年
。reLULayer
fullyConnectedLayer
——设置OutputSize来300年
。
行动路径(标量输入):
imageInputLayer
——设置InputSize来1,- 1
和归一化来没有一个
。fullyConnectedLayer
——设置OutputSize来300年
。
输出路径:
additionLayer
——所有输入的输出路径连接到这一层的输入。reLULayer
fullyConnectedLayer
——设置OutputSize来1
标量值函数。
出口网络从网络设计师
出口网络MATLAB工作区,深层网络设计师,点击出口。深层网络设计师出口网络作为一个新的变量包含网络层。您可以创建使用这一层网络评论家表示变量。
另外,为网络生成等价的MATLAB代码,点击出口>生成代码。
生成的代码如下。
lgraph = layerGraph ();tempLayers = [imageInputLayer ((1 1 1),“名称”,“angularRate”,“归一化”,“没有”)fullyConnectedLayer (400,“名称”,“dtheta_fc1”)reluLayer (“名称”,“dtheta_relu1”)fullyConnectedLayer (300,“名称”,“dtheta_fc2”));lgraph = addLayers (lgraph tempLayers);tempLayers = [imageInputLayer ((1 1 1),“名称”,“扭矩”,“归一化”,“没有”)fullyConnectedLayer (300,“名称”,“torque_fc1”));lgraph = addLayers (lgraph tempLayers);tempLayers = [imageInputLayer(50 50个1,“名称”,“pendImage”,“归一化”,“没有”10)convolution2dLayer ([10], 2,“名称”,“img_conv1”,“填充”,“相同”,“步”[5]5)reluLayer (“名称”,“relu_1”)fullyConnectedLayer (400,“名称”,“critic_theta_fc1”)reluLayer (“名称”,“theta_relu1”)fullyConnectedLayer (300,“名称”,“critic_theta_fc2”));lgraph = addLayers (lgraph tempLayers);tempLayers = [additionLayer (3“名称”,“添加”)reluLayer (“名称”,“relu_2”)fullyConnectedLayer (1,“名称”,“stateValue”));lgraph = addLayers (lgraph tempLayers);lgraph = connectLayers (lgraph,“torque_fc1”,“添加/ in3”);lgraph = connectLayers (lgraph,“critic_theta_fc2”,“添加/三机一体”);lgraph = connectLayers (lgraph,“dtheta_fc2”,“添加/ in2”);
查看评论家网络配置。
图绘制(lgraph)
转换为一个dlnetwork
对象和显示参数的数量。
网= dlnetwork (lgraph);总结(净)
初始化:可学的真正的数量:322.9 k输入:1“angularRate”和图片2的扭矩和图片3的pendImage 50 x50x1图像
创建使用神经网络的评论家,行动和观测规范,输入层的名称连接到观察和操作通道。有关更多信息,请参见rlQValueFunction
。
评论家= rlQValueFunction(净、obsInfo actInfo,…“ObservationInputNames”,(“pendImage”,“angularRate”),…“ActionInputNames”,“扭矩”);
使用指定选项评论家rlOptimizerOptions
。
criticOpts = rlOptimizerOptions (LearnRate = 1 e 03, GradientThreshold = 1);
使用指定DQN代理选项rlDQNAgentOptions
。包括演员培训选项和评论家。
agentOpts = rlDQNAgentOptions (…UseDoubleDQN = false,…CriticOptimizerOptions = criticOpts,…ExperienceBufferLength = 1 e6,…SampleTime = env.Ts);
您还可以设置或修改代理选项使用点符号。
agentOpts.EpsilonGreedyExploration。EpsilonDecay = 1 e-5;
或者,您可以创建代理,然后修改它的选项使用点符号。
使用评论家创建DQN代理和代理的选择对象。有关更多信息,请参见rlDQNAgent
。
代理= rlDQNAgent(评论家,agentOpts);
火车代理
培训代理商,首先指定培训选项。对于这个示例,使用以下选项。
运行每个培训最多5000集,每集持久最多500时间步。
在事件管理器对话框显示培训进展(设置
情节
在命令行选项)和禁用显示(设置详细的
选项假
)。停止训练当代理接收到平均累积奖励的默认窗口长度大于-1000连续5集。在这一点上,代理可以快速平衡钟摆在直立位置使用最少的控制工作。
有关更多信息,请参见rlTrainingOptions
。
trainOpts = rlTrainingOptions (…MaxEpisodes = 5000,…MaxStepsPerEpisode = 500,…Verbose = false,…情节=“训练进步”,…StopTrainingCriteria =“AverageReward”,…StopTrainingValue = -1000);
可视化摆系统在训练或仿真使用情节
函数。
情节(env)
火车代理使用火车
函数。这是一个计算密集型过程需要几个小时才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainOpts);其他的%负载pretrained代理的例子。负载(“MATLABPendImageDQN.mat”,“代理”);结束
模拟DQN代理
验证培训代理的性能,模拟在钟摆的环境。代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。
simOptions = rlSimulationOptions (MaxSteps = 500);经验= sim (env,代理,simOptions);
totalReward =总和(experience.Reward)
totalReward = -713.0336