主要内容

使用深度网络设计器创建代理和使用图像观察训练

这个例子展示了如何创建一个深度q学习网络(DQN)代理,可以摆动和平衡一个在MATLAB®中建模的摆。在本例中,使用以下命令创建DQN代理深层网络设计师.有关DQN代理商的更多信息,请参阅深Q-Network代理

用图像MATLAB环境进行摆振

该示例的增强学学习环境是一个简单的无摩擦摆,最初悬挂在向下位置。培训目标是使摆锤直立,而不会使用最小的控制工作。

对于这个环境:

  • 向上平衡的摆锤位置是0.弧度,向下悬挂的位置是PI.弧度。

  • agent对环境的力矩动作信号为-2 ~ 2n·m。

  • 从环境观测得到的是简化的钟摆灰度图像和钟摆角导数。

  • 奖励 R. T. ,每次步骤提供

R. T. = - θ T. 2 + 0. 1 θ T. ˙ 2 + 0. 001 T. - 1 2 的)

这里:

  • θ T. 为从垂直位置位移的角度。

  • θ T. ˙ 是位移角的导数。

  • T. - 1 是上一个时间步骤的控制工作。

有关此模型的更多信息,请参阅用图像观察训练DDPG Agent上摆和平衡摆

创建环境接口

为摆锤创建一个预定义的环境界面。

ent = rlpredefinedenv(“SimplePendulumWithImage-Discrete”);

界面有两个观察。第一次观察,命名为“pendImage”,是一幅50乘50的灰度图像。

obsInfo = getObservationInfo (env);obsInfo (1)
ans = rlNumericSpec with properties: LowerLimit: 0 UpperLimit: 1 Name: "pendImage" Description: [0x0 string] Dimension: [50 50] DataType: "double"

第二个观察结果叫做“angularRate”,为钟摆的角速度。

Obsinfo(2)
ans = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf Name: "angularRate" Description: [0x0 string] Dimension: [1 1] DataType: "double"

该接口具有离散动作空间,其中代理可以将五种可能的扭矩值中的一个应用于摆锤:-2,-1,0,1或2 n·m。

Actinfo = GetActionInfo(ENV)
属性:Elements: [-2 -1 0 1 2] Name: "torque" Description: [0x0 string] Dimension: [1 1] DataType: "double"

修复随机生成器种子的再现性。

rng (0)

使用深网络设计师构建批评网络

DQN代理使用批判价值函数表示来近似给定的观察和行动的长期奖励。在这个环境中,评论家是一个有三个输入(两个观察和一个动作)和一个输出的深度神经网络。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和价值功能表示

您可以通过使用的方式以交互方式构建批评网络深层网络设计师要做到这一点,你首先要为每个观察和动作创建单独的输入路径。这些路径从它们各自的输入中学习较低级别的特性。然后创建一个公共输出路径,该路径将来自输入路径的输出组合起来。

创建图像观察路径

要创建图像观察路径,请先拖动一个imageInputLayer层的图书馆窗格到画布。设置层InputSize50,50,1用于图像观察和设置正常化没有一个

第二,拖convolution2DLayer将这个图层的输入和I的输出连接起来mageinputlayer..创建一个卷积层2过滤器(numfilters.具有高度和宽度的财产10.过滤财产),并使用大步5.在水平和垂直方向(财产)。

最后,用两组完成图像路径网络reLULayer全康无经层。第一个和第二个输出尺寸全康无经层分别为400和300。

创建所有输入路径和输出路径

以类似的方式构造其他输入路径和输出路径。对于本示例,请使用以下选项。

角速度路径(标量输入):

  • imageInputLayer——设置InputSize1,1正常化没有一个

  • 全康无经——设置输出400

  • reLULayer

  • 全康无经——设置输出300

操作路径(标量输入):

  • imageInputLayer——设置InputSize1,1正常化没有一个

  • 全康无经——设置输出300

输出路径:

  • 附加学者-将所有输入路径的输出连接到该层的输入。

  • reLULayer

  • 全康无经——设置输出1对于标量值函数。

从深网络设计师出口网络

将网络导出到MATLAB工作区,在深层网络设计师,点击出口深层网络设计师将网络导出为包含网络层的新变量。您可以使用此层网络变量创建批评家表示。

或者,要为网络生成等效的MATLAB代码,请单击导出>生成代码

生成的代码如下。

