主要内容

火车PPO代理登陆车的车辆

这个例子展示了如何训练近端政策优化(PPO)代理一个离散的行动空间土地空降车辆在地上。PPO代理的更多信息,请参阅近端政策优化(PPO)代理

环境

环境在这个例子中是一个着陆器车辆由三自由度圆盘与质量。汽车有两个推进器前进和旋转运动。重力垂直向下,和没有空气动力阻力的力量。培训的目标是使车辆在指定的位置落在地面上。

对于这个环境:

  • 运动探测器的汽车是有界的X(横轴)从-100年到100米和Y(垂直轴)从0到120米。

  • 目标位置是(0,0)米和目标取向是0弧度。

  • 每个推进器的最大推力为8.5 N。

  • 样品时间是0.1秒。

  • 来自环境的观察车辆的位置 ( x , y ) 、方向 ( θ ) 、速度 ( x ˙ , y ˙ ) ,角速度 ( θ ˙ ) ,阅读一个传感器检测粗糙着陆(1),软着陆(1)或机载(0)条件。1和1之间的观测是标准化的。

  • 环境一个离散的行动空间。在每一个时间步,代理选择下列九个离散行动组:

l , l - - - - - - 没有什么 l , - - - - - - 正确的 ( 地中海 ) l , H - - - - - - 正确的 ( ) , l - - - - - - ( 地中海 ) , - - - - - - ( 地中海 ) + 正确的 ( 地中海 ) , H - - - - - - ( 地中海 ) + 正确的 ( ) H , l - - - - - - ( ) H , - - - - - - ( ) + 正确的 ( 地中海 ) H , H - - - - - - ( ) + 正确的 ( )

在这里, l = 0 0 , = 0 5 H = 1 0 归一化每个推进器推力值。环境一步这些值函数尺度来确定实际推力值。

  • 每一集的开头,车辆从一个随机的初始 x 位置和姿态。高度总是重置为100米。

  • 奖励 r t 当时提供的步骤 t 如下。

r t = ( 年代 t - - - - - - 年代 t - - - - - - 1 ) - - - - - - 0 1 θ t 2 - - - - - - 0 01 ( l t 2 + R t 2 ) + 500年 c 年代 t = 1 - - - - - - ( d ˆ t + v ˆ t 2 ) c = ( y t 0 ) & & ( y ˙ t - - - - - - 0 5 & & | x ˙ t | 0 5 )

在这里:

  • x t , y t , x ˙ t , y ˙ t 是登陆车车辆的位置和速度沿着x和y轴。

  • d ˆ t = x t 2 + y t 2 / d 马克斯 的归一化距离着陆器车辆的目标位置。

  • v ˆ t = x t ˙ 2 + y t ˙ 2 / v 马克斯 是规范化着陆器车辆的速度。

  • d 马克斯 v 马克斯 是最大的距离和速度。

  • θ t 对纵轴方向。

  • l t R t 是左边和右边的行动值推进器。

  • c 是一个稀疏的奖励对水平和垂直软着陆速度小于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。

  • EntropyLossWeight0.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);

图着陆器车辆包含一个坐标轴对象。坐标轴对象包含7矩形类型的对象,线,补丁,文本。

情节的时间历史状态模拟使用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));结束

图包含7轴对象。坐标轴对象1标题x位置(m),包含时间(s), ylabel x包含5线类型的对象。2标题y坐标轴对象位置(m),包含时间(s), ylabel y包含5线类型的对象。坐标轴对象3标题x速度(米/秒),包含时间(s), ylabel dx包含5线类型的对象。4标题y坐标轴对象速度(米/秒),包含时间(s), ylabel dy包含5线类型的对象。坐标轴对象与标题5角(rad),包含时间(s), ylabelθ包含5线类型的对象。6轴对象与标题角速度(rad / s),包含时间(s), ylabel dtheta包含5线类型的对象。坐标轴对象7与标题着陆国旗机载(0),软着陆(1)粗糙着陆(1),包含时间(s), ylabel价值包含5楼梯类型的对象。

另请参阅

功能

对象

相关的例子

更多关于