主要内容

用掠过的演员网络训练DDPG代理

此示例显示如何在Simulink中培训用于Lane保持辅助(LKA)的深度确定性政策梯度(DDPG)代理。金宝app为了使训练更高效,DDPG代理的演员用一个先前使用监督学习训练的深神经网络初始化。这个训练有素的演员培训了模仿MPC控制器,用于车道保持辅助例子。

有关DDPG代理商的更多信息,请参阅深度确定性政策梯度代理

金宝appSimulink模型

通道保持应用的训练目标是通过调节前转向角来保持沿着车道的中心线行进的自我车辆。该示例使用相同的自我车辆动态和传感器动力学作为培训DQN Agent for Lane保持辅助例子。

m = 1575;总载体质量(千克)IZ = 2875;%惯性矩(MNS ^ 2)lf = 1.2;从重心到前轮胎的%纵向距离(m)lr = 1.6;从重心到后轮胎的%纵向距离(m)cf = 19000;前轮胎的%转弯刚度(n / rad)Cr = 33000;后轮胎的%转弯刚度(n / rad)Vx = 15;%纵向速度(m / s)

定义采样时间,TS.和仿真持续时间,T., 马上。

ts = 0.1;T = 15;

LKA系统的输出是自助式车辆的前转向角。考虑到自我车辆的物理限制,将其转向角约束到[-60,60]度的范围。指定弧度的约束。

U_min = -1.04;U_MAX = 1.04;

将道路的曲率定义为常数0.001( m - 1 )。

rho = 0.001;

为横向偏差设置初始值(E1_initial.)和相对的横摆角度(E2_initial.)。在培训期间,这些初始条件被设置为每个训练集的随机值。

e1_initial = 0.2;e2_initial = -0.1;

打开模型。

mdl ='rlactorlkamdl';Open_System(MDL)

定义模型内的RL代理块的路径。

AppletBlk = [MDL'/ rl代理'];

创建环境

为自我车辆创建强化学习环境界面。为此,首先定义观察和动作规范。这些观察和行动与用于监督学习的特征相同模仿MPC控制器,用于车道保持辅助

对环境的六种观察是横向速度 V. y ,偏航率 ψ ˙ ,横向偏差 E. 1 ,相对横摆角 E. 2 ,前一步的转向角 0. 和曲率 ρ

观察invfo = rlnumericspec([6 1],......'lowerimit',-inf *那些(6,1),'上限',INF * of(6,1));观察info.name ='观察';

环境的动作是前转向角。在创建操作规范对象时指定转向角约束。

ActionInfo = rlnumericspec([1 1],'lowerimit',u_min,'上限',u_max);ActionInfo.name =.'操舵';

在该模型中,LKA块的信号处理创建观察矢量信号,计算奖励功能,并计算停止信号。

奖励 R. T. ,每次都提供 T. ,如下,在哪里 是前一步的控制输入 T. - 1

R. T. = - 1 0. E. 1 2 + 5. E. 2 2 + 2 2 + 5. E. ˙ 1 2 + 5. E. ˙ 2 2

模拟停止何时 | E. 1 | > 1

创建强化学习环境。

ent = rl金宝appsimulinkenv(mdl,agentblk,观察invo,afticeinfo);

要定义横向偏差和相对偏航角的初始条件,请使用匿名功能手柄指定环境复位功能。这localresetfcn.在示例末尾定义的功能将初始横向偏差和相对偏航角设置为随机值。

env.resetfcn = @(in)localresetfcn(in);

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

RNG(0)

创建DDPG代理

DDPG代理近似于使用批评价值函数表示,给定的长期奖励和操作。要创建评论家,首先创建一个具有两个输入,状态和动作的深度神经网络,以及一个输出。有关创建深度神经网络值函数表示的更多信息,请参阅创建策略和值函数表示

评论家= CreatelaneKeepCherticcritic(观察到,ActionInfo);

DDPG代理决定使用演员表示获取观察的行动。要创建演员,首先创建一个具有一个输入(观察)和一个输出(动作)的深神经网络。

[演员,ActorOptions] = CreatelaneKeepingActor(观察到,ActionInfo);

这些初始演员和批评网络具有随机的初始参数值。

要创建DDPG代理,请先指定DDPG代理选项。

AgentOptions = RLDDPGagentOptions(......'采样时间',ts,......'targetsmoothfactor',1e-3,......'经验BufferLength',1E6,......'贴花因子',0.99,......'minibatchsize',64.......);代理选项.NoiseOptions.StandardDeviation = 0.3;代理选项.NoiseOptions.StandardDeviationdecayrate = 1E-5;

使用指定的Actor表示,批评者表示和代理选项创建DDPG代理。有关更多信息,请参阅rlddpgagent.

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

