主要内容

训练DDPG Agent控制飞行机器人

这个例子展示了如何训练一个深度确定性策略梯度(DDPG)代理来生成在Simulink®中建模的飞行机器人的轨迹。金宝app有关DDPG代理的更多信息,请参见深度确定性策略梯度代理

飞行机器人模型

本例的强化学习环境是一个飞行机器人,其初始条件围绕一个半径环随机化15m.机器人的方向也是随机的。机器人在身体的一侧安装了两个推进器,用来推动和控制机器人。训练目标是将机器人从初始状态驱动到面向东方的原点。

打开模型。

mdl =“rlFlyingRobotEnv”;open_system (mdl)

设置初始模型状态变量。

theta0 = 0;x0 = -15;y0 = 0;

定义样本时间Ts以及模拟持续时间特遣部队

t = 0.4;Tf = 30;

对于这个模型:

  • 目标取向是0Rad(机器人朝东)。

  • 每个执行器的推力是被限制的-11N

  • 从环境中观察到的是机器人的位置、方向(方向的正弦和余弦)、速度和角速度。

  • 奖励 r t 提供在每个时间步骤

r 1 10 x t 2 + y t 2 + θ t 2 < 0 5

r 2 - One hundred. | x t | 20. | | | y t | 20.

r 3. - 0 2 R t - 1 + l t - 1 2 + 0 3. R t - 1 - l t - 1 2 + 0 03 x t 2 + 0 03 y t 2 + 0 02 θ t 2

r t r 1 + r 2 + r 3.

地点:

  • x t 为机器人沿x轴的位置。

  • y t 为机器人在y轴上的位置。

  • θ t 为机器人的方向。

  • l t - 1 左边推进器的控制力。

  • R t - 1 是右侧推进器的控制力。

  • r 1 是机器人接近目标时的奖励。

  • r 2 当机器人超车时处罚吗20.M在x或y方向上。当 r 2 < 0

  • r 3. 是QR惩罚,惩罚距离目标和控制努力的距离。

创建集成模型

训练一名特工FlyingRobotEnv模型,使用createIntegratedEnv函数自动生成与RL Agent块集成的模型,该模型已准备好进行训练。

integratedMdl =“IntegratedFlyingRobot”;[~, agentBlk observationInfo actionInfo] = createIntegratedEnv (mdl integratedMdl);

操作和观察

在创建环境对象之前,请指定观察和操作规范的名称,并绑定两者之间的推力操作-11

这个环境的观测信号是 观察 x y x ˙ y ˙ θ 因为 θ θ ˙ T

numObs = prod (observationInfo.Dimension);observationInfo。Name =“观察”

这个环境的动作信号是 行动 T R T l T

numAct = prod (actionInfo.Dimension);actionInfo。lowerLimit = -ones(numAct,1); actionInfo.UpperLimit = ones(numAct,1); actionInfo.Name =“手臂”

创建环境接口

使用集成模型为飞行机器人创建环境界面。

env = rl金宝appSimulinkEnv (integratedMdl agentBlk、observationInfo actionInfo);

重置功能

创建一个自定义重置函数,使机器人沿半径环的初始位置随机化15M和初始方向。关于复位功能的详细介绍请参见flyingRobotResetFcn

env。ResetFcn = @(in) flyingRobotResetFcn(in);

修复随机生成器种子的再现性。

rng (0)

创建DDPG代理

DDPG代理通过使用批判价值函数表示来近似给定观察和行动的长期奖励。要创建批评家,首先要创建一个有两个输入(观察和行动)和一个输出的深度神经网络。有关创建神经网络值函数表示的更多信息,请参见创建策略和价值功能表示

