火车PPO代理登陆车的车辆
这个例子展示了如何训练近端政策优化(PPO)代理一个离散的行动空间土地空降车辆在地上。PPO代理的更多信息,请参阅近端政策优化(PPO)代理。
环境
环境在这个例子中是一个着陆器车辆由三自由度圆盘与质量。汽车有两个推进器前进和旋转运动。重力垂直向下,和没有空气动力阻力的力量。培训的目标是使车辆在指定的位置落在地面上。
对于这个环境:
运动探测器的汽车是有界的X(横轴)从-100年到100米和Y(垂直轴)从0到120米。
目标位置是(0,0)米和目标取向是0弧度。
每个推进器的最大推力为8.5 N。
样品时间是0.1秒。
来自环境的观察车辆的位置 、方向 、速度 ,角速度 ,阅读一个传感器检测粗糙着陆(1),软着陆(1)或机载(0)条件。1和1之间的观测是标准化的。
环境一个离散的行动空间。在每一个时间步,代理选择下列九个离散行动组:
在这里,
和
归一化每个推进器推力值。环境一步
这些值函数尺度来确定实际推力值。
每一集的开头,车辆从一个随机的初始 位置和姿态。高度总是重置为100米。
奖励 当时提供的步骤 如下。
在这里:
, , , 是登陆车车辆的位置和速度沿着x和y轴。
的归一化距离着陆器车辆的目标位置。
是规范化着陆器车辆的速度。
和 是最大的距离和速度。
对纵轴方向。
和 是左边和右边的行动值推进器。
是一个稀疏的奖励对水平和垂直软着陆速度小于0.5 m / s。
创造MATLAB环境
创建一个MATLAB环境着陆器车辆使用探测器LanderVehicle
类。
env = LanderVehicle ()
L1 env = LanderVehicle属性:质量:1:10 L2: 5重力:9.8060 ThrustLimits: 8.5000 [0] Ts: 0.1000状态:x1双[6]LastAction: [2 x1双]LastShaping: 0 DistanceIntegral: 0 VelocityIntegral: 0 TimeCount: 0
从环境中获得观察和操作规范。
actInfo = getActionInfo (env);obsInfo = getObservationInfo (env);
培训可以敏感的初始网络权重和偏见,和结果可以随不同的值。随机初始化网络权值小的值在这个例子。确保修复种子再现性的随机发生器。
rng (0)
创建PPO代理
PPO代理使用一个参数化的值函数近似者估计价值的政策。值函数批评以当前观测作为输入并返回一个标量输出(估计折扣累积长期奖励政策后的状态对应于当前观察)。
在评论家,模型参数化的值函数使用一个输入神经网络层(接收观测通道的内容,规定obsInfo
)和一个输出层(返回标量值)。请注意,刺激(obsInfo.Dimension)
返回总数的维度观察空间无论观察空间是一个列向量,行向量或矩阵。
numObs = prod (obsInfo.Dimension);criticLayerSizes = (400 - 300);actorLayerSizes = (400 - 300);
层的网络定义为一个数组对象。
criticNetwork = [featureInputLayer numObs fullyConnectedLayer (criticLayerSizes (1),…重量=√2 / numObs *…(兰德(criticLayerSizes (1), numObs) -0.5),…偏见= 1 e - 3 * 1 (criticLayerSizes (1), 1)) reluLayer fullyConnectedLayer (criticLayerSizes (2),…重量=√2 / criticLayerSizes (1)) *…(兰德(criticLayerSizes (2), criticLayerSizes (1)) -0.5),…偏见= 1 e - 3 * 1 (criticLayerSizes (2), 1)) reluLayer fullyConnectedLayer (1,…重量=√2 / criticLayerSizes (2)) *…(兰德(1,criticLayerSizes (2)) -0.5),…偏见= 1 e - 3)];
转换为dlnetwork
并显示权重的数量。
criticNetwork = dlnetwork (criticNetwork);总结(criticNetwork)
初始化:真很多可学的:123.8 k输入:1“输入”7功能
创建评论家接近者对象使用criticNet
并观察规范。价值函数近似者的更多信息,请参阅rlValueFunction
。
评论家= rlValueFunction (criticNetwork obsInfo);
政策使用参数化随机梯度代理政策,离散行动空间由一个离散实现分类的演员。这演员需要一个观察作为输入并返回输出随机行动采样(在有限数量的可能的行动)从分类概率分布。
模型中的参数化政策的演员,使用一个输入神经网络层(接收环境观察频道的内容,规定obsInfo
)和一个输出层。输出层必须返回一个向量的概率为每个可能的行动,是指定的actInfo
。请注意,元素个数(actInfo.Dimension)
返回的元素数量的离散动作空间。
层的网络定义为一个数组对象。
actorNetwork = [featureInputLayer numObs fullyConnectedLayer (actorLayerSizes (1),…重量=√2 / numObs *…(兰德(actorLayerSizes (1), numObs) -0.5),…偏见= 1 e - 3 * 1 (actorLayerSizes (1), 1)) reluLayer fullyConnectedLayer (actorLayerSizes (2),…重量=√2 / actorLayerSizes (1)) *…(兰德(actorLayerSizes (2), actorLayerSizes (1)) -0.5),…偏见= 1 e - 3 * 1 (actorLayerSizes (2), 1)) reluLayer fullyConnectedLayer(元素个数(actInfo.Elements),…重量=√2 / actorLayerSizes (2)) *…(兰德(元素个数(actInfo.Elements) actorLayerSizes (2)) -0.5),…偏见= 1 e - 3 *的(元素个数(actInfo.Elements), 1)) softmaxLayer);
转换为dlnetwork
并显示权重的数量。
actorNetwork = dlnetwork (actorNetwork);总结(actorNetwork)
初始化:真很多可学的:126.2 k输入:1“输入”7功能
创建一个演员使用actorNet
和观察和操作规范。离散分类演员的更多信息,请参阅rlDiscreteCategoricalActor
。
演员= rlDiscreteCategoricalActor (actorNetwork obsInfo actInfo);
指定培训选项的评论家和演员使用rlOptimizerOptions
。
actorOpts = rlOptimizerOptions (LearnRate = 1的军医);criticOpts = rlOptimizerOptions (LearnRate = 1的军医);
指定代理hyperparameters使用rlPPOAgentOptions
对象,包括演员的培训方案和评论家。
agentOpts = rlPPOAgentOptions (…ExperienceHorizon = 600,…ClipFactor = 0.02,…EntropyLossWeight = 0.01,…ActorOptimizerOptions = actorOpts,…CriticOptimizerOptions = criticOpts,…NumEpoch = 3,…AdvantageEstimateMethod =“gae”,…GAEFactor = 0.95,…SampleTime = 0.1,…DiscountFactor = 0.997);
对于这些hyperparameters:
代理收集经验,直到达到600年的经验地平线步骤或事件128年终止,然后从mini-batches火车3时代的经历。
改善训练稳定,使用一个目标函数剪辑0.02倍。
折现系数值0.997促进长期的回报。
评论家输出方差减少通过使用广义优势估计方法GAE因子为0.95。
的
EntropyLossWeight
0.01提高勘探在训练。
创建PPO代理。
代理= rlPPOAgent(演员、评论家、agentOpts);
或者,您可以创建代理,然后访问其选择对象和修改选项使用点符号。
火车代理
火车PPO代理、指定以下培训选项。
运行培训最多20000集,每集持续最多600的时间步骤。
连续停止训练时的平均回报超过100集是450或者更多。
trainOpts = rlTrainingOptions (…MaxEpisodes = 20000,…MaxStepsPerEpisode = 600,…情节=“训练进步”,…StopTrainingCriteria =“AverageReward”,…StopTrainingValue = 430,…ScoreAveragingWindowLength = 100);
火车代理使用火车
函数。由于环境的复杂性,培训过程是计算密集型和需要几个小时才能完成。节省时间在运行这个例子中,加载一个pretrained代理设置doTraining
来假
。
doTraining = false;如果doTraining trainingStats =火车(代理,env, trainOpts);其他的负载(“landerVehicleAgent.mat”);结束
训练一个示例如下所示。实际结果可能会有所不同,因为随机性的培训过程。
模拟
情节着陆器的环境首先创建一个可视化工具。
情节(env)
设置随机种子模拟再现性。
rng (10)
建立模拟选项执行5模拟。更多信息见rlSimulationOptions
。
simOptions = rlSimulationOptions (MaxSteps = 600);simOptions。NumSimulations = 5;
模拟环境内的训练有素的特工。更多信息见sim卡
。
经验= sim (env,代理,simOptions);
情节的时间历史状态模拟使用helper函数plotLanderVehicleTrajectory
提供的示例文件夹。
%的观测图obsToPlot = [“x”,“y”,“dx”,“dy”,“θ”,“dtheta”,“登陆”];%创建一个图f =图();f.Position (3:4) = (800、1000);%创建一个平铺的情节布局t = tiledlayout (f, 4 2 TileSpacing =“紧凑”);%画出数据为ct = 1:元素个数(obsToPlot) ax = nexttile (t);plotLanderVehicleTrajectory (ax,经验,env, obsToPlot (ct));结束