主要内容

用预训练的Actor网络训练DDPG代理

此示例显示了如何在Simulink中为车道保持辅助(LKA)训练深度确定性策略梯度(DDPG)代理。为了提高训练效率,DDPG代理的参与者使用一个深度神经网络进行初始化,该神经网络以前使用监督学习进行过训练。该参与者在万博1manbetx用于车道保持辅助的模拟MPC控制器的例子。

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

万博1manbetxSimulink模型

车道保持应用程序的培训目标是通过调整前转向角来保持ego车辆沿车道中心线行驶。此示例使用和前转向角相同的ego车辆动力学和传感器动力学对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_最小值=-1.04;u_最大值=1.04;

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

rho=0.001;

设置横向偏差的初始值(e1_首字母)和相对偏航角(e2_首字母).在训练期间,这些初始条件被设置为每个训练集的随机值。

e1_initial = 0.2;e2_initial = -0.1;

打开模型。

mdl =“rlActorLKAMdl”; 开放式系统(mdl)

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

agentblk = [mdl“/RL代理”];

创造环境

为ego车辆创建强化学习环境界面。为此,首先定义观察和行动规范。这些观察和行动与中使用的监督学习功能相同用于车道保持辅助的模拟MPC控制器.

对环境的六个观测是横向速度 v Y ,横摆率 ψ ˙ ,横向偏移 E 1. ,相对偏航角 E 2. ,上一步的转向角 U 0 ,和曲率 ρ .

observationInfo=rlNumericSpec([6 1],...“LowerLimit”,-inf*one(6,1),“上限”,inf*one(6,1));observationInfo.Name=“观察”;

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

actionInfo=rlNumericSpec([1],“LowerLimit”,吴敏,“上限”, u_max);actionInfo。Name =“转向”;

在该模型中,LKA块的信号处理创建观测向量信号,计算奖励函数,并计算停止信号。

奖励 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=rlSi万博1manbetxmulinkEnv(mdl、agentblk、observationInfo、actionInfo);

要定义横向偏差和相对偏航角的初始条件,请使用匿名函数句柄指定环境重置函数localResetFcn函数(在示例末尾定义)将初始横向偏差和相对偏航角设置为随机值。

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

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

rng(0)

创建DDPG代理

DDPG代理使用临界值函数表示法近似给定观察和行动的长期回报。要创建临界值,首先创建一个包含两个输入、状态和行动以及一个输出的深度神经网络。有关创建深度神经网络值函数表示法的更多信息,请参阅创建策略和值函数表示.

评论家= createLaneKeepingCritic (observationInfo actionInfo);

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

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

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

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

agentOptions=rlDDPGAgentOptions(...“SampleTime”,Ts,...“目标平滑因子”,1e-3,...“经验缓冲长度”,1e6,...“DiscountFactor”,0.99,...“MiniBatchSize”,64...);agentOptions.NoiseOptions.Variance = 0.3;agentOptions.NoiseOptions.VarianceDecayRate = 1 e-5;

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

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

火车代理

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

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

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

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

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

有关更多信息,请参见rlTrainingOptions.

最大事件数=50000;最大步骤数=T/Ts;训练点=RL训练选项(...“MaxEpisodes”,每集,...“MaxStepsPerEpisode”maxsteps,...“详细”错误的...“情节”,“培训进度”,...“停止培训标准”,“情节报酬”,...“StopTrainingValue”, 1...“SaveAgentCriteria”,“情节报酬”,...“SaveAgentValue”,-2.5);

使用火车函数。培训是一个计算密集型的过程,需要几个小时才能完成。为了节省运行此示例的时间,请通过设置加载预先训练过的代理doTraining. 要亲自训练特工,设置doTraining符合事实的.

doTraining=false;如果doTraining%培训代理人。培训状态=培训(代理人、环境、培训点);其他的%为示例加载预训练的代理。装载(“ddpgFromScratch.mat”);结束

训练有素的演员

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

加载预训练的参与者网络。

装载(“imitateMPCNetActorObj.mat”,“imitateMPCNetObj”);

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

supervisedActor=rlDeterministicActorRepresentation(模仿EMPCNETOBJ、observationInfo、actionInfo、,...“观察”, imitateMPCNetObj。InputNames,“行动”,{“Scale1”},动植物);

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

testData =兰德(6,1);

评价深层神经网络。

predictImNN=预测(模仿empcnetobj,testData');

评估的演员。

evaluateRLRep = getAction (supervisedActor {testData});

比较结果。

错误=evaluateRLRep{:}-predictImNN
错误=仅有一个的0

使用预先训练的参与者创建DDPG代理。

代理人=rlDDPGAgent(监督代理人、评论家、代理人);

减少最大的训练次数,并使用火车要在运行此示例时节省时间,请通过设置doTraining. 要亲自训练特工,设置doTraining符合事实的.

trainingOpts.maxsecutes=5000;doTraining=false;如果doTraining%培训代理人。培训状态=培训(代理人、环境、培训点);其他的%为示例加载预训练的代理。装载(“ddpgFromPretrained.mat”);结束

通过使用预训练的参与者网络,DDPG代理的训练效率更高。总训练时间和训练步骤总数都提高了约20%。此外,接近最佳结果附近的训练次数从约4500次减少到约3500次。

模拟DDPG代理

要验证经过培训的代理的性能,请取消注释以下两行并在环境中对其进行模拟。有关代理模拟的更多信息,请参阅模拟选项sim卡.

%simOptions=rlSimulationOptions('MaxSteps',MaxSteps);%经验=模拟(环境、代理、模拟选项);

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

sim卡(mdl)

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

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

bdclose (mdl)

本地函数

作用in=localResetFcn(in)%随机设置横向偏差值。in=设置变量(in,“e1_首字母”,0.5*(-1+2*兰德));%设置相对偏航角的随机值。in=设置变量(in,“e2_首字母”,0.1*(-1+2*兰德));结束作用代理= loadPretrainedParams(代理,actorParams criticParams)%设置参与者参数。actor=getActor(agent);pretrainedActor=setLearnableParameters(actor,actorParams);%设置批评家参数。批评家=getCritic(代理);pretrainedCritic=setLearnableParameters(批评家,criticParams);在代理中设置演员和评论家表示。代理= setActor(代理、pretrainedActor);代理= setCritic(代理、pretrainedCritic);结束

另见

|

相关话题