当前位置: 首页 > news >正文

基于CNN-BiLSTM-GRU的深度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-BiLSTM-GRU深度神经网络作为Q函数的近似器

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

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

3.1 环境设置

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

3.2 网络设计

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

  • 输入层:接收10×10的地图作为输入。
  • 隐藏层:包含卷积层、LSTM、GRU等,用于提取地图特征。
  • 输出层:输出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代码见下方名片

相关文章:

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

一、深度Q网络(Deep Q-Network,DQN)介绍 1、背景与动机 深度Q网络(DQN)是深度强化学习领域的里程碑算法,由DeepMind于2013年提出。它首次在 Atari 2600 游戏上实现了超越人类的表现,解决了传统…...

高并发场景下的 Java 性能优化

在当今数字化时代,高并发场景已成为众多 Java 应用面临的常态,如电商大促、在线直播等活动期间,系统需承受巨大的访问压力。因此,Java 性能优化在高并发场景下显得尤为重要。传统的人工编写代码优化方式不仅耗时费力,还…...

Java 设计模式:观察者模式详解

Java 设计模式:观察者模式详解 观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会收到通知并自动更新。这种模式广泛…...

Linux vagrant 导入Centos

前言 vagrant 导入centos 虚拟机 前提要求 安装 virtualbox 和vagrant<vagrant-disksize> (Linux 方式 Windows 方式) 创建一键部署centos 虚拟机 /opt/vagrant 安装目录/opt/VirtualBox 安装目录/opt/centos8/Vagrantfile &#xff08;可配置网络IP&#xff0c;内存…...

linux Ubuntu 如何删除文件,错误删除后怎么办?

一、删除文件的常用方法 命令行删除 普通删除&#xff1a;rm 文件名 &#xff08;示例&#xff1a;rm old_file.txt&#xff09; 强制删除&#xff08;无提示&#xff09;&#xff1a;rm -f 文件名 &#xff08;示例&#xff1a;rm -f locked_file.txt&#xff09; 删除目录…...

【前端】事件循环专题

引入 以下情况是为什么呢&#xff1f; //q1 for (var i 0; i < 3; i) {setTimeout(() > {console.log(i);}, 1000); } // console: // 3 // 3 // 3//q2 let name;setTimeout(() > {name name;console.log(name); }, 1000);if (name) {name newname;console.log(n…...

3DMAX笔记-UV知识点和烘焙步骤

1. 在展UV时&#xff0c;如何点击模型&#xff0c;就能选中所有这个模型的uv 2. 分多张UV时&#xff0c;不同的UV的可以设置为不同的颜色&#xff0c;然后可以通过颜色进行筛选。 3. 烘焙步骤 摆放完UV后&#xff0c;要另存为一份文件&#xff0c;留作备份 将模型部件全部分成…...

【深度学习】PyTorch实现VGG16模型及网络层数学原理

一、Demo概述 代码已附在文末 1.1 代码功能 ✅ 实现VGG16网络结构✅ 在CIFAR10数据集上训练分类模型 1.2 环境配置 详见【深度学习】Windows系统Anaconda CUDA cuDNN Pytorch环境配置 二、各网络层概念 2.1 卷积层&#xff08;nn.Conv2d&#xff09; nn.Conv2d(in_cha…...

Spring 事务

29.Spring管理事务的方式有几种&#xff1f; Spring中的事务分为编程式事务和声明式事务。 编程式事务是在代码中硬编码&#xff0c;通过 TransactionTemplate或者 TransactionManager 手动管理事务&#xff0c;事务范围过大会出现事务未提交导致超时&#xff0c;比较适合分布…...

GPT - TransformerDecoderBlock

本节代码定义了一个 TransformerDecoderBlock 类&#xff0c;它是 Transformer 架构中解码器的一个基本模块。这个模块包含了多头自注意力&#xff08;Multi-Head Attention&#xff09;、前馈网络&#xff08;Feed-Forward Network, FFN&#xff09;和层归一化&#xff08;Lay…...

【C语言】预处理(预编译)(C语言完结篇)

一、预定义符号 前面我们学习了C语言的编译和链接。 在C语言中设置了一些预定义符号&#xff0c;其可以直接使用&#xff0c;预定义符号也是在预处理期间处理的。 如下&#xff1a; 可以看到上面的预定义符号&#xff0c;其都有两个短下划线&#xff0c;要注意的是&#xff…...

【Kubernetes】Kubernetes 如何进行日志管理?Fluentd / Loki / ELK 适用于什么场景?

由于 Kubernetes 运行在容器化的环境中&#xff0c;应用程序和系统日志通常分布在多个容器和节点上&#xff0c;传统的日志管理方法&#xff08;例如直接访问每个节点的日志文件&#xff09;在 Kubernetes 中不适用。 因此&#xff0c;Kubernetes 引入了集中式日志管理方案&am…...

