主要内容

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

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

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

简单的摆与图像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 是前一个时间步长的控制效果。

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

创建环境界面

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

环境= rlPredefinedEnv(“SimplePendulumWithImage-Continuous”
env = SimplePendlumWithImageContinuousAction with properties: Mass: 1 RodLength: 1 RodInertia: 0 Gravity: 9.8100 DampingRatio: 0 MaximumTorque: 2 Ts: 0.0500 State: [2x1 double] Q: [2x2 double] R: 1.0000 -03

该界面具有连续的作用空间,在该空间中,药剂可以施加-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) convolution2dLayer (10 2“名字”“conv1”“步”5,“填充”, 0) reluLayer (“名字”“relu1”) fullyConnectedLayer (2“名字”“fc1”) concatenationLayer (3 2“名字”“cat1”) fullyConnectedLayer (hiddenLayerSize1“名字”“取得”) reluLayer (“名字”“relu2”) fullyConnectedLayer (hiddenLayerSize2“名字”“一个fc3”文件) additionLayer (2“名字”“添加”) reluLayer (“名字”“relu3”) fullyConnectedLayer (1,“名字”“fc4”));dthetaPath = [imageInputLayer(obsInfo(2).]维度,“归一化”“没有”“名字”, 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);临界网络= connectLayers(临界网络,“fc5”“cat1 / in2”);临界网络= connectLayers(临界网络,“fc6”“添加/ in2”);

查看关键网络配置。

图绘制(criticNetwork)

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

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

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

取消注释下一行,使用GPU加速训练评论家CNN。有关支持的gpu的更多信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱)

% criticOptions。UseDevice = 'gpu';

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

评论= rlQValueRepresentation(批评网络,obsInfo,actInfo,...“观察”, {“pendImage”“angularRate”},“行动”, {“行动”}, criticOptions);

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

用与评论家相似的方式来构建演员。

imgPath = [imageInputLayer(obsInfo(1).]维度,“归一化”“没有”“名字”, obsInfo (1) . name) convolution2dLayer (10 2“名字”“conv1”“步”5,“填充”, 0) reluLayer (“名字”“relu1”) fullyConnectedLayer (2“名字”“fc1”) concatenationLayer (3 2“名字”“cat1”) fullyConnectedLayer (hiddenLayerSize1“名字”“取得”) reluLayer (“名字”“relu2”) fullyConnectedLayer (hiddenLayerSize2“名字”“一个fc3”文件) reluLayer (“名字”“relu3”) fullyConnectedLayer (1,“名字”“fc4”) tanhLayer (“名字”“tanh1”) scalingLayer (“名字”“scale1”“规模”马克斯(actInfo.UpperLimit)));dthetaPath = [imageInputLayer(obsInfo(2).]维度,“归一化”“没有”“名字”, obsInfo (2) . name) fullyConnectedLayer (1,“名字”“fc5”“BiasLearnRateFactor”0,“偏见”, 0)];actorNetwork = layerGraph(imgPath);actorNetwork = addLayers(actorNetwork,dthetaPath);actorNetwork = connectLayers“fc5”“cat1 / in2”);actorOptions = rlRepresentationOptions(“LearnRate”1 e-04“GradientThreshold”1);

取消注释以下行使用GPU加速训练演员CNN。

% actorOptions。UseDevice = 'gpu';

使用指定的神经网络和选项创建角色表示。有关更多信息,请参见rlDeterministicActorRepresentation

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

查看角色网络配置。

图绘制(actorNetwork)

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

要创建DDPG代理,首先使用指定DDPG代理选项rlDDPGAgentOptions

agentOptions = rlDDPGAgentOptions(...“SampleTime”env。Ts,...“TargetSmoothFactor”1 e - 3,...“ExperienceBufferLength”1 e6,...“DiscountFactor”, 0.99,...“MiniBatchSize”, 128);agentOptions.NoiseOptions.Variance = 0.6;agentOptions.NoiseOptions.VarianceDecayRate = 1e-6;

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

agent = rlDDPGAgent(actor,批评家,agentOptions);

火车代理

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

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

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

  • 当智能体连续十集收到的移动平均累积奖励大于-740时停止训练。在这一点上,代理可以用最小的控制努力快速平衡摆在直立位置。

有关更多信息,请参见rlTrainingOptions

Maxepisodes = 5000;Maxsteps = 400;trainingOptions = rlTrainingOptions(...“MaxEpisodes”maxepisodes,...“MaxStepsPerEpisode”maxsteps,...“阴谋”“训练进步”...“StopTrainingCriteria”“AverageReward”...“StopTrainingValue”, -740);

你可以用情节在训练或模拟中发挥作用。

情节(env)

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

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

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

模拟DDPG Agent

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

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

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

另请参阅

相关的话题