主要内容

火车DDPG代理摇摆起来,平衡摆与图像观察

这个例子展示了如何训练深决定性策略梯度(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重力:9.8100 DampingRatio: 0 MaximumTorque: 2 Ts: 0.0500状态:[2 x1双]问:[2 x2双]R: 1.0000 e 03

接口有一个持续的行动空间,代理可以应用2 - 2 N·m之间的转矩。

从环境中获得的观察和行动规范的接口。

obsInfo = getObservationInfo (env);actInfo = getActionInfo (env);

解决随机发生器再现性的种子。

rng (0)

创建DDPG代理

DDPG代理接近长期奖励,观察和操作,使用批评价值函数表示。创建评论家,首先创建一个深卷积神经网络(CNN)和三个输入(图像、角速度和行动)和一个输出。创建表示更多的信息,请参阅创建政策和价值功能

hiddenLayerSize1 = 400;hiddenLayerSize2 = 300;imgPath = [imageInputLayer obsInfo .Dimension (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) .Dimension,“归一化”,“没有”,“名字”,obsInfo (2) . name) fullyConnectedLayer (1,“名字”,“fc5”,“BiasLearnRateFactor”0,“偏见”,0)];actPath = [imageInputLayer actInfo .Dimension (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)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

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

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

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

% criticOptions。UseDevice = gpu的;

创建一个使用指定的评论家表示神经网络和选项。您还必须指定动作和评论家的观测信息,你从环境中获取接口。有关更多信息,请参见rlQValueRepresentation

评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,“观察”,{“pendImage”,“angularRate”},“行动”,{“行动”},criticOptions);

DDPG代理决定哪些操作使用演员表示给定的观测。创建演员,首先创建一个深卷积神经网络(CNN)和两个输入(图像和角速度)和一个输出(行动)。

构建演员评论家以类似的方式。

imgPath = [imageInputLayer obsInfo .Dimension (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) .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 (“LearnRate”1 e-04“GradientThreshold”1);

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

% actorOptions。UseDevice = gpu的;

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

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

查看演员网络配置。

图绘制(actorNetwork)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

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

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

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

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

火车代理

培训代理商,首先指定培训选项。对于这个示例,使用以下选项。

  • 运行每个培训最多5000集,每集持久最多400时间步。

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

  • 停止训练当代理接收到移动平均累积奖励大于-740连续在十集。在这一点上,代理可以快速平衡钟摆在直立位置使用最少的控制工作。

有关更多信息,请参见rlTrainingOptions

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

您可以通过使用可视化摆情节函数在训练或模拟。

情节(env)

图单摆可视化工具包含2轴对象。坐标轴对象1包含2线类型的对象,长方形。坐标轴对象2包含一个类型的对象的形象。

火车代理使用火车函数。培训这个代理是一个计算密集型过程,需要几个小时才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining。训练自己代理,集doTraining真正的

doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainingOptions);其他的%负载pretrained代理的例子。负载(“SimplePendulumWithImageDDPG.mat”,“代理”)结束

模拟DDPG代理

验证培训代理的性能,模拟在钟摆的环境。代理模拟更多的信息,请参阅rlSimulationOptionssim卡

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

图单摆可视化工具包含2轴对象。坐标轴对象1包含2线类型的对象,长方形。坐标轴对象2包含一个类型的对象的形象。

另请参阅

相关的话题