主要内容

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

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

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

万博1manbetxSimulink模型

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

m = 1575;车辆总质量(kg)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.,在几秒钟内。

t = 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代理块的路径。

agentblk = [mdl'/ rl代理'];

创建环境

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

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

observationInfo = 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万博1manbetxsimulinkenv(mdl,agentblk,观察invo,afticeinfo);

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

env。ResetFcn = @(在)localResetFcn(的);

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

RNG(0)

创建DDPG代理

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

评论家= createLaneKeepingCritic (observationInfo actionInfo);

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

(演员,actorOptions) = createLaneKeepingActor (observationInfo actionInfo);

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

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

AgentOptions = RLDDPGagentOptions(......“SampleTime”,ts,......'targetsmoothfactor',1e-3,......'经验BufferLength',1E6,......“DiscountFactor”,0.99,......“MiniBatchSize”,64.......);agentOptions.NoiseOptions.StandardDeviation = 0.3;agentOptions.NoiseOptions.StandardDeviationDecayRate = 1 e-5;

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

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

火车代理

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

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

  • 在“插曲管理器”对话框中显示培训进度。

  • 当章节奖励达到-1时停止训练。

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

有关更多信息,请参见rlTrainingOptions

maxepisodes = 50000;maxsteps = t / ts;trainingopts = rltringOptions(......'maxepisodes',maxepisodes,......'maxstepperepisode'maxsteps,......“详细”,假,......'plots''培训 - 进步'......'stoptrinaincriteria''EpisodeReward'......'stoptriningvalue', 1......“SaveAgentCriteria”'EpisodeReward'......'SaveagentValue', -2.5);

使用该代理商培训训练函数。培训是一个计算密集型的过程,需要几个小时才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理doTraining到目前为止。训练代理人,套装doTraining到目前为止真实

dotraining = false;如果doTraining%训练代理人。Trainstats =火车(代理,ENV,Trainpepopts);其他的%为示例加载预训练的代理。负载('ddpgfromscratch.mat');结束

训练有素的演员

你可以将你的代理的角色网络设置为一个已经被训练过的深度神经网络。对于这个例子,使用深度神经网络模仿MPC控制器,用于车道保持辅助的例子。该网络通过有监督学习来模拟模型预测控制器。

加载佩带的演员网络。

负载(“imitateMPCNetActorObj.mat”“imitateMPCNetObj”);

使用预先训练的参与者创建一个参与者表示。

监督者= RLDETERMINGISTORTORREPRESENTION(IMITATEMPCNETOBJ,观察INFO,ACTIONINFO,......'观察', imitateMPCNetObj。InputNames,'行动',{“Scale1”},ActorOptions);

检查网络使用的网络supervisedActor就是装了子弹的那个。为此,使用相同的随机输入观测值来评估网络和代理。

testData =兰德(6,1);

评估深神经网络。

predictimnn = predict(imitatempcnetobj,testdata','executionenvironment''cpu');

评估的演员。

evaluateRLRep = getAction (supervisedActor {testData});

比较结果。

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

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

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

减少最大的训练次数,并使用训练函数。为了节省运行此示例的时间,请通过设置加载预先训练过的代理doTraining到目前为止。训练代理人,套装doTraining到目前为止真实

TrainingOpts.maxepisodes = 5000;dotraining = false;如果doTraining%训练代理人。Trainstats =火车(代理,ENV,Trainpepopts);其他的%为示例加载预训练的代理。负载('ddpgfrompretrated.mat');结束

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

模拟DDPG代理

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

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

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

SIM(MDL)

如下图所示,横向误差(中间图)和相对偏航角(底部图)都被驱动到零。车辆开始时与中心线有横向偏差(0.2米)和非零偏航角误差(-0.1 rad)。车道保持控制器使自我车辆在大约两秒后沿中心线行驶。转向角度(顶部图)显示控制器在大约2秒后达到稳定状态。

关闭Simulink万博1manbetx模型而不保存任何更改。

bdclose (mdl)

本地函数

功能在= localresetfcn(in)%随机设置横向偏差值。在= setVariable(在,'e1_initial',0.5 *( -  1 + 2 * rand));%设置相对偏航角的随机值。在= setVariable(在,'e2_initial',0.1 *( -  1 + 2 * rand));结束功能代理= loadPretrainedParams(代理,actorParams criticParams)%设置actor参数。Actor = GetAttor(代理);PretRordactor = SetLearnableParameters(演员,ActorParams);%设置批评家参数。评论家=克罗里特(代理人);PretRaindcritic = SetLearnableParameters(评论家,批评者);%在代理商中设置演员和批评者表示。代理= setActor(代理、pretrainedActor);代理= setCritic(代理、pretrainedCritic);结束

另请参阅

|

相关主题