此示例显示如何培训深度确定性策略梯度(DDPG)代理以摆动并使用Matlab®中建模的图像观察平衡摆锤。
有关DDPG代理商的更多信息,请参阅深度确定性策略梯度代理.
用于该示例的增强学习环境是一个简单的无摩擦摆锤,其最初悬挂在向下位置。培训目标是使摆锤直立,而不会使用最小的控制工作。
对于这个环境:
向上平衡的摆位为0.
弧度,向下悬挂的位置是π
弧度。
来自代理到环境的扭矩动作信号来自-2至2 n·m。
从环境中观察到的是表明摆质量位置和摆角速度的图像。
奖励 ,在每个时间步长时,为
这里:
是从直立位置的位移角度。
是位移角的导数。
是上一个时间步骤的控制工作。
有关此模型的更多信息,请参见负载预定义控制系统环境.
为摆创建一个预定义的环境接口。
Env = Rlpredefinedenv(“SimplePendulumWithImage-Continuous”)
env = SimplePendlumWithImageContinuousAction带有属性:质量:1 RodLength: 1 RodInertia: 0 Gravity: 9.8100 DampingRatio: 0 MaximumTorque: 2 Ts: 0.0500 State: [2x1 double] Q: [2x2 double] R: 1.0000e-03
该界面有一个连续的作用空间,在该空间中,agent可以施加-2到2 N·m的扭矩。
从环境界面获取观察和动作规范。
obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);
修复随机生成器种子的再现性。
RNG(0)
DDPG代理使用批判价值函数表示来近似给定的观察和行动的长期回报。要创建批评家,首先创建一个深度卷积神经网络(CNN),它有三个输入(图像、角速度和动作)和一个输出。有关创建表示的更多信息,请参见创建策略和值函数表示.
hiddenlayersize1 = 400;hiddenlayersize2 = 300;IMGPath = [ImageInputLayer(ObsInfo(1).dimension,“归一化”那'没有任何'那'姓名',Obsinfo(1).name)卷积2dlayer(10,2,'姓名'那“conv1”那'走吧'5,“填充”, 0) reluLayer ('姓名'那“relu1”)全连接列(2,'姓名'那'fc1')concatenationLayer(3,2,'姓名'那'cat1') fullyConnectedLayer (hiddenLayerSize1'姓名'那'fc2')剥离('姓名'那'relu2') fullyConnectedLayer (hiddenLayerSize2'姓名'那'fc3') additionLayer (2'姓名'那'添加')剥离('姓名'那'relu3')全康连接层(1,'姓名'那'fc4')];dthetapath = [imageinputlayer(Obsinfo(2).dimension,“归一化”那'没有任何'那'姓名', obsInfo (2) . name) fullyConnectedLayer (1,'姓名'那'fc5'那'biaslearnratefactor'0,'偏见', 0)];actPath = [imageInputLayer (actInfo(1)。维度,“归一化”那'没有任何'那'姓名'那'行动') fullyConnectedLayer (hiddenLayerSize2'姓名'那'fc6'那'biaslearnratefactor'0,'偏见'0 (hiddenLayerSize2 1));criticNetwork = layerGraph (imgPath);criticNetwork = addLayers (criticNetwork dthetaPath);criticNetwork = addLayers (criticNetwork actPath);criticNetwork = connectLayers (criticNetwork,'fc5'那'cat1 / in2');criticNetwork = connectLayers (criticNetwork,'fc6'那“添加/ in2”);
查看批评批评网络配置。
图绘制(criticNetwork)
指定使用批评者的选项rlrepresentationOptions.
.
criticOptions = rlRepresentationOptions ('学习',1e-03,“GradientThreshold”1);
取消了以下行使用GPU加速批评CNN的培训。有关支持的GPU的更多信息,请参阅金宝appGPU支金宝app持情况(并行计算工具箱).
% criticOptions。UseDevice = gpu的;
使用指定的神经网络和选项创建批评家表示。您还必须为评论家指定操作和观察信息,这些信息是从环境接口获得的。有关更多信息,请参阅rlqvalueerepresentation
.
评论家= rlqvalueerepresentation(批评,undernfo,Actinfo,......'观察', {'pendimage'那“angularRate”},“行动”, {'行动'}, criticOptions);
DDPG代理使用参与者表示来决定对给定的观察采取什么行动。为了创建actor,首先创建一个深度卷积神经网络(CNN),它有两个输入(图像和角速度)和一个输出(动作)。
以与评论家相似的方式构造行动者。
IMGPath = [ImageInputLayer(ObsInfo(1).dimension,“归一化”那'没有任何'那'姓名',Obsinfo(1).name)卷积2dlayer(10,2,'姓名'那“conv1”那'走吧'5,“填充”, 0) reluLayer ('姓名'那“relu1”)全连接列(2,'姓名'那'fc1')concatenationLayer(3,2,'姓名'那'cat1') fullyConnectedLayer (hiddenLayerSize1'姓名'那'fc2')剥离('姓名'那'relu2') fullyConnectedLayer (hiddenLayerSize2'姓名'那'fc3')剥离('姓名'那'relu3')全康连接层(1,'姓名'那'fc4') tanhLayer ('姓名'那'tanh1') scalingLayer ('姓名'那“scale1”那“规模”,max(actinfo.upperlimit))];dthetapath = [imageinputlayer(Obsinfo(2).dimension,“归一化”那'没有任何'那'姓名', obsInfo (2) . name) fullyConnectedLayer (1,'姓名'那'fc5'那'biaslearnratefactor'0,'偏见', 0)];actorNetwork = layerGraph (imgPath);actorNetwork = addLayers (actorNetwork dthetaPath);actorNetwork = connectLayers (actorNetwork,'fc5'那'cat1 / in2');ACTOROPTIONS = RLREPRESENTATIONOPTIONS('学习',1e-04,“GradientThreshold”1);
取消注释下面的行,使用GPU来加速演员CNN的训练。
% actorOptions。UseDevice = gpu的;
使用指定的神经网络和选项创建参与者表示。有关更多信息,请参阅RLDETerminyActorRepresentation
.
Actor = RLDETerminyActorRepresentation(Actornetwork,Obsinfo,Actinfo,'观察', {'pendimage'那“angularRate”},“行动”, {“scale1”}, actorOptions);
查看Actor网络配置。
图绘制(actorNetwork)
要创建DDPG代理,首先使用rlddpgagentoptions.
.
AgentOptions = RLDDPGagentOptions(......“SampleTime”,env.ts,......“TargetSmoothFactor”,1e-3,......'经验BufferLength',1e6,......“DiscountFactor”,0.99,......'minibatchsize',128);代理选项.NoiseOptions.variance = 0.6;代理选项.NoiseOptions.varecedCayrate = 1E-6;
然后使用指定的Actor表示,批评者表示和代理选项创建代理。有关更多信息,请参阅rlddpgagent.
.
代理= rlDDPGAgent(演员、评论家、agentOptions);
要培训代理,首先指定培训选项。对于本示例,请使用以下选项。
每次运行每次5000次剧集,每个剧集都持续至多400次。
在Episode Manager对话框中显示培训进度(设置情节
选项)。
当经纪人连续十次获得大于-740的移动平均累积奖励时,停止训练。在这一点上,代理可以快速平衡摆在直立的位置,使用最小的控制努力。
有关更多信息,请参阅rlTrainingOptions
.
maxepisodes = 5000;maxsteps = 400;trainingOptions = rlTrainingOptions (......“MaxEpisodes”,maxepisodes,......“MaxStepsPerEpisode”maxsteps,......'plots'那'培训 - 进步'那......'stoptrinaincriteria'那“AverageReward”那......“StopTrainingValue”, -740);
您可以使用使用的位置来可视化主张阴谋
培训或模拟期间的功能。
情节(env)
训练代理人使用火车
函数。训练这个代理是一个计算密集型的过程,需要几个小时才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理用圆形
到错误的
.自己训练代理人,设置用圆形
到真正的
.
doTraining = false;如果用圆形%训练代理人。TrainingStats =火车(代理商,ENV,TRANETIONOPTIONS);其他的%负载净化代理。加载(“SimplePendulumWithImageDDPG.mat”那'代理人')结尾
要验证培训的代理的性能,请在摆内环境中模拟它。有关代理模拟的更多信息,请参阅rlSimulationOptions
和SIM
.
simOptions = rlSimulationOptions (“MaxSteps”,500);体验= SIM(ENV,Agent,SimOptions);