火车代理

作为基线,用具有随机初始参数的演员训练代理。要培训代理,首先指定培训选项。对于此示例,请使用以下选项。

  • 为大多数50000次剧集运行培训,每个集发作最持续150步。

  • 在Episode Manager对话框中显示培训进度。

  • 剧集奖励到达-1时停止培训。

  • 保存累计奖励大于 - 的每一集的代理副本2.5

有关更多信息,请参阅rltringOptions.

maxepisodes = 50000;maxsteps = t / ts;trainingopts = rltringoptions(......'maxepisodes',maxepisodes,......'maxstepperepisode',maxsteps,......'verbose',错误的,......'plots''培训 - 进步'......'stoptrinaincriteria''EpisodeReward'......'stoptriningvalue',-1,......'SaveAgentCriteria''EpisodeReward'......'SaveagentValue',-2.5);

使用该代理商培训火车功能。培训是一种计算密集型进程,需要几个小时才能完成。要在运行此示例的同时节省时间,请通过设置加载预制代理用圆形错误的。训练代理人,套装用圆形真的

dotraining = false;如果用圆形%训练代理人。Trainstats =火车(代理,ENV,Trainpepopts);别的%负载净化代理。加载('ddpgfromscratch.mat');结尾

火车代理商用净化演员

您可以将代理的演员网络设置为先前培训的深度神经网络。对于此示例,请使用深度神经网络模仿MPC控制器,用于车道保持辅助例子。该网络培训以模仿使用监督学习的模型预测控制器。

加载佩带的演员网络。

加载('imitatempcnetactorobjmat''imitatempcnetobj');

使用佩带的演员创建​​演员表示。

监督者= RLDETERMINGISTORTORREPRESENTION(IMITATEMPCNETOBJ,观察INFO,ACTIONINFO,......'观察',imitatempcnetobj.inputnames,'行动',{'scale1'},ActorOptions);

检查网络使用的网络监督者是同一个装满的。为此,请使用相同的随机输入观察评估网络和代理。

testdata = rand(6,1);

评估深神经网络。

predictimnn = predict(imitatempcnetobj,testdata','executionenvironment''中央处理器');

评估演员。

evaluaterlrep = GetAction(Supervedactor,{TestData});

比较结果。

ERROR = EVALUATERLREP {:}  -  Predictimnn
错误=单身的0.

使用佩带的演员创建​​DDPG代理。

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

减少培训剧集的最大数量,并使用该培训剧集和培训代理商火车功能。要在运行此示例的同时节省时间,请通过设置加载预制代理用圆形错误的。训练代理人,套装用圆形真的

TrainingOpts.maxepisodes = 5000;dotraining = false;如果用圆形%训练代理人。Trainstats =火车(代理,ENV,Trainpepopts);别的%负载净化代理。加载('ddpgfrompretrated.mat');结尾

通过使用佩带的演员网络,DDPG代理的训练更有效。总培训时间和培训步骤总数都提高了大约20%。此外,用于接近最佳结果附近的训练的剧集的数量从大约4500到大约3500降低。

模拟DDPG代理

为了验证培训的代理的性能,取消注释以下两行并在环境中模拟它。有关代理模拟的更多信息,请参阅RlsimulationOptions.SIM

%simoptions = rlsimulationoptions('maxsteps',maxsteps);%体验= SIM(ENV,Agent,SimOptions);

要检查Simulink模型中培训代理的性能,请使用先前定义的初始条件模拟模型(金宝appE1_initial = 0.2e2_initial = -0.1.)。

SIM(MDL)

如下所示,横向误差(中图)和相对横摆角(底部曲线)被驱动为零。车辆从中心线(0.2米)和非零偏航角误差(-0.1rad)开始横向偏差。保持车道保持控制器使自助式车辆在大约两秒后沿着中心线行驶。转向角(顶部图)表明控制器在大约两秒钟后达到稳定状态。

关闭Simulink金宝app模型而不保存任何更改。

BdClose(MDL)

本地功能

功能在= localresetfcn(in)%设置随机值以进行横向偏差。在= setVariable(在,'e1_initial',0.5 *( -  1 + 2 * rand));%设置相对偏航角的随机值。在= setVariable(在,'e2_initial',0.1 *( -  1 + 2 * rand));结尾功能代理= loadPRetrateParams(代理,ActorParams,Trantparams)%设置actor参数。Actor = GetAttor(代理);PretRordactor = SetLearnableParameters(演员,ActorParams);%设置批评参数。评论家=克罗里特(代理人);PretRaindcritic = SetLearnableParameters(评论家,批评者);%在代理商中设置演员和批评者表示。代理= setAttor(代理,预制活动器);代理= setcritic(代理,预留克里数据);结尾

也可以看看

|

相关话题