%指定隐藏层的输出数量。hiddenLayerSize = 100;observationPath = [featureInputLayer(numObs,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (hiddenLayerSize“名字”“fc1”) reluLayer (“名字”“relu1”) fullyConnectedLayer (hiddenLayerSize“名字”“取得”) additionLayer (2“名字”“添加”) reluLayer (“名字”“relu2”) fullyConnectedLayer (hiddenLayerSize“名字”“一个fc3”文件) reluLayer (“名字”“relu3”) fullyConnectedLayer (1,“名字”“fc4”));actionPath = [featureInputLayer(numAct,“归一化”“没有”“名字”“行动”) fullyConnectedLayer (hiddenLayerSize“名字”“fc5”));%创建图层图。criticNetwork = layerGraph (observationPath);criticNetwork = addLayers (criticNetwork actionPath);%连接actionPath到observationPath。criticNetwork = connectLayers (criticNetwork,“fc5”“添加/ in2”);

指定评论家使用的选项rlRepresentationOptions

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

使用指定的神经网络和选项创建批评家表示。您还必须为评论家指定行动和观察规范。有关更多信息,请参见rlQValueRepresentation

评论家= rlQValueRepresentation (criticNetwork observationInfo actionInfo,...“观察”, {“观察”},“行动”, {“行动”}, criticOptions);

DDPG代理通过使用参与者表示来决定对给定的观察采取什么行动。要创建参与者,首先要创建一个具有一个输入(观察)和一个输出(动作)的深度神经网络。

把行动者想像成与批评家相似的人。有关更多信息,请参见rlDeterministicActorRepresentation

[featureInputLayer(nummobs,“归一化”“没有”“名字”“观察”) fullyConnectedLayer (hiddenLayerSize“名字”“fc1”) reluLayer (“名字”“relu1”) fullyConnectedLayer (hiddenLayerSize“名字”“取得”) reluLayer (“名字”“relu2”) fullyConnectedLayer (hiddenLayerSize“名字”“一个fc3”文件) reluLayer (“名字”“relu3”) fullyConnectedLayer (numAct“名字”“fc4”) tanhLayer (“名字”“tanh1”));actorOptions = rlRepresentationOptions (“LearnRate”1 e-04“GradientThreshold”1);演员= rlDeterministicActorRepresentation (actorNetwork observationInfo actionInfo,...“观察”, {“观察”},“行动”, {“tanh1”}, actorOptions);

要创建DDPG代理,首先使用rlDDPGAgentOptions

agentOptions = rlDDPGAgentOptions (...“SampleTime”Ts,...“TargetSmoothFactor”1 e - 3,...“ExperienceBufferLength”1 e6,...“DiscountFactor”, 0.99,...“MiniBatchSize”, 256);agentOptions.NoiseOptions.StandardDeviation = 1 e 1;agentOptions.NoiseOptions.StandardDeviationDecayRate = 1 e-6;

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

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

火车代理

要培训代理,首先指定培训选项。对于本例,使用以下选项:

  • 每次训练最多跑一次20000每集最多持续一集装天花板(Tf / Ts)时间的步骤。

  • 在“插曲管理器”对话框中显示培训进度(设置情节选项),并禁用命令行显示(设置详细的选项).

  • 停止训练时,代理收到的平均累积奖励大于415连续10集以上。此时agent可以驱动飞行机器人到达目标位置。

  • 为累积奖励大于的每一集保存一份代理副本415

有关更多信息,请参见rlTrainingOptions

maxepisodes = 20000;maxsteps =装天花板(Tf / Ts);trainingOptions = rlTrainingOptions (...“MaxEpisodes”maxepisodes,...“MaxStepsPerEpisode”maxsteps,...“StopOnError”“上”...“详细”假的,...“阴谋”“训练进步”...“StopTrainingCriteria”“AverageReward”...“StopTrainingValue”, 415,...“ScoreAveragingWindowLength”10...“SaveAgentCriteria”“EpisodeReward”...“SaveAgentValue”, 415);

训练代理人使用火车函数。培训是一个计算密集型的过程,需要几个小时才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理doTraining.自己训练代理人,设置doTraining真正的

doTraining = false;如果doTraining培训代理商。trainingStats =火车(代理,env, trainingOptions);其他的%加载示例的预训练代理。负载(“FlyingRobotDDPG.mat”“代理”结束

模拟DDPG代理

为了验证经过训练的代理的性能,可以在环境中模拟该代理。有关代理模拟的更多信息,请参见rlSimulationOptionssim卡

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

图飞行机器人可视化器包含一个轴。轴包含三种类型的物体颤抖,贴片,线。

另请参阅

|

相关的话题