主要内容

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

此示例显示如何创建一个可以播放的深度Q学习网络(DQN)代理,并在Matlab®中平衡模型的摆锤。在此示例中,您使用使用DQN代理深网络设计师.有关DQN代理的更多信息,请参见深度Q-Network代理商

摆锤与图像matlab环境荡秋千

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

对于这个环境:

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

  • 来自代理到环境的扭矩动作信号来自-2至2 n·m。

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

  • 奖励 r t ,在每个时间步长时,为

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

在这里:

  • θ t 是从直立位置的位移角度。

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

  • u t - 1 是前一步的控制力。

有关此模型的更多信息,请参见培训DDPG代理以摇摆和平衡摆动图像观察

创建环境界面

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

env = rlPredefinedEnv ('SimpleDequeLumwithimage-离散');

界面有两个观察。第一次观察,命名为“pendimage”,是50×50灰度图像。

ObsInfo = GetobservationInfo(ENV);ObsInfo(1)
ans = rlnumericspec与属性:lowermit:0上限:1名称:“Pendimage”描述:[0x0字符串]尺寸:[50 50]数据类型:“双”

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

obsInfo (2)
ans = rlnumericspec具有属性:lowermit:-inf上唇:inf name:“Agularrate”描述:[0x0字符串]尺寸:[1 1]数据类型:“double”

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

actInfo = getActionInfo (env)
ACTINFO = RLFINITESETSPEC具有属性:元素:[-2 -1 0 1 2]名称:“转矩”描述:[0x0字符串]尺寸:[1 1]数据类型:“DOUBLE”

修复随机发生器种子以进行再现性。

RNG(0)

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

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

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

创建图像观测路径

要创建图像观测路径,首先拖动imageInputlayer.从这一点来图书馆库窗格到画布。设置图层InputSize到目前为止50岁,50岁,1对图像进行观察,并设置归一化到目前为止没有

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

最后,用两组ReLULayer全康统计层层。第一个和第二个的输出大小全康统计层层数分别为400和300。

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

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

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

  • imageInputlayer.- 集合InputSize到目前为止1,1归一化到目前为止没有

  • 全康统计层- 集合输出到目前为止400

  • ReLULayer

  • 全康统计层- 集合输出到目前为止300

动作路径(标量输入):

  • imageInputlayer.- 集合InputSize到目前为止1,1归一化到目前为止没有

  • 全康统计层- 集合输出到目前为止300

输出路径:

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

  • ReLULayer

  • 全康统计层- 集合输出到目前为止1对于标量值函数。

从深层网络设计师导出网络

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

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

生成的代码如下所示。

lgraph = layerGraph ();[imageInputLayer([1 1 1],]),“名称”“扭矩”“归一化”“没有”) fullyConnectedLayer (300,“名称”“torque_fc1”));lgraph = addLayers (lgraph层);[imageInputLayer([1 1 1],]),“名称”“angularRate”“归一化”“没有”) fullyConnectedLayer (400,“名称”“dtheta_fc1”) reluLayer (“名称”“dtheta_relu1”) fullyConnectedLayer (300,“名称”“dtheta_fc2”));lgraph = addLayers (lgraph层);[imageInputLayer([50 50 1],]),“名称”“pendimage”“归一化”“没有”10) convolution2dLayer ([10], 2,“名称”“img_conv1”“步幅”,[5 5])剥离器(“名称”“img_relu”) fullyConnectedLayer (400,“名称”“theta_fc1”) reluLayer (“名称”“theta_relu1”) fullyConnectedLayer (300,“名称”“theta_fc2”));lgraph = addLayers (lgraph层);图层= [additionLayer(3,“名称”“添加”) reluLayer (“名称”“relu”)全康连接层(1,“名称”“stateValue”));lgraph = addLayers (lgraph层);lgraph = connectLayers (lgraph,“torque_fc1”“添加/ in3”);lgraph = connectLayers (lgraph,“theta_fc2”“添加/三机一体”);lgraph = connectLayers (lgraph,“dtheta_fc2”“添加/ in2”);

查看critical网络配置。

图绘图(LGROP)

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

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

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

评论家= rlQValueRepresentation (lgraph obsInfo actInfo,......'观察',{'pendimage'“angularRate”},“行动”,{'扭矩'}, criticOpts);

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

agentOpts = rlDQNAgentOptions (......“UseDoubleDQN”假的,......“TargetUpdateMethod”“平滑”......“TargetSmoothFactor”,1e-3,......“ExperienceBufferLength”1 e6,......“DiscountFactor”, 0.99,......'sampletime'env。Ts,......'minibatchsize',64);代理.epsilongredyexpliation.epsilondecay = 1e-5;

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

代理= rlDQNAgent(评论家,agentOpts);

火车代理

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

  • 为大多数5000次剧集运行每个培训,每个剧集持续最多500个时间步长。

  • 在Episode Manager对话框中显示培训进度(设置绘图选项),并禁用命令行显示(设置详细的选项).

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

有关更多信息,请参见rlTrainingOptions

trainOpts = rlTrainingOptions (......'maxepisodes',5000,......“MaxStepsPerEpisode”,500,......'verbose'假的,......“阴谋”'培训 - 进步'......“StopTrainingCriteria”'AverageReward'......“StopTrainingValue”,-1000);

您可以通过使用培训或模拟期间可视化摆动系统情节函数。

情节(env)

训练代理人使用火车函数。这是一个计算密集的进程,需要几个小时才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理doTraining到目前为止.自己训练代理人,设置doTraining到目前为止真正的

doTraining = false;如果doTraining%训练代理人。Trainstats =火车(代理,env,训练);其他的%负载净化代理。负载(“MATLABPendImageDQN.mat”'代理');结束

模拟DQN代理

为了验证训练过的代理的性能,在摆环境中模拟它。有关代理模拟的更多信息,请参见rlSimulationOptionssim卡

simOptions = rlSimulationOptions (“MaxSteps”, 500);经验= sim (env,代理,simOptions);

TotalReward = Sum(经验.Rward)
TotalReward = -888.9802.

另请参阅

|

相关主题