从 SaaS 到 MCP:构建 AI Agent 生态的标准化服务升级之路

从 SaaS 到 MCP&#xff1a;构建 AI Agent 生态的标准化服务升级之路 —— 以数据连接器 dslink 的技术改造实践为例 引言&#xff1a;AI Agent 时代的 SaaS 服务范式转型 在生成式 AI 爆发式发展的 2025 年&#xff0c;AI Agent 已从概念验证走向企业级应用落地&#xff0c;…...

Linux 入门五:Makefile—— 从手动编译到工程自动化的蜕变

一、概述&#xff1a;Makefile—— 工程编译的 “智能指挥官” 1. 为什么需要 Makefile&#xff1f; 手动编译的痛点&#xff1a;当工程包含数十个源文件时&#xff0c;每次修改都需重复输入冗长的编译命令&#xff08;如gcc file1.c file2.c -o app&#xff09;&#xff0c;…...

CST入门教程:如何从SYZ参数提取电容C和电感L --- 双端口

上期解释了单端口计算S参数&#xff0c;然后后处理很容易提取L或C&#xff0c;已经满足基本需求。 这期我们看复杂一点的情况&#xff0c;电路中放两个端口&#xff0c;比如S2P: 或集总电路&#xff1a; 或导入SPICE&#xff1a; 两个端口的Y和Z参数就是四个量了&#xff0c;Y…...

桌面版本及服务器版本怎么查看网络源软件包的url下载路径

服务器版本&#xff1a; ### 利用yumdownloader工具 - 首先安装yum-utils软件包&#xff0c;它包含yumdownloader工具。执行命令&#xff1a; bash yum install yum-utils - 安装完成后&#xff0c;使用yumdownloader --urls <package_name>命令来获取软件包的下载UR…...

汽车零部件产线节能提效,工业网关解锁数据采集 “密码”

在汽车零部件生产领域&#xff0c;高效的生产监控与精准的数据采集至关重要。工业网关作为智能工厂的关键枢纽&#xff0c;正发挥着不可替代的作用&#xff0c;助力产线实现电表等多种仪表数据的采集与高效监控。 背景简析 汽车零部件产线涉及众多设备与环节&#xff0c;各类电…...

量化策略分类、优劣势及对抗风险解析

一、常见量化策略分类及优劣势 1. 趋势跟踪策略&#xff08;Trend Following&#xff09; 原理&#xff1a;通过捕捉价格趋势&#xff08;如均线突破、动量指标&#xff09;进行交易。 代表模型&#xff1a;海龟交易法则、Dual Thrust。 优势&#xff1a; 在强趋势市场&am…...

Linux调试工具——gdb/cgdb

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲Linux调试工具——gdb/cgdb&#xff1a; &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C学习笔记&#xff0c;C…...

SQLite + Redis = Redka

Redka 是一个基于 SQLite 实现的 Redis 替代产品&#xff0c;实现了 Redis 的核心功能&#xff0c;并且完全兼容 Redis API。它可以用于轻量级缓存、嵌入式系统、快速原型开发以及需要事务 ACID 特性的键值操作等场景。 功能特性 Redka 的主要特点包括&#xff1a; 使用 SQLi…...

使用 Terraform 部署 Azure landing zone

Azure 登陆区是架构完善的环境&#xff0c;遵循 Microsoft 针对 Azure 云架构的最佳实践。它们为团队运行工作负载提供了良好管理的基础&#xff0c;从而提供了可扩展性并促进了云的采用。 如果您有兴趣部署 Azure 登陆区&#xff0c;Terraform 是一个不错的选择。本教程概述的…...

【搭建博客网站】老旧笔记本“零成本逆袭”

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言博客网站搭建免费域名本地主机安装虚拟机安装宝塔及配置花生壳内网穿透 磁盘扩容 …...

XHR、FetchAxios详解网络相关大片文件上传下载

以下是 XHR(XMLHttpRequest) 与 Fetch API 的全面对比分析,涵盖语法、功能、兼容性等核心差异: 一、语法与代码风格 XHR(基于事件驱动) 需要手动管理请求状态(如 onreadystatechange 事件)和错误处理,代码冗长且易出现回调地狱。 const xhr = new XMLHttpRequest(); x…...

共享内存(与消息队列相似)

目录 共享内存概述 共享内存函数 &#xff08;1&#xff09;shmget函数 功能概述 函数原型 参数解释 返回值 示例 结果 &#xff08;2&#xff09;shmat函数 功能概述 函数原型 参数解释 返回值 &#xff08;3&#xff09;shmdt函数 功能概述 函数原型 参数解释…...

【3D开发SDK】HOOPS SDKS如何在BIM行业运用?

