基于CNN-LSTM的深度Q网络(Deep Q-Network,DQN)求解移动机器人路径规划,MATLAB代码

一、深度Q网络(Deep Q-Network,DQN)介绍

1、背景与动机

深度Q网络(DQN)是深度强化学习领域的里程碑算法,由DeepMind于2013年提出。它首次在 Atari 2600 游戏上实现了超越人类的表现,解决了传统Q学习在高维状态空间中的应用难题。DQN在机器人路径规划领域展现出巨大潜力,能够帮助机器人在复杂环境中找到最优路径。

传统Q学习在状态空间维度较高时面临以下挑战:

  1. Q表无法存储高维状态的所有可能情况
  2. 特征提取需要手动设计,泛化能力差
  3. 更新过程容易导致Q值估计不稳定

DQN通过引入深度神经网络作为Q函数的近似器,并采用经验回放和目标网络等技术,有效解决了上述问题。

2、核心思想

DQN的核心思想是使用深度神经网络来近似Q函数,即:
Q ∗ ( s , a ) ≈ Q ( s , a ; θ ) Q^*(s, a) \approx Q(s, a; \theta) Q(s,a)Q(s,a;θ)
其中, s s s 表示状态, a a a 表示动作, θ \theta θ 表示神经网络的参数。

目标是找到一组参数 θ ∗ \theta^* θ,使得网络输出的Q值与实际的Q值尽可能接近。通过不断与环境交互收集数据,使用梯度下降法优化网络参数。

3、算法流程

