主要内容

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

这个例子展示了如何训练一个深度确定性策略梯度(DDPG)代理,用MATLAB®中建模的图像观察摆动并平衡一个钟摆。

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

简单的摆与图像MATLAB环境

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

对于这个环境:

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

  • 从代理到环境的扭矩作用信号为-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. 是上一个时间步骤的控制工作。

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

创建环境接口

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

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).维度,“归一化”,“没有”,“姓名”,obsInfo(1).Name)卷积2层(10,2,“姓名”,“conv1”,“大步走”5,“填充”, 0) reluLayer (“姓名”,“relu1”)完全连接层(2,“姓名”,“fc1”)连接层(3,2,“姓名”,“第1类”) fullyConnectedLayer (hiddenLayerSize1“姓名”,“fc2”)雷卢耶(“姓名”,“relu2”) fullyConnectedLayer (hiddenLayerSize2“姓名”,“fc3”) additionLayer (2“姓名”,“添加”)雷卢耶(“姓名”,“relu3”)完全连接层(1,“姓名”,“fc4”)];dthetaph=[imageInputLayer(obsInfo(2).维度,“归一化”,“没有”,“姓名”, obsInfo (2) . name) fullyConnectedLayer (1,“姓名”,“fc5”,“BiasLearnRateFactor”0,“偏见”, 0)];actPath = [imageInputLayer (actInfo(1)。维度,“归一化”,“没有”,“姓名”,“行动”) fullyConnectedLayer (hiddenLayerSize2“姓名”,“fc6”,“BiasLearnRateFactor”0,“偏见”,零(hiddenLayerSize2,1));临界网络=层图(imgPath);临界网络=添加层(临界网络,数据层);临界网络=添加层(临界网络,actPath);临界网络=连接层(临界网络,“fc5”,“cat1/in2”);criticNetwork = connectLayers (criticNetwork,“fc6”,“添加/ in2”);

查看网络配置。

图绘制(criticNetwork)

图形包含轴。轴包含graphplot类型的对象。

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

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

取消对以下行的注释,以使用GPU加速培训。有关支持的GPU的更多信息,请参阅万博1manbetxGPU支万博1manbetx持情况(并行计算工具箱)

% criticOptions。UseDevice = gpu的;

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

critic=rlQValueRepresentation(关键网络、obsInfo、actInfo、,...“观察”, {“pendImage”,“angularRate”},“行动”, {“行动”}, criticOptions);

DDPG代理使用参与者表示来决定对给定的观察采取什么行动。为了创建actor,首先创建一个深度卷积神经网络(CNN),它有两个输入(图像和角速度)和一个输出(动作)。

以与评论家相似的方式构造行动者。

imgPath=[imageInputLayer(obsInfo(1).维度,“归一化”,“没有”,“姓名”,obsInfo(1).Name)卷积2层(10,2,“姓名”,“conv1”,“大步走”5,“填充”, 0) reluLayer (“姓名”,“relu1”)完全连接层(2,“姓名”,“fc1”)连接层(3,2,“姓名”,“第1类”) fullyConnectedLayer (hiddenLayerSize1“姓名”,“fc2”)雷卢耶(“姓名”,“relu2”) fullyConnectedLayer (hiddenLayerSize2“姓名”,“fc3”)雷卢耶(“姓名”,“relu3”)完全连接层(1,“姓名”,“fc4”) tanhLayer (“姓名”,“tanh1”) scalingLayer (“姓名”,“scale1”,“规模”,max(actInfo.UpperLimit));dthetaph=[imageInputLayer(obsInfo(2).维度,“归一化”,“没有”,“姓名”, obsInfo (2) . name) fullyConnectedLayer (1,“姓名”,“fc5”,“BiasLearnRateFactor”0,“偏见”, 0)];actorNetwork = layerGraph (imgPath);actorNetwork = addLayers (actorNetwork dthetaPath);actorNetwork = connectLayers (actorNetwork,“fc5”,“cat1/in2”);actorOptions=rlRepresentationOptions(“LearnRate”,1e-04,“GradientThreshold”1);

取消注释下面的行,使用GPU来加速演员CNN的训练。

% actorOptions。UseDevice = gpu的;

使用指定的神经网络和选项创建参与者表示。有关更多信息,请参见决定论呈现

actor=rlDeterministicActorRepresentation(actorNetwork、obsInfo、actInfo、,“观察”, {“pendImage”,“angularRate”},“行动”, {“scale1”}, actorOptions);

查看参与者网络配置。

图绘制(actorNetwork)

图形包含轴。轴包含graphplot类型的对象。

要创建DDPG代理,首先使用rlDDPGAgentOptions

agentOptions=rlDDPGAgentOptions(...“SampleTime”,环境运输署,...“TargetSmoothFactor”,1e-3,...“经验缓冲长度”,1e6,...“DiscountFactor”,0.99,...“MiniBatchSize”,128);agentOptions.NoiseOptions.Variance=0.6;agentOptions.NoiseOptions.VarianceDecayRate=1e-6;

然后使用指定的参与者表示、评论家表示和代理选项创建代理。有关更多信息,请参阅RLDDPG试剂

代理= rlDDPGAgent(演员、评论家、agentOptions);

列车员

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

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

  • 在“事件管理器”对话框中显示培训进度(设置情节选项)。

  • 当经纪人连续十次获得大于-740的移动平均累积奖励时,停止训练。在这一点上,代理可以快速平衡摆在直立的位置,使用最小的控制努力。

有关更多信息,请参见rlTrainingOptions

maxepisodes = 5000;maxsteps = 400;trainingOptions = rlTrainingOptions (...“MaxEpisodes”,每集,...“MaxStepsPerEpisode”maxsteps,...“情节”,“培训进度”,...“停止培训标准”,“AverageReward”,...“StopTrainingValue”, -740);

您可以使用情节在训练或模拟过程中发挥作用。

情节(env)

Figure单摆可视化工具包含2个轴。轴1包含2个直线、矩形类型的对象。轴2包含一个图像类型的对象。

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

doTraining = false;如果溺爱%培训代理人。培训状态=培训(代理、环境、培训选项);其他的%为示例加载预训练代理。装载(“SimplePendulumWithImageDDPG.mat”,“代理人”)结束

模拟DDPG代理

要验证经过训练的agent的性能,请在钟摆环境中对其进行模拟。有关agent模拟的更多信息,请参阅rlSimulationOptions模拟

simOptions = rlSimulationOptions (“MaxSteps”,500);经验=sim(环境、代理、sim选项);

Figure单摆可视化工具包含2个轴。轴1包含2个直线、矩形类型的对象。轴2包含一个图像类型的对象。

另见

相关的话题