基于CNN-LSTM-GRU的深度Q网络(Deep Q-Network,DQN)求解移动机器人路径规划,MATLAB代码
一、深度Q网络(Deep Q-Network,DQN)介绍
1、背景与动机
深度Q网络(DQN)是深度强化学习领域的里程碑算法,由DeepMind于2013年提出。它首次在 Atari 2600 游戏上实现了超越人类的表现,解决了传统Q学习在高维状态空间中的应用难题。DQN在机器人路径规划领域展现出巨大潜力,能够帮助机器人在复杂环境中找到最优路径。
传统Q学习在状态空间维度较高时面临以下挑战:
- Q表无法存储高维状态的所有可能情况
- 特征提取需要手动设计,泛化能力差
- 更新过程容易导致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的算法流程可以概括为以下步骤:
-
初始化:
- 初始化Q网络参数 θ \theta θ
- 初始化目标网络参数 θ − \theta^- θ− 并与Q网络参数同步
- 初始化经验回放缓冲区 D D D
-
与环境交互:
- 在当前状态 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
-
采样与更新:
- 从经验回放中随机采样一批数据 { ( 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+γmaxa′Q(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=1∑N(yi−Q(si,ai;θ))2 - 使用梯度下降法更新Q网络参数 θ \theta θ
-
同步目标网络:
- 每隔一定步数(如C步),将Q网络参数 θ \theta θ 同步到目标网络 θ − \theta^- θ−
-
重复:
- 重复上述过程直到收敛
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 B⊆D。
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+γa′maxQ∗(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′[(y−Q(s,a;θ))2]
其中, y = r + γ max a ′ Q ( s ′ , a ′ ; θ − ) y = r + \gamma \max_{a'} Q(s', a'; \theta^-) y=r+γmaxa′Q(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、局限性
- 样本效率低:需要大量交互数据
- 超参数敏感:对 ϵ \epsilon ϵ、学习率、折扣因子等敏感
- 奖励稀疏问题:在奖励稀疏环境中表现不佳
- 计算资源需求高:需要强大的计算设备支持
二、构建CNN-LSTM-GRU深度神经网络作为Q函数的近似器
输入是10*10大小含有障碍物的地图,输出是机器人8个方向的动作Q值,用于指导机器人选择最优动作。
三、DQN求解机器人路径规划
3.1 环境设置
- 状态空间:机器人当前的位置或状态,以及与目标位置的关系。
- 动作空间:机器人可以采取的所有可能动作,如移动到相邻位置。
- 奖励函数:定义机器人在执行动作后获得的即时奖励。例如,到达目标点给予高奖励,碰撞给予负奖励,距离目标点越近奖励越高。
3.2 网络设计
DQN网络输入是10×10大小的地图状态,输出是机器人8个方向的动作Q值。网络结构如下:
- 输入层:接收10×10的地图作为输入。
- 隐藏层:包含卷积层、LSTM、GRU等,用于提取地图特征。
- 输出层:输出8个方向动作的Q值。
3.3 训练过程
- 初始化:初始化经验池,随机初始化Q网络的参数,并初始化目标网络,其参数与Q网络相同。
- 获取初始状态:机器人从环境中获取初始状态。
- 选择动作:根据当前状态和ε-贪心策略选择动作。
- 执行动作并观察:机器人执行动作并观察新的状态和获得的奖励。
- 存储经验:将经验(状态、动作、奖励、新状态)存储在经验池中。
- 样本抽取与学习:从经验池中随机抽取样本,并使用这些样本来更新Q网络。
- 目标网络更新:定期将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代码见下方名片
相关文章:
基于CNN-LSTM-GRU的深度Q网络(Deep Q-Network,DQN)求解移动机器人路径规划,MATLAB代码
一、深度Q网络(Deep Q-Network,DQN)介绍 1、背景与动机 深度Q网络(DQN)是深度强化学习领域的里程碑算法,由DeepMind于2013年提出。它首次在 Atari 2600 游戏上实现了超越人类的表现,解决了传统…...
C++23新特性:显式对象形参与显式对象成员函数
文章目录 一、背景与动机二、语法与基本使用三、优势与应用场景(一)简化代码(二)提升模板编程灵活性(三)与Lambda表达式结合 四、限制与注意事项五、总结 C23标准引入了一项重要的语言特性——显式对象形参…...
leetcode_242. 有效的字母异位词_java
242. 有效的字母异位词https://leetcode.cn/problems/valid-anagram/ 1、题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词(字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次…...
【Docker基础】容器技术详解:生命周期、命令与实战案例
文章目录 一、什么是容器?二、为什么需要容器三、容器的生命周期容器状态容器OOM容器异常退出容器异常退出容器暂停 四、容器命令命令清单详细介绍 五、容器操作案例容器的状态迁移容器批量操作容器交互模式attached 模式detached 模式interactive 模式 容器 与 宿主…...
电子电气架构 --- 为配备区域计算的下一代电子/电气(E/E)架构
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...
python基础:位置互换
n int(input()) for _ in range(n):line input().strip()line list(line)for i in range(1,len(line)1):if i%2 0:line[i-2], line[i-1] line[i-1],line[i-2] print(.join(line))以下分不同数据类型说明 Python 实现奇偶互换的方法: 字符串的奇偶位互换 若字…...
51单片机Day03---让一个LED灯闪烁
目录 1.研究原理图: 2.一些小知识(重定义的使用): (1)在单片机中,unsigned int 常用于以下场景: (2)unsigned char: 3.思路构造:…...
城电科技 | 从概念到落地:如何打造真正的智慧零碳园区?
在科技飞速发展的当下,智慧零碳园区成为了引领未来发展的重要范式。那么,究竟什么是智慧零碳园区呢? 智慧零碳园区,是借助前沿信息技术,把物联网、云计算、大数据等技术深度融入园区管理及产业运营,以此达…...
oracle常见问题处理集锦
oracle常见问题处理集锦 oracle常见问题处理集锦ORA:28000 the count is locked oracle常见问题处理集锦 ORA:28000 the count is locked ORA-28000: 账户已被锁定 这个错误表示你尝试登录的 Oracle 数据库用户账户已被锁定,常见原因包括: 多次密码输错…...
Java-JDBC入门程序、预编译SQL
一. JDBC JDBC:Java DataBase Connectivity 就是使用Java语言操作关系型数据库的一套API 本质:sun公司官方定义一套操作所有关系型数据库的规范,即接口;各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使…...
【SQL】基于多源SQL 去重方法对比 -- 精华版
【SQL】基于SQL 去重方法对比 -- 精华版 一、引言二、基于SQL去重方法完整对比1. MySQL去重方法及优劣势1.1 DISTINCT关键字1.2 GROUP BY子句1.3 UNION系列操作1.4 子查询 自关联 2. Hive去重方法及优劣势2.1 DISTINCT关键字2.2 GROUP BY子句2.3 ROW_NUMBER窗口函数2.4 …...
list的使用以及模拟实现
本章目标 1.list的使用 2.list的模拟实现 1.list的使用 在stl中list是一个链表,并且是一个双向带头循环链表,这种结构的链表是最优结构. 因为它的实现上也是一块线性空间,它的使用上是与string和vector类似的.但相对的因为底层物理结构上它并不像vector是线性连续的,它并没有…...
java继承练习
//创建父类public class Employee {private String id;private String name;private double salary;public Employee() {}public Employee(String id, String name, double salary) {this.id id;this.name name;this.salary salary;}public String getId() {return id;}pu…...
猫咪如厕检测与分类识别系统系列【一】 功能需求分析及猫咪分类特征提取
开发背景 家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的…...
sparkcore编程算子
今天是Spark Core编程算子 Value类型算子 1. map 将处理的数据逐条进行映射转换,这里的转换可以是类型的转换,也可以是值的转换。Map算子是分区内一个数据一个数据的执行,类似于串行操作。 特点: - 主要目的将数据源中的数据进行…...
【EI会议】第三届机器人与软件工程前沿国际会议(FRSE 2025)
第三届机器人与软件工程前沿国际会议(FRSE 2025)将于2025年8月8日-10日在中国张家界召开。会议由清华大学自动化系主办,长沙理工大学、湖南科技大学、吉首大学、AC学术中心协办。 一、会议信息 大会官网:www.icfrse.org 会议时…...
机器人系统仿真--1.机器人模型URDF
添加机器人地盘...
具身机器人中AI(DEEPSEEK)与PLC、驱动器协同发展研究:突破数据困境与指令精确控制(3)
具身机器人中AI(DEEPSEEK)与PLC、驱动器协同发展研究:突破数据困境与指令精确控制(1)-CSDN博客 具身机器人中AI(DEEPSEEK)与PLC、驱动器协同发展研究:突破数据困境与指令精确控制&a…...
+++++背到厌倦。持续更新
Spring IoC 的工作流程: 读取 BeanDefinition: Spring 容器启动时,会读取 Bean 的配置信息 (例如 XML 配置文件、注解或 Java 代码),并将这些配置信息转换为 BeanDefinition 对象。创建 Bean 实例: 根据 BeanDefinition 中的信息,Spring 容器…...
修改 docker 工作目录
一、停掉 containerd、cri-docker、docker systemctl stop containerd systemctl stop cri-docker systemctl stop docker 二、拷贝 docker 工作目录下的所有文件到新路径 rsync -aP /var/lib/docker/ /docker/data/ 三、daemon.json 添加新工作目录路径 {"registry-…...
51c嵌入式~继电器~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/13775821 一、继电器应用细节 继电器的应用,相信大家都知道,在电路中只要给它供电、断电也就可以工作了。本文讨论它的应用细节。 现在流行的接法 图中,继电器的线圈经过Q1作为开关&am…...
舵机:机器人领域的“关节革命者”
机器人的技术,每一个细微的进步都可能引领一场行业变革。而在这场变革中,舵机作为机器人关节的核心部件,正悄然上演着一场革命性的应用风暴。从简单的关节运动到复杂的姿态控制,舵机以其卓越的性能和无限的可能,重新定…...
飞书集成衡石ChatBot实战:如何10分钟搭建一个业务数据问答机器人?
让数据查询像聊天一样简单 在快节奏的业务环境中,数据查询的实时性和便捷性至关重要。传统BI工具需要复杂的操作,而衡石ChatBot结合飞书,让业务人员只需在聊天窗口提问,就能立刻获取数据反馈,真正实现“零门槛”数据分…...
高并发环境下超发现象的详细分析,包含场景示例、影响分析及解决方案(悲观锁、乐观锁、分布式锁)
以下是针对高并发环境下超发现象的详细分析,包含场景示例、影响分析及解决方案: 高并发下的超发详解 1. 超发现象定义 超发(Over-issuance)指在并发操作中,系统实际发放的资源(如商品库存)超过…...
Git 分支整合策略:Cherry-pick、Merge、Rebase 三者之间对比
Git 分支整合策略详解:Cherry-pick、Merge、Rebase 在日常的 Git 多分支协作开发中,代码合并是常见操作。Git 中主要提供以下三种方式来合并或迁移分支的提交: Cherry-pick:精确挑选部分提交复制到当前分支;Merge&am…...
嵌入式八股---计算机网络篇
前言 这块主要是结合着LWIP去理解计算机网络中常见的面试题 OSI四层/五层/七层模型 OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层(http)、表示层(加密)、应用层。 TCP/IP分层(4层):网络接口层…...
使用 3D Layout 和 Icepak 进行 PCB、DCIR 和热分析
在本教程中,您将学习如何使用 3D Layout 执行 DCIR,然后使用功率损耗数据执行热分析。热分析将使用电子桌面 Icepak 进行。SIwave 及其嵌入式 icepak 可用于执行相同的分析,但有一个例外。电子桌面 Icepak 是一款功能齐全的 3D 工具。用户可以…...
UE5 Windows游戏窗口置顶
参考资料:UE5 UE4 项目设置全局置顶_ue4运行设置置顶-CSDN博客 修改完build.cs后,关掉重新生成解决方案。(不然可能编译报错,在这卡了半个小时) 不知道怎么用C的,可以用这个 Topmost - Keep Editor/Game w…...
【Linux】进程管理
一、程序与进程区别 1.程序: 存放在磁盘文件可执行文件(静态存在) 特点 静态性:程序是静态的,它只是一组指令的集合,在未被执行时,不会占用计算机的运行资源,也不会产生任何实际的…...
Android Studio PNG转SVG方法总结
在 Android Studio 中,将 PNG 位图转换为 SVG 矢量图并非直接内置的功能,但你可以通过以下步骤实现目标: 方法 1:使用在线转换工具 访问在线转换网站 推荐工具: CloudConvert Vector Magic OnlineConvertFree 上传…...
第6篇:Linux程序访问控制FPGA端LEDR<四>
Q:如何设计.c程序代码控制FPGA端外设LEDR动态显示? A:我们来设计程序实现简易计数器:将上一期点亮LEDR的程序代码*LEDR_ptr 0x2aa 改为 *LEDR_ptr *LEDR_ptr 1,读取LEDR端口的data寄存器,将寄存器值递增…...
DP扰码模块verilog仿真
在DisplayPort 1.4协议中,为了减少EMI,在8B/10B编码之前,需进行扰码Scramble。扰码用到了16-bit LFSR,表达式如下。 LFSR每移位8个bit后,用最高有效 8 位以相反的位顺序与一个字节数据进行异或从而实现数据加扰/解扰。…...
协作焊接机器人的应用场景
协作焊接机器人凭借其灵活性、安全性和高效性,在多个领域有着广泛的应用场景,以下是一些主要的方面: 汽车制造 车身焊接:在汽车车身生产线上,协作焊接机器人可与工人协同工作,完成车身各部件的焊接任务。例…...
深入解析计算机操作系统的底层架构与核心模块功能
深入解析计算机操作系统的底层架构与核心模块功能 一、操作系统底层架构总览 操作系统处于计算机系统的核心地位,是计算机硬件与用户之间的关键纽带,承担着资源管理者的重要角色。它负责统筹管理计算机的各类资源,如CPU、内存、存储设备以及…...
Elasticsearch 官网阅读学习笔记01
Elasticsearch 官网阅读学习笔记01 什么是 Elasticsearch? Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Elasticsearch 可为所有类型的数据提供近乎实时的搜索和分析。无论您拥有的是结构化或非结构化文本、数值数据还是地理空间数据 Elastic…...
玩转Docker | 使用Docker搭建Van-Nav导航站
玩转Docker | 使用Docker搭建Van-Nav导航站 前言一、Van-Nav介绍van-nav 简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Van-Nav服务下载镜像创建容器检查容器状态检查服务端口安全设置四、访问Van-Nav应用访问Van-Nav首页登录后台管理五、添…...
若依 前后端部署
后端:直接把代码从gitee上拉去到本地目录 (https://gitee.com/y_project/RuoYi-Vue ) 注意下redis连接时password改auth 后端启动成功 前端:运行前首先确保安装了node环境,随后执行: !!一定要用管理员权限…...
笔记:头文件与静态库的使用及组织方式
笔记:头文件与静态库的使用及组织方式 1. 头文件的作用 接口声明:提供函数、类、变量等标识符的声明,供其他模块调用。编译依赖:编译器需要头文件来验证函数调用和类型匹配。避免重复定义:通过包含保护(如…...
PostgreSQL-常用命令
PostgreSQL 提供了丰富的命令行工具和 SQL 命令,用于管理和操作数据库。以下是一些常用的命令和操作: 1. 数据库管理 创建数据库 CREATE DATABASE dbname; 删除数据库 DROP DATABASE dbname; 列出所有数据库 \l SELECT datname FROM pg_database;…...
如何在 Postman(测试工具) 中实现 Cookie 持久化并保持同一会话
在开发基于 Spring Boot 的 Web 应用时,使用 Session 存储验证码等敏感信息是常见的做法。然而,在调试接口时,你可能会遇到这样一个问题:第一次请求接口时存入的验证码在第二次请求时无法获取,原因往往是两个请求所使用…...
粘性定位(position:sticky)——微信小程序学习笔记
1. 简介 CSS 中的粘性定位(Sticky positioning)是一种特殊的定位方式,它可以使元素在滚动时保持在视窗的特定位置,类似于相对定位(relative),但当页面滚动到元素的位置时,它会表现得…...
谷歌浏览器极速安装指南
目录 📋 准备工作 步骤一:访问官网 🌐 步骤二:获取安装包 ⬇️ 步骤三:一键安装 🖱️ 步骤四:首次启动设置 ⚙️ 步骤五:开始探索! 🌟 💬 …...
【2024年最新IEEE Trans】模糊斜率熵Fuzzy Slope entropy及5种多尺度,应用于状态识别、故障诊断!
引言 2024年11月,研究者在测量领域国际顶级期刊《IEEE Transactions on Instrumentation and Measurement》(IF 5.6,JCR 1区,中科院二区)上发表科学研究成果,以“Optimized Fuzzy Slope Entropy: A Comple…...
无人机击落技术难点与要点分析!
一、技术难点 1. 目标探测与识别 小型化和低空飞行:现代无人机体积小、飞行高度低(尤其在城市或复杂地形中),雷达和光学传感器难以有效探测。 隐身技术:部分高端无人机采用吸波材料或低可探测设计,进…...
Flink的数据流图中的数据通道 StreamEdge 详解
本文从基础原理到代码层面逐步解释 Flink 的数据通道 StreamEdge,尽量让初学者也能理解。 主要思路:从概念开始,逐步深入到实现细节,并结合伪代码来逐步推导。 第一步:什么是 StreamEdge? StreamEdge 是 F…...
OpenCV 图形API(25)图像滤波-----均值滤波(模糊处理)函数blur()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 使用归一化的方框滤波器模糊图像。 该函数使用以下核来平滑图像: K 1 k s i z e . w i d t h k s i z e . h e i g h t [ 1 1 ⋯ …...
基于频率约束条件的最小惯量需求评估,包括频率变化率ROCOF约束和频率最低点约束matlab/simulink
基于频率约束条件的最小惯量评估,包括频率变化率ROCOF约束和频率最低点约束matlab/simulink 1建立了含新能源调频的频域仿真传函模型,虚拟惯量下垂控制 2基于构建的模型,考虑了不同调频系数,不同扰动情况下的系统最小惯量需求...
.pdf,.docx,.doc文档在一页纸上显示4页内容(详细步骤)
生活中常见一页纸上显示4页内容,我们熟知的是打印文件时,选择“每页4版”,但如果也是为了方便阅读,想要设置成一张纸上显示4页内容,又该怎么做呢?下面分享.docx和.pdf文档,一张纸上显示4页内容的…...
基于CNN-BiLSTM-GRU的深度Q网络(Deep Q-Network,DQN)求解移动机器人路径规划,MATLAB代码
一、深度Q网络(Deep Q-Network,DQN)介绍 1、背景与动机 深度Q网络(DQN)是深度强化学习领域的里程碑算法,由DeepMind于2013年提出。它首次在 Atari 2600 游戏上实现了超越人类的表现,解决了传统…...
高并发场景下的 Java 性能优化
在当今数字化时代,高并发场景已成为众多 Java 应用面临的常态,如电商大促、在线直播等活动期间,系统需承受巨大的访问压力。因此,Java 性能优化在高并发场景下显得尤为重要。传统的人工编写代码优化方式不仅耗时费力,还…...