主要内容

用图像观察训练DDPG Agent上摆和平衡摆

此示例显示如何培训深度确定性策略梯度(DDPG)代理以摆动并使用Matlab®中建模的图像观察平衡摆锤。

有关DDPG代理商的更多信息,请参阅深度确定性策略梯度代理

简单的摆与图像MATLAB环境

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

对于这个环境:

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

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

  • 从环境中观察到的是表明摆质量位置和摆角速度的图像。

  • 奖励 R. T. ,在每个时间步长时,为

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

这里:

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

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

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

有关此模型的更多信息,请参见负载预定义控制系统环境

创建环境界面

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

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代理

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)

图包含轴。轴包含Type Graphplot的对象。

指定使用批评者的选项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)

图包含轴。轴包含Type Graphplot的对象。

要创建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)

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

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

doTraining = false;如果用圆形%训练代理人。TrainingStats =火车(代理商,ENV,TRANETIONOPTIONS);其他的%负载净化代理。加载(“SimplePendulumWithImageDDPG.mat”'代理人'结尾

模拟DDPG代理

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

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

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

也可以看看

相关的话题