主要内容

火车DDPG代理控制飞行机器人

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

飞行机器人模型

本例的强化学习环境是一个飞行机器人,其初始条件围绕一个半径环随机化15.m。机器人的方向也是随机化的。机器人有两个推进器安装在身体侧面,用于推动并转向机器人。培训目标是将机器人从其初始条件推动到面向东部的起源。

打开模型。

mdl ='rlflyingrobotenv';open_system (mdl)

设置初始模型状态变量。

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

定义采样时间TS.和模拟持续时间TF.

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. 是一个惩罚惩罚距离目标和控制努力的距离。

创建集成模型

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

integratedMdl ='sidentflyflyingrobot';[~, 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 =(数量,1);ActionInfo.name =.'推动'

创建环境界面

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

env = rl金宝appsimulinkenv(SideveMDL,AppertBlk,ApporationInfo,ActionInfo);

重置功能

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

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

修复随机发生器种子以进行再现性。

RNG(0)

创建DDPG代理

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

%指定隐藏层的输出数量。HiddenLayersize = 100;观察路径= [featureInputLayer(numobs,'正常化'“没有”“名字”'观察') fullyConnectedLayer (hiddenLayerSize“名字”'fc1') reluLayer (“名字”'relu1') fullyConnectedLayer (hiddenLayerSize“名字”“取得”) additionLayer (2“名字”'添加') reluLayer (“名字”'relu2') fullyConnectedLayer (hiddenLayerSize“名字”'fc3') reluLayer (“名字”'relu3')全连接层(1,“名字”'fc4'));actionPath = [featureInputLayer(numAct,'正常化'“没有”“名字”“行动”) fullyConnectedLayer (hiddenLayerSize“名字”'fc5'));%创建图层图。批判性=图表图(观察路径);批评网络= addlayers(批判性,ActionPath);%Connect ActionPath以观察路径。criticNetwork = connectLayers (criticNetwork,'fc5'“添加/ in2”);

指定评论家使用的选项rlRepresentationOptions

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

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

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

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

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

[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);Actor = RLDETerminyActorRepresentation(Actornetwork,观察到,ActionInfo,......'观察', {'观察'},'行动', {'tanh1'},ActorOptions);

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

agentOptions = rlDDPGAgentOptions (......'采样时间'Ts,......“TargetSmoothFactor”,1e-3,......“ExperienceBufferLength”,1e6,......“DiscountFactor”, 0.99,......'迷你atchsize', 256);agentOptions.NoiseOptions.Variance = 1 e 1;agentOptions.NoiseOptions.VarianceDecayRate = 1 e-6;

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

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

火车代理

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

  • 最多运行每个培训20000剧集,每一集最多持久装天花板(Tf / Ts)时间的步骤。

  • 在Episode Manager对话框中显示培训进度(设置绘图选项),并禁用命令行显示(设置详细的选项).

  • 停止训练时,代理收到的平均累积奖励大于415超过10个集发作。此时,代理可以将飞行机器人驱动到目标位置。

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

有关更多信息,请参见rlTrainingOptions

maxepisodes = 20000;maxsteps =装天花板(Tf / Ts);trainingOptions = rlTrainingOptions (......'maxepisodes',maxepisodes,......'maxstepperepisode'maxsteps,......'stoponerror'“在”......'verbose'假的,......“阴谋”“培训 - 进展”......“StopTrainingCriteria”“AverageReward”......“StopTrainingValue”,415,......“ScoreAveragingWindowLength”,10,......'SaveAgentCriteria'“EpisodeReward”......“SaveAgentValue”, 415);

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

doTraining = false;如果doTraining%训练代理人。TrainingStats =火车(代理商,ENV,TRANSICEPTIONS);其他的%加载预磨料的代理。加载('flyingrobotddpg.mat''代理人'结束

模拟DDPG代理

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

simOptions = rlSimulationOptions ('maxsteps', maxsteps);经验= sim (env,代理,simOptions);

Fight Flying Robot Visualizer包含一个轴对象。轴对象包含3型Quiver,Patch,Line的对象。

另请参阅

|

相关的话题