这个例子展示了如何训练一个深度确定性策略梯度(DDPG)代理来生成在Simulink®中建模的飞行机器人的轨迹。金宝app有关DDPG代理的更多信息,请参见深度确定性政策梯度代理.
本例的强化学习环境是一个飞行机器人,其初始条件围绕一个半径环随机化15.
m。机器人的方向也是随机化的。机器人有两个推进器安装在身体侧面,用于推动并转向机器人。培训目标是将机器人从其初始条件推动到面向东部的起源。
打开模型。
mdl ='rlflyingrobotenv';open_system (mdl)
设置初始模型状态变量。
theta0 = 0;x0 = -15;y0 = 0;
定义采样时间TS.
和模拟持续时间TF.
.
t = 0.4;Tf = 30;
对于此模型:
目标取向是0
Rad(机器人朝东)。
每个执行器的推力是被限制的-1
到1
N
来自环境的观察是机器人的位置,方向(正弦和余弦),速度和角速度。
奖励 提供在每个时间步骤
地点:
为机器人沿x轴的位置。
为机器人在y轴上的位置。
是机器人的方向。
左边推进器的控制力。
是来自右翼推进器的控制力。
是机器人接近目标时的奖励。
当机器人超车时处罚吗20.
m在x或y方向上。模拟终止时
.
是一个惩罚惩罚距离目标和控制努力的距离。
训练一名特工FlyingRobotEnv
模型,使用createIntegrateenv.
函数自动生成与RL Agent块集成的模型,该模型已准备好进行训练。
integratedMdl ='sidentflyflyingrobot';[~, agentBlk observationInfo actionInfo] = createIntegratedEnv (mdl integratedMdl);
在创建环境对象之前,请指定观察和操作规范的名称,并绑定到之间的推力行动-1
和1
.
这个环境的观测信号是 .
numObs = prod (observationInfo.Dimension);observationInfo。Name ='观察';
这种环境的动作信号是 .
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代理通过使用批评价值函数表示来估计长期奖励给出的观察和行动。要创建评论家,首先创建一个具有两个输入(观察和动作)和一个输出的深度神经网络。有关创建神经网络值函数表示的更多信息,请参阅创建策略和值函数表示.
%指定隐藏层的输出数量。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','代理人')结束
为了验证经过训练的代理的性能,可以在环境中模拟该代理。有关代理模拟的更多信息,请参见rlSimulationOptions
和sim卡
.
simOptions = rlSimulationOptions ('maxsteps', maxsteps);经验= sim (env,代理,simOptions);