主要内容

用预先训练好的Actor网络训练DDPG Agent

这个例子展示了如何在Simulink中训练一个深度确定性策略梯度(DDPG)代理,用于车道保持辅助(LKA)。万博1manbetx为了使训练更有效,DDPG代理的actor被初始化为一个深度神经网络,这个深度神经网络之前是用监督学习训练的。这个演员接受过训练模拟MPC控制器的车道保持辅助例子。

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

万博1manbetx仿真软件模型

车道保持应用的训练目标是通过调整前转向角度使自我车辆沿车道中心线行驶。这个例子使用了相同的自我车辆动力学和传感器动力学培训DQN Agent for Lane保持辅助例子。

m = 1575;总载体质量(千克)工业区= 2875;%惯性矩(MNS ^ 2)如果= 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( - 1 )。

ρ= 0.001;

设置横向偏差的初始值(e1_initial)及相对偏航角(e2_initial)。在培训期间,这些初始条件被设置为每个训练集的随机值。

e1_initial = 0.2;e2_initial = -0.1;

打开模型。

mdl ='rlactorlkamdl';open_system (mdl)

定义模型中RL Agent块的路径。

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

创建环境

为自我车辆创建一个强化学习环境界面。为此,首先定义观察和操作规范。这些观察和动作与在模拟MPC控制器的车道保持辅助

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

观察invfo = rlnumericspec([6 1],...“LowerLimit”,负无穷* (6,1),“UpperLimit”,正* (6,1));observationInfo。Name ='观察'

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

actionInfo = rlNumericSpec([1 1],“LowerLimit”u_min,“UpperLimit”,u_max);ActionInfo.name =.“转向”

在模型中,LKA块的Signal Processing生成观测矢量信号,计算奖励函数,并计算停止信号。

奖励 r t ,提供在每个时间步骤 t ,如下,其中 u 控制输入是否来自前一个时间步骤 t - 1

r t - 1 0 e 1 2 + 5 e 2 2 + 2 u 2 + 5 e ˙ 1 2 + 5 e ˙ 2 2

| e 1 | > 1

创建强化学习环境。

env = rl万博1manbetxSimulinkEnv (mdl agentblk、observationInfo actionInfo);

若要定义横向偏差和相对偏航角的初始条件,请使用匿名函数句柄指定环境复位函数。的localresetfcn.函数,在示例的最后定义,设置初始横向偏差和相对偏航角为随机值。

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

修复随机生成器种子的再现性。

rng (0)

创建DDPG代理

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

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

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

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

这些初始的行动者和评论家网络具有随机的初始参数值。

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

agentOptions = rlDDPGAgentOptions (...'采样时间'Ts,...“TargetSmoothFactor”1 e - 3,...“ExperienceBufferLength”1 e6,...'贴花因子', 0.99,...'minibatchsize', 64年...);代理选项.NoiseOptions.variance = 0.3;AgentOptions.NoiseOptions.varedceCayrate = 1E-5;

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

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

火车代理

作为基线,用一个具有随机初始参数的参与者来训练agent。要培训代理,首先指定培训选项。对于本示例,请使用以下选项。

  • 跑步训练最多50000集,每集最多持续150个时间步。

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

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

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

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

maxepisodes = 50000;maxsteps = T / T;trainingOpts = rlTrainingOptions (...“MaxEpisodes”maxepisodes,...“MaxStepsPerEpisode”,maxsteps,...'verbose'假的,...“阴谋”“训练进步”...“StopTrainingCriteria”“EpisodeReward”...“StopTrainingValue”,-1,...'SaveAgentCriteria'“EpisodeReward”...“SaveAgentValue”,-2.5);

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

doTraining = false;如果用圆形培训代理商。trainingStats =火车(代理,env, trainingOpts);别的%负载净化代理。负载(“ddpgFromScratch.mat”);结尾

火车代理商用净化演员

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

加载预先训练的演员网络。

负载('imitatempcnetactorobjmat''imitatempcnetobj');

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

supervisedActor = rlDeterministicActorRepresentation (imitateMPCNetObj observationInfo actionInfo,...“观察”,imitatempcnetobj.inputnames,“行动”, {'scale1'}, actorOptions);

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

testdata = rand(6,1);

评估深度神经网络。

predictImNN =预测(imitateMPCNetObj testData”);

评估演员。

evaluaterlrep = GetAction(Supervedactor,{TestData});

比较结果。

error = evaluateRLRep{:} - predictImNN . error
错误=0

使用预先训练的actor创建DDPG代理。

代理= rlDDPGAgent (supervisedActor,评论家,agentOptions);

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

trainingOpts。MaxEpisodes = 5000;doTraining = false;如果用圆形培训代理商。trainingStats =火车(代理,env, trainingOpts);别的%负载净化代理。负载(“ddpgFromPretrained.mat”);结尾

利用预先训练好的行动者网络,可以提高DDPG agent的训练效率。总的训练时间和总的训练步数都提高了大约20%。同时,接近最佳结果的训练的集数从大约4500减少到大约3500。

模拟DDPG代理

要验证经过培训的代理的性能,取消注释以下两行代码,并在环境中进行模拟。有关代理模拟的更多信息,请参见rlSimulationOptionsSIM

% simOptions = rlSimulationOptions('MaxSteps', MaxSteps);% experience = sim(env,agent,simOptions);

要检查Simulink模型中训练过的代理的性能,请使用前面定义的初始条件(万博1manbetxe1_initial = 0.2e2_initial = -0.1)。

sim (mdl)

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

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

BdClose(MDL)

本地功能

函数= localResetFcn(中)%设置随机值以进行横向偏差。= setVariable (,“e1_initial”, 0.5 *(1 + 2 *兰德));%设置相对偏航角的随机值。= setVariable (,“e2_initial”, 0.1 *(1 + 2 *兰德));结尾函数代理= loadPRetrateParams(代理,ActorParams,Trantparams)%设置角色参数。演员= getActor(代理);pretrainedActor = setLearnableParameters(演员,actorParams);%设置批评参数。评论家= getCritic(代理);pretrainedCritic = setLearnableParameters(评论家,criticParams);在代理中设置演员和评论家表示。代理= setAttor(代理,预制活动器);代理= setcritic(代理,预留克里数据);结尾

另请参阅

|

相关的话题