Tech Soft 3D提供了支持核心功能的软件开发工具&#xff0c;使开发人员可以使用Windows&#xff0c;Linux&#xff0c;OSX和移动平台等广泛的平台来构建巨大而复杂的建筑和BIM应用程序。HOOPS SDK支持多种格式的CAD导入和3D查看技术。这些技术受到了Trimble&#xff0c;RIB&…...

纳米软件矿用电源模块自动化测试方案分享

矿用电源模块主要是用于矿井等危险环境的一种电源系统&#xff0c;它可以为矿井中的仪器提供充足的电力支持。由于矿用电源经常用在危险环境中&#xff0c;因此对于矿用电源的稳定性要求极为严格。 纳米软件矿用电源模块自动化测试方案 测试需求分析 矿用电源模块作为矿井作业…...

pycharm中安装Charm-Crypto

一、安装依赖 1、安装gcc、make、perl sudo apt-get install gcc sudo apt-get install make sudo apt-get install perl #检查版本 gcc -v make -v perl -v 2、安装依赖库m4、flex、bison(如果前面安装过pypbc的话,应该已经装过这些包了) sudo apt-get update sudo apt…...

RTX30系显卡运行Tensorflow 1.15 GPU版本

​ 30系显卡只支持cuda11.0及以上版本&#xff0c;但很多tensorflow项目用的仍然是1.1x版本&#xff0c;这些版本需要cuda10或者以下版本&#xff0c;这就导致在30系显卡上无法正常运1.1x版本的tensorflow&#xff0c;最近几天我也因为这个问题头疼不已&#xff0c;网上一番搜索…...

adb|scrcpy的安装和配置方法|手机投屏电脑|手机声音投电脑|adb连接模拟器或手机

adb|scrcpy的安装和配置方法手机投屏电脑|手机声音投电脑|adb连接模拟器或手机或电视 引言 在数字设备交织的现代生活中&#xff0c;adb&#xff08;Android Debug Bridge&#xff09;与 scrcpy 宛如隐匿的强大工具&#xff0c;极大地拓展了我们操控手机、模拟器乃至智能电视等…...

LangChain4j(2):Chat、流式与文生图模型功能

本文将探讨 LangChain4j 的聊天对话、流式对话以及文生图这三种常见且实用的功能&#xff0c;以及实际代码示例 一、聊天对话&#xff08;ChatLanguageModel&#xff09; 在 LangChain4j 中&#xff0c;使用ChatLanguageModel进行基本的聊天对话简单直观。以下是一段示例代码&a…...

Uniapp当中的async/await的作用

一、原始代码的行为&#xff08;使用 async/await&#xff09; const getUserMessagePlan async () > {// 等待两个异步操作完成const tabsList await message.getTagesList(); // 等待获取标签列表const tagsStateList await message.getTagsStateList(); // 等…...

JS包装类型Array

reduce()函数 没有起始值的执行过程 有初始值的执行过程 计算对象 是对象数组的情况 数组类型 方法...

Cursor + MCP让Blender实现自动建模

先决条件 Blender 3.0 或更新版本 Python 3.10 或更高版本 uv Blender安装 && 插件安装 下载Blender&#xff0c;版本最好是3.x以上的版本&#xff0c;选择适合自己的平台&#xff0c;地址&#xff1a;Download — blender.org 安装插件 从https://g…...

websocket深入-webflux+websocket

文章目录 背景版本约定配置文件代码使用webflux使用websocket配置文件handler基类实现类注册路由 背景 基于更复杂的情况和更高的开发要求&#xff0c;我们可能会遇到必须同时要使用webflux和websocket的情况。 版本约定 JDK21Springboot 3.2.0Fastjson2lombok 配置文件 &…...

LangChain-输出解析器 (Output Parsers)

输出解析器是LangChain的重要组件&#xff0c;用于将语言模型的原始文本输出转换为结构化数据。本文档详细介绍了输出解析器的类型、功能和最佳实践。 概述 语言模型通常输出自然语言文本&#xff0c;但在应用开发中&#xff0c;我们经常需要将这些文本转换为结构化的数据格式…...

wsl2+ubuntu22.04安装blenderproc教程

本章教程,介绍如何在windows操作系统上通过wsl2+Ubuntu22.04上安装blenderproc。 一、pipi安装方式 推荐使用minconda3安装Python环境。 pip install Blenderproc二、源码安装 1、下载源码 git clone https://github.com/DLR-RM/BlenderProc2、安装依赖 cd BlenderProc &am…...

矩阵热图】】

一、基础热图绘制 import matplotlib.pyplot as plt import numpy as np# 模拟数据生成 matching_history [np.random.randint(0, 2, (5, 3)) for _ in range(4)] # 5个UE&#xff0c;3个边缘服务器&#xff0c;4次迭代# 绘制最终匹配矩阵 plt.figure(figsize(10, 6)) plt.i…...

