主要内容

训练DDPG代理控制飞行机器人

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

飞行机器人模型

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

打开模型。

mdl =“rlFlyingRobotEnv”;开放式系统(mdl)

设置初始模型状态变量。

θ0=0;x0=-15;y0=0;

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

ts = 0.4;tf = 30;

对于这个模型:

  • 目标取向是0rad(面向东方的机器人)。

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

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

  • 奖赏 r t 在每次执行步骤时提供

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

r 2 - 100. | 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代理块自动生成集成模型。

集成MDL=“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万博1manbetxSimulinkEnv (integratedMdl agentBlk、observationInfo actionInfo);

重置功能

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

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

修复随机生成器种子以获得再现性。

rng (0)

创建DDPG代理

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

%指定隐藏图层的输出数。hiddenLayerSize = 100;observationPath = [featureInputLayer(numObs,“正常化”“没有”“名字”“观察”) fullyConnectedLayer (hiddenLayerSize“名字”“fc1”) reluLayer (“名字”“relu1”) fullyConnectedLayer (hiddenLayerSize“名字”“取得”)附加层(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。临界网络=连接层(临界网络,“fc5”'添加/ in2');

指定评论家使用的选项rlRepresentationOptions

临界点=rlRepresentationOptions(“LearnRate”1 e 03“梯度阈值”,1);

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

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

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

以与批评家相似的方式构造演员。有关详细信息,请参阅rlDeterministicActorRepresentation

ActorNetWork = [FeatureInputLayer(numobs,“正常化”“没有”“名字”“观察”) fullyConnectedLayer (hiddenLayerSize“名字”“fc1”) reluLayer (“名字”“relu1”) fullyConnectedLayer (hiddenLayerSize“名字”“取得”) reluLayer (“名字”“relu2”) fullyConnectedLayer (hiddenLayerSize“名字”“一个fc3”文件) reluLayer (“名字”“relu3”)完全连接层(numAct,“名字”“fc4”)坦莱尔(“名字”“tanh1”)];actorOptions=rlRepresentationOptions(“LearnRate”1 e-04“梯度阈值”,1); actor=rlDeterministicActorRepresentation(actorNetwork、observationInfo、actionInfo、,...“观察”,{“观察”},“行动”,{“tanh1”},动植物);

要创建DDPG代理,请首先使用指定DDPG代理选项rlDDPGAgentOptions

agentOptions = rlDDPGAgentOptions (...“采样时间”,Ts,...“目标平滑因子”1 e - 3,...“ExperienceBufferLength”1 e6,...“折扣演员”, 0.99,...“MiniBatchSize”, 256);agentOptions.NoiseOptions.Variance = 1 e 1;agentOptions.NoiseOptions.VarianceDecayRate = 1 e-6;

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

代理= rlddpgagent(演员,批评者,代理选项);

列车员

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

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

  • 在“插曲管理器”对话框中显示培训进度(设置阴谋选项)并禁用命令行显示(设置冗长的选择).

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

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

有关更多信息,请参见RL培训选项

最大事件数=20000;最大步骤数=ceil(Tf/Ts);培训选项数=RL培训选项数(...“最大集”maxepisodes,...“MaxStepsPerEpisode”,maxsteps,...“StopOnError”“上”...“冗长”错误的...“阴谋”“训练进步”...“StopTrainingCriteria”“平均向上”...“停止训练值”, 415,...“ScoreAveragingWindowLength”10...“SaveAgentCriteria”“EpisodeReward”...“SaveAgentValue”,415);

使用火车作用培训是一个计算密集的过程,需要几个小时才能完成。要在运行此示例时节省时间,请通过设置doTraining.要亲自培训特工,请设置doTraining符合事实的

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

模拟DDPG代理

要验证经过培训的代理的性能,请在环境中模拟代理。有关代理模拟的更多信息,请参阅RlsimulationOptions.sim卡

simoptions = rlsimulation选项(“MaxSteps”, maxsteps);经验= sim (env,代理,simOptions);

图飞行机器人可视化器包含一个轴对象。轴对象包含三种类型的对象颤抖,补丁,线。

另请参阅

|

相关话题