火车DDPG代理摇摆起来,平衡摆与图像观察
这个例子展示了如何训练深决定性策略梯度(DDPG)代理和平衡一个钟摆图像观测模型在MATLAB®。
DDPG代理的更多信息,请参阅深决定性策略梯度(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)和三个输入层(一个用于每个观测通道,是指定的obsInfo
,行动的其他渠道,指定的actInfo
)和一个输出层(返回标量值)。
定义每个网络路径层对象数组,并将名称分配给每条路径的输入和输出层,以及添加和连接层。这些名字让你连接路径,然后明确关联网络的输入和输出通道层与适当的环境。创建表示更多的信息,请参阅创建政策和价值功能。
hiddenLayerSize1 = 400;hiddenLayerSize2 = 300;%图像输入路径imgPath = [imageInputLayer obsInfo .Dimension (1),…归一化=“没有”,…Name = obsInfo (1) . Name) convolution2dLayer(10 2步= 5,填充= 0)reluLayer fullyConnectedLayer (2) concatenationLayer(3 2名=“cat1”)fullyConnectedLayer (hiddenLayerSize1) reluLayer fullyConnectedLayer hiddenLayerSize2 additionLayer (Name =“添加”)reluLayer fullyConnectedLayer (Name =“fc4”));% d(θ/ dt输入路径dthPath = [imageInputLayer obsInfo (2) .Dimension,…归一化=“没有”,…Name = obsInfo (2) . Name) fullyConnectedLayer (Name =“fc5”,…BiasLearnRateFactor = 0,…偏见= 0)];%的行动路径actPath = [imageInputLayer actInfo .Dimension (1),…归一化=“没有”,…Name =“行动”)fullyConnectedLayer (hiddenLayerSize2…Name =“fc6”,…BiasLearnRateFactor = 0,…偏见= 0 (hiddenLayerSize2 1)));%装配路径criticNetwork = layerGraph (imgPath);criticNetwork = addLayers (criticNetwork dthPath);criticNetwork = addLayers (criticNetwork actPath);criticNetwork = connectLayers (criticNetwork,“fc5”,“cat1 / in2”);criticNetwork = connectLayers (criticNetwork,“fc6”,“添加/ in2”);
查看评论家网络配置和显示参数的数量。
图绘制(criticNetwork)
%总结(criticNetwork)
创建一个使用指定的评论家表示神经网络和观测规范和环境的行动。通过附加参数也网络层的名称与观察和行动通道。有关更多信息,请参见rlQValueFunction
。
评论家= rlQValueFunction (criticNetwork,…obsInfo actInfo,…ObservationInputNames = {“pendImage”,“angularRate”},…ActionInputNames = {“行动”});
DDPG代理使用参数化确定性政策连续动作空间,这是由一个连续实现确定的演员。连续确定的演员为连续实现参数化确定的政策操作空间。这个演员需要当前观测作为输入并返回输出一个观察的行动是一个确定性的函数。
模型中的参数化政策的演员,用神经网络和两个输入层(接收两个环境观察频道的内容,规定obsInfo
)和一个输出层(返回行动对环境行动通道,是指定的actInfo
)。
层的网络定义为一个数组对象。
%图像输入路径imgPath = [imageInputLayer obsInfo .Dimension (1),…归一化=“没有”,…Name = obsInfo (1) . Name) convolution2dLayer(10 2步= 5,填充= 0)reluLayer fullyConnectedLayer (Name =“fc1”)concatenationLayer(3 2名=“cat1”)fullyConnectedLayer (hiddenLayerSize1 Name =“取得”)reluLayer fullyConnectedLayer (hiddenLayerSize2 Name =“一个fc3”文件)reluLayer fullyConnectedLayer (Name =“fc4”)tanhLayer scalingLayer (Name =“scale1”,…规模= max (actInfo.UpperLimit)));% d(θ/ dt输入层dthPath = [imageInputLayer obsInfo (2) .Dimension,…归一化=“没有”,…Name = obsInfo (2) . Name) fullyConnectedLayer (1,…Name =“fc5”,…BiasLearnRateFactor = 0,…偏见= 0)];%组装演员网络actorNetwork = layerGraph (imgPath);actorNetwork = addLayers (actorNetwork dthPath);actorNetwork = connectLayers (actorNetwork,“fc5”,“cat1 / in2”);
创建一个演员使用指定的神经网络。有关更多信息,请参见rlContinuousDeterministicActor
。
演员= rlContinuousDeterministicActor (actorNetwork,…obsInfo actInfo,…ObservationInputNames = {“pendImage”,“angularRate”});
查看演员网络配置和显示权重的数量。
图绘制(actorNetwork)
%总结(actorNetwork)
为演员和评论家使用指定选项rlOptimizerOptions
。
criticOptions = rlOptimizerOptions (LearnRate = 1 e 03, GradientThreshold = 1);actorOptions = rlOptimizerOptions (LearnRate = 1 e-04, GradientThreshold = 1);
培训使用GPU性能是影响批量大小、网络结构、硬件本身。因此,使用GPU并不总是保证性能更好的培训。有关支持gpu的更多信息,请参阅金宝appGPU计算的需求(并行计算工具箱)。
取消注释以下行训练使用GPU评论家。
% criticOptions。UseDevice = " gpu”;
取消注释以下行训练演员使用GPU。
% actorOptions。UseDevice = " gpu”;
使用指定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;
指定函数近似者对象的培训方案。
agentOptions。CriticOptimizerOptions = criticOptions;agentOptions。ActorOptimizerOptions = actorOptions;
然后创建代理使用指定的演员表示,评论家表示,和代理的选择。有关更多信息,请参见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);
另请参阅
功能
对象
rlDDPGAgent
|rlDDPGAgentOptions
|rlQValueFunction
|rlContinuousDeterministicActor
|rlTrainingOptions
|rlSimulationOptions
|rlOptimizerOptions