opencv人脸性别年龄检测

一、引言 在计算机视觉领域&#xff0c;人脸分析是一个热门且应用广泛的研究方向。其中&#xff0c;人脸性别年龄检测能够自动识别图像或视频流中人脸的性别和年龄信息&#xff0c;具有诸多实际应用场景&#xff0c;如市场调研、安防监控、用户个性化体验等。OpenCV 作为一个强…...

idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊

idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊 在 IntelliJ IDEA&#xff08;或其他 JetBrains 系列 IDE&#xff09;中无法运行某些命令&#xff0c;但在系统的命令提示符&#xff08;CMD&#xff09;中可以正常运行&#xff0c;这种情况通常是由于以下原因之一导致的…...

【ROS】软件包后期添加依赖

【ROS】软件包后期添加依赖 前言整体思路修改 package.xml1. 构建依赖&#xff08;build_depend&#xff09;2. 构建导出依赖&#xff08;build_export_depend&#xff09;3. 运行依赖&#xff08;exec_depend&#xff09;如何修改 修改 CMakeLists.txt修改 find_package其他修…...

十三届蓝桥杯Java省赛 B组(持续更新..)

目录 十三届蓝桥杯Java省赛 B组第一题&#xff1a;星期计算第二题&#xff1a;山第三题&#xff1a;字符统计第四题&#xff1a;最少刷题数第五题&#xff1a;求阶乘第六题&#xff1a;最大子矩阵第七题&#xff1a;数组切分第八题&#xff1a;回忆迷宫第九题&#xff1a;红绿灯…...

生成式人工智能的价值回归:重塑技术、社会与个体的发展轨迹

在数字化浪潮的席卷之下,生成式人工智能(Generative AI)正以前所未有的速度重塑人类社会的面貌。这项技术不仅被视为人工智能发展的新阶段,更被赋予了推动生产力跃升、加速社会形态变革的历史使命。生成式人工智能的价值回归,不仅体现在技术本身的革新与突破,更在于其对个…...

【工具开发教程】通过批量OCR识别PDF扫描件中的文本,给PDF批量重命名,基于WPF和阿里云的实现方案,超详细

以下是基于WPF和阿里云实现批量OCR识别PDF扫描件中的文本,并给PDF批量重命名的项目方案,包含项目背景、界面设计、代码步骤和开发总结。 一、项目背景 在日常办公或学习中,处理大量PDF扫描件时,常常需要手动提取文件中的文本内容并重命名文件。这种方式效率低下且容易出错…...

AI 重构 Java 遗留系统:从静态方法到 Spring Bean 注入的自动化升级

在当今快速发展的软件行业中&#xff0c;许多企业都面临着 Java 遗留系统的维护和升级难题。这些老旧系统往往采用了大量静态方法&#xff0c;随着业务的不断发展&#xff0c;其局限性日益凸显。而飞算 JavaAI 作为一款强大的 AI 工具&#xff0c;为 Java 遗留系统的重构提供了…...

JS—同源策略:2分钟掌握同源策略

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–什么是“同源”&#xff1f;三–同源策略的限制范围​四–允许跨源的场景​五–如何绕过同源策略&#xff08;安全方式&#xff09;​六–同源策略的安全意义​七–总结 二. 什么是“同源”&#xff1f; …...

【C++】关于scanf是否需要使用的快速记忆

在 C 语言中&#xff0c;scanf 函数用于从标准输入读取数据并存储到变量中。scanf 函数需要知道变量的内存地址&#xff0c;以便将输入的数据存储到正确的内存位置。这就是为什么在大多数情况下需要使用 & 符号的原因。 1. 为什么需要使用& & 符号用于获取变量的内…...

BUUCTF-web刷题篇(19)

28.CheckIn 源码&#xff1a; #index.php <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&q…...

国家优青ppt美化_青年科学基金项目B类ppt案例模板

国家优青 国家优青&#xff0c;全称“国家优秀青年基金获得者”。2025改名青年科学基金B类。 作为自然基金人才资助类型&#xff0c;支持青年学者在基础研究方面自主选择研究方向开展创新研究。它是通往更高层次科研荣誉的重要阶梯&#xff0c;是准杰青梯队。 / WordinPPT /…...

【HTML】动态背景效果前端页面

下面是一个带有多种动态背景效果的现代化前端页面&#xff0c;包含粒子效果、渐变波浪和星空背景三种可选动态背景。直接上代码&#xff01;! <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name&quo…...

前端面试宝典---创建对象的配置

Object.create 对整个对象的多个属性值进行配置 创建对象 不可更改属性值 // 创建对象 不可更改属性值 let obj Object.create({}, {name: {value: lisi,writable: false,},age: {value: 20,writable: true,} })console.log(初始化obj, obj) obj.name wangwu console.log(…...