火车DDPG代理摇摆起来,平衡摆与图像观察
这个例子展示了如何训练深决定性策略梯度(DDPG)代理和平衡一个钟摆图像观测模型在MATLAB®。
DDPG代理的更多信息,请参阅深决定性策略梯度代理。
单摆与MATLAB环境形象
强化学习环境对于这个示例是一个简单的无摩擦摆,最初挂在一个向下的位置。培训的目标是使钟摆直立而不摔倒使用最少的控制工作。
对于这个环境:
向上的平衡摆位置
0
弧度,向下悬挂位置π
弧度。转矩操作信号从代理环境从2到2 N·m。
来自环境的观测图像显示的位置摆的质量和摆角速度。
奖励 ,在每一个时间步,提供
在这里:
的位移角直立位置。
的导数是位移角。
从前面的时间步长控制的努力。
关于这个模型的更多信息,请参阅负载预定义的控制系统环境。
创建环境接口
创建一个预定义的钟摆环境界面。
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)
使用指定选项评论家表示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)
创建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)
火车代理使用火车
函数。培训这个代理是一个计算密集型过程,需要几个小时才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。训练自己代理,集doTraining
来真正的
。
doTraining = false;如果doTraining%培训代理。trainingStats =火车(代理,env, trainingOptions);其他的%负载pretrained代理的例子。负载(“SimplePendulumWithImageDDPG.mat”,“代理”)结束
模拟DDPG代理
验证培训代理的性能,模拟在钟摆的环境。代理模拟更多的信息,请参阅rlSimulationOptions
和sim卡
。
simOptions = rlSimulationOptions (“MaxSteps”,500);经验= sim (env,代理,simOptions);