基于强化学习工具箱的自适应巡航控制系统
随着自动驾驶技术的快速发展,自适应巡航控制系统越来越多的人了解。今天介绍下用MATLAB中reinforcement learning工具箱实现对ACC系统的控制。
ACC系统简单介绍
自适应巡航控制系统(ACC)是一种旨在帮助车辆保持安全跟踪距离并保持在限速范围内的系统。其通过安装在车辆内的传感技术(如摄像头,激光器和雷达设备)来发挥作用,从而可以了解一辆汽车与另一辆汽车或道路上其他物体的距离,该系统通过调整自我车辆的纵向加速度来跟踪设定的速度并保持与前车的安全距离。
DDPG算法介绍
首先来回顾下DQN算法,我们图中可以看出DQN不能用于连续控制问题原因是因为maxQ(s’,a’)函数只能处理离散型的。众所周知,DQN的精髓在于用不能解决的连续状态空间的magic函数去估计Q值,也就是说,用一个magic函数,直接替代maxQ(s’,a’)的功能期待我们输入状态s,magic函数返回我们动作action的取值,这个取值能够让q值最大。这个就是DDPG中的Actor的功能。
DDPG算法更接近DQN算法,是用一个actor去弥补DQN不能处理连续控制性问题的缺点。为什么这么说那,往下看。首先图中的Critic网络的作用是预估Q,值得注意的是Critic网络的输入有两个:动作和状态,需要一起输入到Critic中,Critic网络的loss用的是TD-error;Actor网络输出的是一个动作,这个动作A输入到Crititc后,能够获得最大的Q值,Actor的更新方式是梯度上升。所以DDPG和DQN一样,用了固定网络(fix network)技术,就是先冻结住用来求target的网络。在更新之后,再把参数赋值到target网络。
用强化学习DDPG工具箱实现自适应巡航控制系统
首先打开工具箱
mdl = 'rlACCMdl';open_system(mdl)agentblk = [mdl '/RL Agent'];
模型参数设定
1.从代理到环境的加速度作用信号为 –3 至 2 m/s^2。 2.自我汽车的参考速度Vref定义如下。如果相对距离小于安全距离,则自我汽车将跟踪领先汽车速度和驾驶员设置速度的最小值。通过这种方式,自我汽车与领头汽车保持一定的距离。如果相对距离大于安全距离,则自我汽车将跟踪驾驶员设置的速度。在此示例中,安全距离定义为自我汽车纵向速度的线性函数V=tgap∗V+Ddefault.安全距离决定了自我汽车的参考跟踪速度。 3.来自环境的观测值是速度误差和e=Vref−Vego,其积分∫e和和自我汽车的纵向速度V. 4.当自我汽车的纵向速度小于0,或者领先汽车与自我汽车之间的相对距离小于0时,模拟终止。
环境接口
为模型创建强化学习环境接口。
创建状态和动作observationInfo = rlNumericSpec([3 1],'LowerLimit',-inf*ones(3,1),'UpperLimit',inf*ones(3,1));observationInfo.Name = 'observations';observationInfo.Description = 'information on velocity error and ego velocity';actionInfo = rlNumericSpec([1 1],'LowerLimit',-3,'UpperLimit',2);actionInfo.Name = 'acceleration';
创建仿真环境接口
env = rlSimulinkEnv(mdl,agentblk,observationInfo,actionInfo);
要定义领先汽车位置的初始条件,请使用匿名函数句柄指定环境重置函数。重置函数 (在示例末尾定义)随机化了领先汽车的初始位置
java env.ResetFcn = @(in)localResetFcn(in);
创建 DDPG 代理
DDPG 代理使用批评值函数表示来近似给定观察和操作的长期奖励。要创建批评者,首先创建一个具有两个输入(状态和操作)以及一个输出的深度神经网络。有关创建神经网络值函数表示的更多信息L = 48; % number of neuronsstatePath = [featureInputLayer(3,'Normalization','none','Name','observation')fullyConnectedLayer(L,'Name','fc1')reluLayer('Name','relu1')fullyConnectedLayer(L,'Name','fc2')additionLayer(2,'Name','add')reluLayer('Name','relu2')fullyConnectedLayer(L,'Name','fc3')reluLayer('Name','relu3')fullyConnectedLayer(1,'Name','fc4')];actionPath = [featureInputLayer(1,'Normalization','none','Name','action')fullyConnectedLayer(L, 'Name', 'fc5')];criticNetwork = layerGraph(statePath);criticNetwork = addLayers(criticNetwork, actionPath); criticNetwork = connectLayers(criticNetwork,'fc5','add/in2');criticNetwork = dlnetwork(criticNetwork);
使用指定 critic 优化器的选项。rlOptimizerOptions
criticOptions = rlOptimizerOptions('LearnRate',1e-3,'GradientThreshold',1,'L2RegularizationFactor',1e-4);
使用指定的神经网络和选项创建批评家表示。您还必须指定从环境界面获取的批评者的操作和观察信息。有关详细信息,请参阅 rlQValueFunction。
critic = rlQValueFunction(criticNetwork,observationInfo,actionInfo,... 'ObservationInputNames','observation','ActionInputNames','action');
DDPG 代理通过使用参与者表示来决定要执行的给定观测值的操作。要创建actor,首先创建一个深度神经网络,其中包含一个输入,即观察,一个输出,即动作。构建演员的方式与批评家类似。
actorNetwork = [ featureInputLayer(3,'Normalization','none','Name','observation') fullyConnectedLayer(L,'Name','fc1') reluLayer('Name','relu1') fullyConnectedLayer(L,'Name','fc2') reluLayer('Name','relu2') fullyConnectedLayer(L,'Name','fc3') reluLayer('Name','relu3') fullyConnectedLayer(1,'Name','fc4') tanhLayer('Name','tanh1') scalingLayer('Name','ActorScaling1','Scale',2.5,'Bias',-0.5)]; actorNetwork = dlnetwork(actorNetwork); actorOptions = rlOptimizerOptions('LearnRate',1e-4,'GradientThreshold',1,'L2RegularizationFactor',1e-4); actor = rlContinuousDeterministicActor(actorNetwork,observationInfo,actionInfo);
若要创建 DDPG 代理,请首先使用 rlDDPGAgentOptions 指定 DDPG 代理选项。
agentOptions = rlDDPGAgentOptions(... 'SampleTime',Ts,... 'ActorOptimizerOptions',actorOptions,... 'CriticOptimizerOptions',criticOptions,... 'ExperienceBufferLength',1e6); agentOptions.NoiseOptions.Variance = 0.6; agentOptions.NoiseOptions.VarianceDecayRate = 1e-5;
然后,使用指定的参与者表示、批评家表示和代理选项创建 DDPG 代理。有关详细信息,请参阅 rlDDPGAgent。
agent = rlDDPGAgent(actor,critic,agentOptions);
训练模型
要训练代理,请首先指定训练选项。对于此示例,请使用以下选项:
运行每个训练集最多集,每集最多持续600个时间步长.
当代理收到大于 260 的剧集奖励时,停止训练。有关详细信息,请参阅 rlTrainingOptions。maxepisodes = 5000; maxsteps = ceil(Tf/Ts); trainingOpts = rlTrainingOptions(... 'MaxEpisodes',maxepisodes,... 'MaxStepsPerEpisode',maxsteps,... 'Verbose',false,... 'Plots','training-progress',... 'StopTrainingCriteria','EpisodeReward',... 'StopTrainingValue',260);
使用训练函数训练代理。训练是一个计算密集型过程,需要几分钟才能完成。要在运行此示例时节省时间,请通过设置为 加载预先训练的代理。要自己训练代理,请设置doTrainingfalsedoTraining=true
doTraining = false; if doTraining % Train the agent.trainingStats = train(agent,env,trainingOpts); else% Load a pretrained agent for the example.load('SimulinkACCDDPG.mat','agent') end
最后进行保存模型参数进行仿真模拟。
基于强化学习工具箱的自适应巡航控制系统相关推荐
- 【实践】基于强化学习的 Contextual Bandits 算法在推荐场景中的应用
文章作者:杨梦月.张露露 内容来源:滴滴科技合作 出品平台:DataFunTalk 导读:本文是对滴滴 AI Labs 和中科院大学联合提出的 WWW 2020 Research Track 的 Or ...
- 什么是强化学习,强化学习在控制系统中的应用以及matlab强化学习工具箱的介绍
一.Reinforcement Learning Toolbox介绍 强化学习工具箱使用强化学习算法(包括DQN,A2C和DDPG)为训练策略(policy)提供函数和模块.您可以使用这些策略为复杂的 ...
- 【论文笔记】基于强化学习的连续型机械臂自适应跟踪控制
文章目录 摘要 关键词 0 引言 1 空间连续型机器人动力学模型 1.1 场景假设 (1) 环境假设 (2) 模型假设 1.2 公式分析 2 空间连续型机器人滑模控制器 3 基于强化学习的滑模控制器 ...
- 【论文阅读】基于强化学习的上下文感知的自适应路由变异方案
[论文阅读]基于强化学习的上下文感知的自适应路由变异方案 Context-Aware Adaptive Route Mutation Scheme:A Reinforcement Learning A ...
- [论文]基于强化学习的无模型水下机器人深度控制
基于强化学习的无模型水下机器人深度控制 摘要 介绍 问题公式 A.水下机器人的坐标框架 B.深度控制问题 马尔科夫模型 A.马尔科夫决策 B.恒定深度控制MDP C.弯曲深度控制MDP D.海底追踪的 ...
- 使用MATLAB/simulink与PreScan联合进行基于强化学习的自动驾驶系统设计与仿真
使用MATLAB/simulink与PreScan联合进行基于强化学习的自动驾驶系统设计与仿真 总论 环境配置 系统搭建 总论 使用MATLAB中的强化学习工具箱作为核心算法的建立工具,在simuli ...
- 王亚楠:基于强化学习的自动码率调节
本文来自 爱奇艺 技术产品中心 资深工程师 王亚楠在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成.在分享中,王亚楠分别介绍了自动码率调节的实现过程.现 ...
- 【强化学习与机器人控制论文 2】基于强化学习的五指灵巧手操作
基于强化学习的五指灵巧手操作 1. 引言 2. 论文解读 2.1 背景 2.2 论文中所用到的强化学习方法 2.3 实验任务和系统 2.4 仿真到实物的迁移 2.5 分布式RL训练--从状态中学到控制 ...
- 自适应巡航控制系统——ACC
ACC(Adaptive Cruise Control)自适应巡航控制系统(以下简称ACC)是一种基于传感器识别技术而诞生的智能巡航控制,相比只能根据驾驶者设置的速度进行恒定速度巡航的传统巡航控制系统 ...
- MATLAB强化学习工具箱(十二)强化学习智能体创建总览
强化学习智能体创建总览 强化学习介绍 内置智能体 选择智能体类型 自定义智能体 关于强化学习的更多介绍 强化学习介绍 强化学习的目标是训练智能体在不确定的环境中完成任务.智能体从环境中接收观察和奖励, ...
最新文章
- 怎么覆盖默认样式_PPT办公技巧:3种办法快速统一幻灯片中不同形状的显示样式...
- JQuery框架2.位置属性|筛选方法|事件
- 学练结合,快速掌握Kubernetes Service
- linux 开源谷歌浏览器_开发人员浏览器,Google开源版本等
- html只读下拉框,Html.DropDownList – 禁用/只读
- 如何使用Visual Studio创建SQL Server数据库项目
- java多线程创建一个简单的案例
- python创建实例属性_Python学习笔记__6.5章 实例属性和类属性
- JS判断手机浏览器是横屏or竖屏
- BZOJ1862: [Zjoi2006]GameZ游戏排名系统
- SOLIDWORKS教程:solidworks常用技巧大全
- java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
- WIFI类物联网产品配网方式简述
- Java实现word文档转换图片功能
- 学习笔记:《视听语言》(完结)-9/9 短片创作-中国大学慕课公开课
- 2022-华为-大数据研发工程师-秋招面经
- “跑在互联网上的售货机”友宝签约法大大
- Unity Fleck Map 参数说明
- 基于微信小程序的疫情智慧社区管理系统 计算机毕业设计 后台管理系统
- IB学霸分享学习经验(家长如何助孩子一臂之力)
热门文章
- 一寸照片快照多少钱_去照相馆拍照一般多少钱
- Exchange的邮箱创建与使用
- 5款优秀的免费加密软件
- mysql rpl_MySQL rpl_semi_sync_master_timeout相关的一件BUG
- 二维码在线生成接口API
- oracle投毒漏洞检测,Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)的完美解决方法...
- 【软件工程师中级职称】学习总结
- SNF快速开发平台MVC-Grid++集成打印
- List集合排序Collections.sort()方法的一个容易忽略的小问题
- LWN:滚动发布的稳定版内核!