lgraph = layerGraph ();templayer = [imageInputLayer([1 1 1],]),“姓名”“angularRate”“正常化”“没有任何”)全连接列(400,“姓名”“dtheta_fc1”)剥离(“姓名”“dtheta_relu1”)全康连接(300,“姓名”“dtheta_fc2”));lgraph = addLayers (lgraph tempLayers);templayer = [imageInputLayer([1 1 1],]),“姓名”“扭矩”“正常化”“没有任何”)全康连接(300,“姓名”“torque_fc1”));lgraph = addLayers (lgraph tempLayers);templayer = [imageInputLayer([50 50 1],]),“姓名”“pendImage”“正常化”“没有任何”10) convolution2dLayer ([10], 2,“姓名”“img_conv1”“填充”“相同的”“步”[5] 5) reluLayer (“姓名”“relu_1”)全连接列(400,“姓名”“critic_theta_fc1”)剥离(“姓名”“theta_relu1”)全康连接(300,“姓名”“critic_theta_fc2”));lgraph = addLayers (lgraph tempLayers);tempLayers =[添加图层(3,“姓名”“添加”)剥离(“姓名”“relu_2”) fullyConnectedLayer (1,“姓名”“stateValue”));lgraph = addLayers (lgraph tempLayers);Lgraph = ConnectLayers(Lapraphay,“torque_fc1”“加法/ IN3”);Lgraph = ConnectLayers(Lapraphay,“critic_theta_fc2”“加法/ In1”);Lgraph = ConnectLayers(Lapraphay,“dtheta_fc2”“加法/ In2”);

查看批评批评网络配置。

图绘制(lgraph)

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

指定使用批评者表示的选项rlrepresentationoptions.

批评= rlrepresentationOptions('学习'1 e 03'gradientthreshold',1);

使用指定的深度神经网络创建批评家表示lgraph和选择。您还必须指定从环境界面获取的批评者的操作和观察信息。有关更多信息,请参阅rlQValueRepresentation

评论家= rlqvaluerepresentation(第一个,obsinfo,Actinfo,...“观察”,{“pendImage”'Angularrate'},“行动”,{“扭矩”},批评);

要创建DQN代理,首先使用rldqnagentoptions.

代理= rldqnagentoptions(...'unmorblebledqn',错误的,...'targetupdatemethod'“平滑”...'targetsmoothfactor'1 e - 3,...'经验bufferlength',1e6,...'贴花因子',0.99,...“SampleTime”,env.ts,...“MiniBatchSize”, 64);agentOpts.EpsilonGreedyExploration.EpsilonDecay = 1 e-5;

然后,使用指定的批准表示和代理选项创建DQN代理。有关更多信息,请参阅rldqnagent.

代理= rldqnagent(批评者,代理人);

火车代理

要培训代理,首先指定培训选项。对于本示例,请使用以下选项。

  • 每次训练最多5000集,每集最多持续500步时间。

  • 在“插曲管理器”对话框中显示培训进度(设置情节选项)并禁用命令行显示(设置verb选项错误的)。

  • 当代理在默认的连续五次事件的窗口长度上获得大于-1000的平均累积奖励时,停止训练。在这一点上,代理可以快速平衡摆在直立的位置,使用最小的控制努力。

有关更多信息,请参阅rltringOptions.

训练= rltrainingOptions(...“MaxEpisodes”, 5000,...“MaxStepsPerEpisode”, 500,...“详细”,错误的,...'plots'“训练进步”...'stoptrinaincriteria'“AverageReward”...'stoptriningvalue', -1000);

在训练或模拟过程中,您可以使用阴谋函数。

情节(env)

图简单的摆锤可视化器包含2个轴对象。轴对象1包含2个类型的线,矩形对象。轴对象2包含类型图像的对象。

训练代理人使用火车函数。这是一个计算密集型的过程,需要几个小时才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理偶然错误的.训练代理人,套装偶然真的

dotraining = false;如果偶然培训代理商。trainingStats =火车(代理,env, trainOpts);别的%为示例加载预训练的代理。负载('matlabpendimagedqn.mat'“代理”);结尾

模拟DQN代理

要验证培训的代理的性能,请在摆内环境中模拟它。有关代理模拟的更多信息,请参阅rlSimulationOptionsSIM

simOptions = rlSimulationOptions (“MaxSteps”,500);体验= SIM(ENV,Agent,SimOptions);

图简单的摆锤可视化器包含2个轴对象。轴对象1包含2个类型的线,矩形对象。轴对象2包含类型图像的对象。

totalReward =总和(experience.Reward)
TotalReward = -888.9802.

也可以看看

|

相关话题