DQN的算法流程可以概括为以下步骤:

  1. 初始化

    • 初始化Q网络参数 θ \theta θ
    • 初始化目标网络参数 θ − \theta^- θ 并与Q网络参数同步
    • 初始化经验回放缓冲区 D D D
  2. 与环境交互

    • 在当前状态 s s s 下,根据 ϵ \epsilon ϵ-贪婪策略选择动作 a a a
    • 执行动作 a a a,观察奖励 r r r 和下一个状态 s ′ s' s
    • 将经验 ( s , a , r , s ′ ) (s, a, r, s') (s,a,r,s) 存入经验回放缓冲区 D D D
  3. 采样与更新

    • 从经验回放中随机采样一批数据 { ( s i , a i , r i , s i ′ ) } \{(s_i, a_i, r_i, s_i')\} {(si,ai,ri,si)}
    • 计算目标Q值:
      y i = { r i if  s i ′ is terminal r i + γ max ⁡ a ′ Q ( s i ′ , a ′ ; θ − ) otherwise y_i = \begin{cases} r_i & \text{if } s_i' \text{ is terminal} \\ r_i + \gamma \max_{a'} Q(s_i', a'; \theta^-) & \text{otherwise} \end{cases} yi={riri+γmaxaQ(si,a;θ)if si is terminalotherwise
      其中, γ \gamma γ 是折扣因子( 0 ≤ γ ≤ 1 0 \leq \gamma \leq 1 0γ1
    • 计算当前Q值: Q ( s i , a i ; θ ) Q(s_i, a_i; \theta) Q(si,ai;θ)
    • 计算损失函数:
      L ( θ ) = 1 N ∑ i = 1 N ( y i − Q ( s i , a i ; θ ) ) 2 L(\theta) = \frac{1}{N} \sum_{i=1}^{N} (y_i - Q(s_i, a_i; \theta))^2 L(θ)=N1i=1N(yiQ(si,ai;θ))2
    • 使用梯度下降法更新Q网络参数 θ \theta θ
  4. 同步目标网络

    • 每隔一定步数(如C步),将Q网络参数 θ \theta θ 同步到目标网络 θ − \theta^- θ
  5. 重复

    • 重复上述过程直到收敛

4、关键技术

1. 经验回放(Experience Replay)

经验回放通过存储代理与环境交互的经验,并随机采样小批量数据进行更新,解决了以下问题:

  • 数据相关性:传统Q学习使用相关数据更新,容易导致估计偏差
  • 数据利用效率:每个经验只使用一次,数据利用率低

经验回放的数学表达为:
D = { e 1 , e 2 , … , e N } , e i = ( s i , a i , r i , s i ′ ) D = \{e_1, e_2, \dots, e_N\}, \quad e_i = (s_i, a_i, r_i, s_i') D={e1,e2,,eN},ei=(si,ai,ri,si)
每次更新时,从 D D D 中随机采样小批量数据 B ⊆ D B \subseteq D BD

2. 目标网络(Target Network)

目标网络通过维持一个固定的网络来计算目标Q值,避免了Q值估计的不稳定。目标网络的参数 θ − \theta^- θ 每隔一定步数与Q网络参数 θ \theta θ 同步:
θ − ← θ every C steps \theta^- \leftarrow \theta \quad \text{every C steps} θθevery C steps

3. ϵ \epsilon ϵ-贪婪策略

ϵ \epsilon ϵ-贪婪策略在探索与利用之间取得平衡:
a = { random action with probability  ϵ arg ⁡ max ⁡ a Q ( s , a ; θ ) with probability  1 − ϵ a = \begin{cases} \text{random action} & \text{with probability } \epsilon \\ \arg\max_a Q(s, a; \theta) & \text{with probability } 1-\epsilon \end{cases} a={random actionargmaxaQ(s,a;θ)with probability ϵwith probability 1ϵ
其中, ϵ \epsilon ϵ 随时间逐渐衰减,从初始值(如1.0)逐渐降低到较小值(如0.1)。

5、数学推导

1. Q学习更新公式

Q学习的目标是找到最优策略下的Q值:
Q ∗ ( s , a ) = E r [ r + γ max ⁡ a ′ Q ∗ ( s ′ , a ′ ) ] Q^*(s, a) = \mathbb{E}_r[r + \gamma \max_{a'} Q^*(s', a')] Q(s,a)=Er[r+γamaxQ(s,a)]
其中, E r \mathbb{E}_r Er 表示对奖励分布的期望。

2. 损失函数

DQN使用均方误差(MSE)作为损失函数:
L ( θ ) = E s , a , r , s ′ [ ( y − Q ( s , a ; θ ) ) 2 ] L(\theta) = \mathbb{E}_{s,a,r,s'} \left[ (y - Q(s, a; \theta))^2 \right] L(θ)=Es,a,r,s[(yQ(s,a;θ))2]
其中, y = r + γ max ⁡ a ′ Q ( s ′ , a ′ ; θ − ) y = r + \gamma \max_{a'} Q(s', a'; \theta^-) y=r+γmaxaQ(s,a;θ) 是目标Q值。

3. 梯度更新

使用梯度下降法更新参数 θ \theta θ
θ ← θ + α ∇ θ L ( θ ) \theta \leftarrow \theta + \alpha \nabla_\theta L(\theta) θθ+αθL(θ)
其中, α \alpha α 是学习率, ∇ θ L ( θ ) \nabla_\theta L(\theta) θL(θ) 是损失函数对参数的梯度。

6、与传统Q学习的对比

特性传统Q学习DQN
状态表示离散状态或手工特征深度神经网络自动提取特征
数据利用每个数据只使用一次经验回放多次利用数据
稳定性Q值估计容易发散目标网络提高稳定性
适用场景低维状态空间高维状态空间(如图像)

7、局限性

  1. 样本效率低:需要大量交互数据
  2. 超参数敏感:对 ϵ \epsilon ϵ、学习率、折扣因子等敏感
  3. 奖励稀疏问题:在奖励稀疏环境中表现不佳
  4. 计算资源需求高:需要强大的计算设备支持

二、构建CNN-LSTM深度神经网络作为Q函数的近似器

输入是10*10大小含有障碍物的地图,输出是机器人8个方向的动作Q值,用于指导机器人选择最优动作。

在这里插入图片描述

所搭建的深度神经网络包含卷积层、激活层、全连接层、扁平化层和LSTM层。以下是每一层的详细说明:

1. 输入层 (input)
  • 输入尺寸: (10 \times 10 \times 1)
  • 归一化: 使用 “zero-centered” 归一化方法
  • 描述: 接收 (10 \times 10) 的单通道图像作为输入。
2. 卷积层 (con1)
  • 卷积核尺寸: (3 \times 3)
  • 卷积核数量: 16
  • 步幅: ([1, 1])
  • 填充: ([0, 0, 0, 0])
  • 输出尺寸: (8 \times 8 \times 16)
  • 描述: 使用 16 个 (3 \times 3) 的卷积核对输入图像进行卷积操作,提取特征。
3. ReLU 激活层 (relu1)
  • 输入/输出尺寸: (8 \times 8 \times 16)
  • 描述: 对卷积层的输出应用 ReLU 激活函数,引入非线性。
4. 全连接层 (fc1)
  • 输入尺寸: (8 \times 8 \times 16 = 1024)
  • 输出尺寸: (64)
  • 权重矩阵: (64 \times 1024)
  • 偏置向量: (64 \times 1)
  • 描述: 将卷积层的输出展平后,通过全连接层映射到 64 维特征空间。
5. ReLU 激活层 (relu3)
  • 输入/输出尺寸: (64)
  • 描述: 对全连接层的输出应用 ReLU 激活函数。
6. 扁平化层 (flatten)
  • 输入尺寸: (1 \times 1 \times 64)
  • 输出尺寸: (64 \times 1)
  • 描述: 将三维张量展平为一维向量。
7. LSTM层 (Lstm)
  • 隐藏单元数量: 20
  • 输入尺寸: (64 \times 1)
  • 输出尺寸: (20 \times 1)
  • 权重矩阵:
    • 输入权重: (80 \times \dots)
    • 循环权重: (80 \times \dots)
    • 偏置向量: (80 \times \dots)
  • 描述: 使用 LSTM处理序列数据,捕捉时间序列中的依赖关系。
8. ReLU 激活层 (relu)
  • 输入/输出尺寸: (20 \times 1)
  • 描述: 对 LSTM层的输出应用 ReLU 激活函数。
9. 全连接层 (fc2)
  • 输入尺寸: (20)
  • 输出尺寸: (8)
  • 权重矩阵: (8 \times 20)
  • 偏置向量: (8 \times 1)
  • 描述: 将 LSTM层的输出映射到 8 维输出空间。
10. 输出层 (output)
  • 输出尺寸: (8 \times 1)
  • 损失函数: 均方误差(mean-squared-error)
  • 响应: “Response”
  • 描述: 输出层用于回归任务,预测 8 维的连续值。

三、DQN求解机器人路径规划

3.1 环境设置

  • 状态空间:机器人当前的位置或状态,以及与目标位置的关系。
  • 动作空间:机器人可以采取的所有可能动作,如移动到相邻位置。
  • 奖励函数:定义机器人在执行动作后获得的即时奖励。例如,到达目标点给予高奖励,碰撞给予负奖励,距离目标点越近奖励越高。

3.2 网络设计

DQN网络输入是10×10大小的地图状态,输出是机器人8个方向的动作Q值。网络结构如下:

  • 输入层:接收10×10的地图作为输入。
  • 隐藏层:可以包含卷积层、LSTM等,用于提取地图特征。
  • 输出层:输出8个方向动作的Q值。

3.3 训练过程

  1. 初始化:初始化经验池,随机初始化Q网络的参数,并初始化目标网络,其参数与Q网络相同。
  2. 获取初始状态:机器人从环境中获取初始状态。
  3. 选择动作:根据当前状态和ε-贪心策略选择动作。
  4. 执行动作并观察:机器人执行动作并观察新的状态和获得的奖励。
  5. 存储经验:将经验(状态、动作、奖励、新状态)存储在经验池中。
  6. 样本抽取与学习:从经验池中随机抽取样本,并使用这些样本来更新Q网络。
  7. 目标网络更新:定期将Q网络的参数复制到目标网络。

3.4 路径规划

在训练完成后,使用训练好的DQN网络来规划路径。机器人根据当前状态和Q值函数选择最优动作,逐步接近目标位置。

四、部分MATLAB代码及结果

%% 画图
analyzeNetwork(dqn_net)figure
plot(curve,'r-',LineWidth=2);
saveas(gca,'11.jpg')figure
imagesc(~map)
hold on
plot(state_mark(:,2),state_mark(:,1),'c-',LineWidth=2);
colormap('gray')
scatter(start_state_pos(2) ,start_state_pos(1),'MarkerEdgeColor',[0 0 1],'MarkerFaceColor',[0 0 1], 'LineWidth',1);%start point
scatter(target_state_pos(2),target_state_pos(1),'MarkerEdgeColor',[0 1 0],'MarkerFaceColor',[0 1 0], 'LineWidth',1);%goal point
text(start_state_pos(2),start_state_pos(1),'起点','Color','red','FontSize',10);%显示start字符
text(target_state_pos(2),target_state_pos(1),'终点','Color','red','FontSize',10);%显示goal字符
title('基于DQN的机器人路径规划')
saveas(gca,'12.jpg')

在这里插入图片描述
在这里插入图片描述

五、完整MATLAB代码见下方名片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结构型设计模式。持续更新

结构型 - 外观 提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。 public class SubSystem {public void turnOnTV() {System.out.println("turnOnTV()");}public void setCD(String cd) {System.out.println(&quo…

从零构建大语言模型全栈开发指南:第五部分:行业应用与前沿探索-5.1.2行业落地挑战:算力成本与数据隐私解决方案

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 从零构建大语言模型全栈开发指南-第五部分:行业应用与前沿探索5.1.2 行业落地挑战:算力成本与数据隐私解决方案1. 算力成本挑战与优化策略1.1 算力成本的核心问题1.2 算力优化技术方案2. 数据隐私挑战…

量子计算与人工智能融合的未来趋势

最近研学过程中发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。 在当今科技飞速发展…

六种光耦综合对比——《器件手册--光耦》

目录 十二、光耦 简述 基本结构 工作原理 主要特点 应用领域 优势与局限性 选择光耦时需要考虑的因素 详尽阐述 1 栅极驱动光耦 基本结构 工作原理 主要特点 应用领域 选择栅极驱动光耦时需要考虑的因素 典型产品示例 总结 2 逻辑输出光耦 基本结构 工作原理 主要特点 应用…

【蓝桥杯嵌入式——学习笔记一】2016年第七届省赛真题重难点解析记录,闭坑指南(文末附完整代码)

在读题过程中发现本次使用的是串口2,需要配置串口2。 但在查看产品手册时发现PA14同时也是SWCLK。 所以在使用串口2时需要拔下跳线帽去连接CH340。 可能是用到串口2的缘故,在烧录时发现报了一个错误。这时我们要想烧录得按着复位键去点击烧录&#xff0c…

三、GPIO

一、GPIO简介 GPIO(General Purpose Input Output)通用输入输出口GPIO引脚电平:0V(低电平)~3.3V(高电平),部分引脚可容忍5V 容忍5V,即部分引脚输入5V的电压,…

Java实战报错

哪错了 Preview 在这段Java代码中,map.put("Cc", 20); 这一行的键 "Cc" 被标记为错误。这可能是由于以下几种原因: 键值类型不匹配:虽然在你的代码中没有显示出来,但确保 HashMap 的键是 String 类型&#xf…

25大唐杯赛道一本科B组知识点大纲(下)

5G/6G网络技术知识点(10%) 工程概论及通信工程项目实践(20%) 5G垂直行业应用知识点(20%) ⭐⭐⭐为重点知识,尽量要过一遍哦 大唐杯赛道一国一备赛思路 大唐杯国一省赛回忆录--有付出就会有收…

docker的文件系统Overlay2

OverlayFS(Overlay2)文件系统深度解析 Overlay2 是 Docker 默认使用的联合文件系统(Union Filesystem),用于管理容器镜像的分层存储和容器运行时文件系统的合并。它基于 Linux 内核的 OverlayFS 技术,是早…

WebRTC技术简介及应用场景

写在前面 本文是参考稀土掘金的文章,整理得出,版权归原作者所有! 参考链接:https://juejin.cn/book/7168418382318927880/section/7171376753263247396 WebRTC(Web Real-Time Communication) 是一项开源技术,允许浏览器和移动应用直接进行…

Windows 图形显示驱动开发-WDDM 2.1 功能(四)

驱动程序版本控制 图形适配器或芯片集的驱动程序 DLL 和 SYS 文件必须具有正确格式的文件版本。 驱动程序信息文件 (.inf)、内核模式驱动程序 (.sys) 和用户模式驱动程序 (.dll) 文件的版本信息必须一致。 此外,.inf 的 [SignatureAttributes] 部分中标识为 PETru…

什么是 StarRocks?核心优势与适用场景解析

在数据量持续爆发的时代,企业对实时分析的需求日益迫切。例如,电商大促期间的交易监控、广告投放效果的即时反馈等场景,均要求毫秒级的响应速度。然而,传统工具如 Hadoop、Hive 等存在明显短板:复杂查询性能不足、资源…

Java基础 4.3

1.对象机制练习 public class Object03 {public static void main(String[] args) {Person a new Person();a.age 10;a.name "小明";Person b;b a;System.out.println(b.name);//小明b.age 200;b null;System.out.println(a.age);//200System.out.println(b.a…

视频设备轨迹回放平台EasyCVR综合智能化,搭建运动场体育赛事直播方案

一、背景 随着5G技术的发展,体育赛事直播迎来了新的高峰。无论是NBA、西甲、英超、德甲、意甲、中超还是CBA等热门赛事,都是值得记录和回放的精彩瞬间。对于体育迷来说,选择观看的平台众多,但是作为运营者,搭建一套体…

搬砖--贪心+排序的背包

a在上面b在下面->a.v-M-b.m>b.v-M-a.m->剩余率大 所以我先遍历a&#xff0c;让a在上面 这就是要考虑贪心排序的01背包 因为它有放的限制条件 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<ll,int>…

《2024年全球DDoS攻击态势分析》

从攻击态势来看&#xff0c;2024年DDoS攻击频次继续呈增长趋势&#xff0c;2024年同步增加1.3倍&#xff1b;超大规模攻击激增&#xff0c;超800Gbps同比增长3.1倍&#xff0c;累计高达771次&#xff0c;且互联网史上最大带宽和最大包速率攻击均被刷新&#xff1b;瞬时泛洪攻击…

数据分析参考架构详解

1.数仓方法论 2. 数仓建模参考架构 3.大数据参考架构 4.数据分析参考架构

领驭科技:以微软Azure Speech技术为核心,驱动翻译耳机新时代

在全球化的今天&#xff0c;语言不再是沟通的障碍。领驭科技&#xff0c;作为微软的核心合作伙伴&#xff0c;正引领翻译耳机行业进入一个全新的发展阶段。以时空壶与贸人为例&#xff0c;这两家公司的翻译耳机产品凭借其内置的微软Azure Speech人工智能语音技术&#xff0c;为…

seaweedfs分布式文件系统

seaweedfs https://github.com/seaweedfs/seaweedfs.git go mod tidy go -o bin ./… seaweed占不支持smb服务&#xff0c;只能用fuse的方式mount到本地文件系统 weed master 默认端口&#xff1a;9333&#xff0c;支持浏览器访问 weed volume 默认端口&#xff1a;8080 weed …

说清楚单元测试

在团队中推行单元测试的时候,总是会被成员问一些问题: 这种测试无法测试数据库的SQL(或者是ORM)是否执行正确?这种测试好像没什么作用?关联的对象要怎么处理呢?…借由本篇,来全面看一看单元测试。 单元测试是软件开发中一种重要的测试方法,其核心目的是验证代码的最小…