主要内容

使用深度网络设计器创建代理,并使用图像观察进行训练

本示例展示了如何创建一个深度q学习网络(DQN)代理,该代理可以向上摆动并平衡MATLAB®建模的摆。在本例中,创建DQN代理使用深度网络设计器.有关DQN代理的更多信息,请参见深度q -网络代理

摆摆与图像MATLAB环境

本例中的强化学习环境是一个简单的无摩擦摆,最初悬挂在一个向下的位置。训练目标是用最小的控制力使钟摆直立而不倒。

对于这种环境:

  • 向上平衡摆的位置为0弧度,向下悬挂的位置是π弧度。

  • 从药剂到环境的力矩动作信号为-2 ~ 2n·m。

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

  • 奖励 r t ,则为

r t - θ t 2 + 0 1 θ t ˙ 2 + 0 001 u t - 1 2

在这里:

  • θ t 是垂直位置的位移角。

  • θ t ˙ 是位移角的导数。

  • u t - 1 是前一个时间步长的控制效果。

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

创建环境界面

为摆创建一个预定义的环境接口。

环境= rlPredefinedEnv(“SimplePendulumWithImage-Discrete”);

该界面有两个观测值。第一个观察,命名为“pendImage”,为50x50灰度图像。

obsInfo = getObservationInfo(env);obsInfo (1)
ans = rlNumericSpec with properties: LowerLimit: 0 UpperLimit: 1名称:"pendImage"描述:[0x0 string]尺寸:[50 50]数据类型:"double"

第二个观察,命名为“angularRate”为钟摆的角速度。

obsInfo (2)
ans = rlNumericSpec with properties: LowerLimit: -Inf UpperLimit: Inf名称:"angularRate"描述:[0x0 string]维度:[1 1]数据类型:"double"

该界面有一个离散的动作空间,代理可以将五个可能的扭矩值之一施加到摆上:-2、-1、0、1或2 N·m。

getActionInfo(env)
actInfo = rlFiniteSetSpec与属性:元素:[-2 -1 0 1 2]名称:“扭矩”描述:[0x0字符串]尺寸:[1 1]数据类型:“双”

固定随机生成器种子的再现性。

rng (0)

使用深度网络设计器构建评论家网络

DQN智能体在给定观察和行动的情况下,使用临界值函数表示来近似长期奖励。对于这种环境,评论家是一个具有三个输入(两个观察和一个动作)和一个输出的深度神经网络。有关创建深度神经网络值函数表示的更多信息,请参见创建策略和值函数表示

可以交互式地构建评论家网络深度网络设计器要做到这一点,你首先为每个观察和操作创建单独的输入路径。这些路径从各自的输入中学习较低级别的特征。然后创建一个公共输出路径,该路径组合来自输入路径的输出。

创建图像观察路径

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

第二步,拖动convolution2DLayer到画布上,并将此层的输入连接到I的输出mageInputLayer.创建卷积层2过滤器(NumFilters属性),其高度和宽度为10FilterSize属性),并使用一个步幅5在水平和垂直方向(属性)。

最后,用两组图像完成图像路径网络reLULayer而且fullyConnectedLayer层。第一个和第二个的输出大小fullyConnectedLayer图层分别是400和300。

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

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

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

  • imageInputLayer——设置InputSize1, - 1而且归一化没有一个

  • fullyConnectedLayer——设置OutputSize400

  • reLULayer

  • fullyConnectedLayer——设置OutputSize300

操作路径(标量输入):

  • imageInputLayer——设置InputSize1, - 1而且归一化没有一个

  • fullyConnectedLayer——设置OutputSize300

输出路径:

  • additionLayer-将所有输入路径的输出连接到该层的输入。

  • reLULayer

  • fullyConnectedLayer——设置OutputSize1对于标量值函数。

从深度网络设计器导出网络

要将网络导出到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”“归一化”“没有”)卷积2dlayer ([10 10],2,“名称”“img_conv1”“填充”“相同”“步”,[5 5]) relullayer (“名称”“relu_1”) fullyConnectedLayer (400,“名称”“critic_theta_fc1”) reluLayer (“名称”“theta_relu1”) fullyConnectedLayer (300,“名称”“critic_theta_fc2”));lgraph = addLayers(lgraph,tempLayers);tempLayers = [addtionlayer (3,“名称”“添加”) reluLayer (“名称”“relu_2”) fullyConnectedLayer (1,“名称”“stateValue”));lgraph = addLayers(lgraph,tempLayers);lgraph = connectLayers(“torque_fc1”“添加/ in3”);lgraph = connectLayers(“critic_theta_fc2”“添加/三机一体”);lgraph = connectLayers(“dtheta_fc2”“添加/ in2”);

查看关键网络配置。

图绘制(lgraph)

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

使用指定评论家表示的选项rlRepresentationOptions

criticOpts = rlRepresentationOptions(“LearnRate”1 e 03“GradientThreshold”1);

使用指定的深度神经网络创建评论家表示lgraph和选项。您还必须为评论家指定操作和观察信息,这些信息是您从环境接口获得的。有关更多信息,请参见rlQValueRepresentation

rlQValueRepresentation(lgraph,obsInfo,actInfo,...“观察”, {“pendImage”“angularRate”},“行动”, {“扭矩”}, criticOpts);

要创建DQN代理,首先使用指定DQN代理选项rlDQNAgentOptions

agentOpts = rlDQNAgentOptions(...“UseDoubleDQN”假的,...“TargetUpdateMethod”“平滑”...“TargetSmoothFactor”1 e - 3,...“ExperienceBufferLength”1 e6,...“DiscountFactor”, 0.99,...“SampleTime”env。Ts,...“MiniBatchSize”, 64);agentopt . epsilongreedyexploration . epsilondecay = 1e-5;

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

agent = rlDQNAgent(批评家,agentOpts);

火车代理

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

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

  • 在“事件管理器”对话框中显示培训进度情节选项)并禁用命令行显示(设置详细的选项).

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

有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions(...“MaxEpisodes”, 5000,...“MaxStepsPerEpisode”, 500,...“详细”假的,...“阴谋”“训练进步”...“StopTrainingCriteria”“AverageReward”...“StopTrainingValue”, -1000);

控件可以在训练或模拟过程中可视化摆系统情节函数。

情节(env)

图简单摆可视化器包含2个轴对象。坐标轴对象1包含2个类型为直线、矩形的对象。坐标轴对象2包含一个image类型的对象。

培训代理使用火车函数。这是一个计算密集型的过程,需要几个小时才能完成。为了在运行此示例时节省时间,请通过设置加载预训练的代理doTraining.要亲自训练特工,请设置doTraining真正的

doTraining = false;如果doTraining培训代理。trainingStats = train(agent,env,trainOpts);其他的为示例加载预训练的代理。负载(“MATLABPendImageDQN.mat”“代理”);结束

模拟DQN Agent

为了验证训练代理的性能,在摆环境中进行了仿真。有关代理模拟的详细信息,请参见rlSimulationOptions而且sim卡

simOptions = rlSimulationOptions(“MaxSteps”, 500);experience = sim(env,agent,simOptions);

图简单摆可视化器包含2个轴对象。坐标轴对象1包含2个类型为直线、矩形的对象。坐标轴对象2包含一个image类型的对象。

totalReward =总和(经验。奖励)
totalReward = -888.9802

另请参阅

|

相关的话题