深度强化学习 | 图文详细推导软性演员-评论家SAC算法原理
目录
- 0 专栏介绍
- 1 最大熵贝尔曼方程
- 2 SAC算法原理推导
- 2.1 参数化动作-价值函数
- 2.2 参数化策略
- 2.3 参数化温度
- 3 算法流程
0 专栏介绍
本专栏以贝尔曼最优方程等数学原理为根基,结合PyTorch框架逐层拆解DRL的核心算法(如DQN、PPO、SAC)逻辑。针对机器人运动规划场景,深入探讨如何将DRL与路径规划、动态避障等任务结合,包含仿真环境搭建、状态空间设计、奖励函数工程化调优等技术细节,旨在帮助读者掌握深度强化学习技术在机器人运动规划中的实战应用
🚀详情:《运动规划实战精讲:深度强化学习篇》
1 最大熵贝尔曼方程
经典强化学习的目标是希望得到使累计奖赏最大的策略
π ∗ = a r g max π ∈ Π E ( s t , a t ) π [ ∑ t R s t → s t + 1 a t ] \pi ^*=\underset{\pi \in \Pi}{\mathrm{arg}\max}\mathbb{E} _{\left( s_t,a_t \right) ~\pi}\left[ \sum_t{R_{s_t\rightarrow s_{t+1}}^{a_t}} \right] π∗=π∈ΠargmaxE(st,at) π[t∑Rst→st+1at]
由于从 π \pi π产生动作过程中的最大值算子 a r g m a x argmax argmax(确定性策略)或高斯采样(随机性策略),此时策略是如图所示的单峰分布。
单峰策略的缺陷在于容易过拟合到局部最优点。如下图所示,迷宫寻路问题中,一个训练好的智能体按照既定的最优决策运动到目标点,此时环境中增加噪声,在单峰策略作用下,智能体将在动态障碍物处反复做出过往的最优动作,产生徘徊无解的现象。
为了解决这个问题,最大熵强化学习(Maximum Entropy Reinforcement Learning)引入了熵作为额外的策略优化目标
π ∗ = a r g max π ∈ Π E ( s t , a t ) π [ ∑ t R s t → s t + 1 a t + α H ( π ( s t , a t ) ) ] \pi ^*=\underset{\pi \in \Pi}{\mathrm{arg}\max}\mathbb{E} _{\left( s_t,a_t \right) ~\pi}\left[ \sum_t{R_{s_t\rightarrow s_{t+1}}^{a_t}+\alpha H\left( \pi \left( s_t,a_t \right) \right)} \right] π∗=π∈ΠargmaxE(st,at) π[t∑Rst→st+1at+αH(π(st,at))]
其中熵
H ( π ( s t , a t ) ) = E ( s t , a t ) π [ − log π ( s t , a t ) ] H\left( \pi \left( s_t,a_t \right) \right) =\mathbb{E} _{\left( s_t,a_t \right) ~\pi}\left[ -\log \pi \left( s_t,a_t \right) \right] H(π(st,at))=E(st,at) π[−logπ(st,at)]
衡量了决策的随机性,温度系数 α \alpha α衡量了熵的重要性,特别地,均匀分布的熵最大,即每个动作都有同等概率被选择。不妨令
R s t → s t + 1 s o f t , a t = R s t → s t + 1 a t + γ α H ( π ( s t + 1 , a t + 1 ) ) R_{s_t\rightarrow s_{t+1}}^{\mathrm{soft},a_t}=R_{s_t\rightarrow s_{t+1}}^{a_t}+\gamma \alpha H\left( \pi \left( s_{t+1},a_{t+1} \right) \right) Rst→st+1soft,at=Rst→st+1at+γαH(π(st+1,at+1))
则应用经典贝尔曼递推算子可以保证收敛,对经典贝尔曼公式不熟悉的同学可以参考:
- 经典强化学习 | 策略评估与贝尔曼期望方程详细推导
- 经典强化学习 | 策略改进定理与贝尔曼最优方程详细推导
最大熵贝尔曼价值函数为
V s o f t π ( s ) = Δ α log ∫ a exp ( 1 α Q s o f t π ( s , a ) ) d a V_{\mathrm{soft}}^{\pi}\left( s \right) \xlongequal{\Delta}\alpha \log \int_a{\exp \left( \frac{1}{\alpha}Q_{\mathrm{soft}}^{\pi}\left( s,a \right) \right) \mathrm{d}a} Vsoftπ(s)Δαlog∫aexp(α1Qsoftπ(s,a))da
所以最大熵强化学习输出一个多峰策略,且峰值正比于价值 。如图所示,多峰策略的优势在于探索性强,可以适应于多模态、多目标的复杂任务;鲁棒性强,熵正则会让智能体倾向于学习所有较优动作
2 SAC算法原理推导
软性演员-评论家(Soft Actor-Critic, SAC)算法是基于最大熵原理的离线策略方法,具有高效的采样效率和泛化能力
2.1 参数化动作-价值函数
同样出于降低过估计的目的设置Critic网络 Q ( s , a ; w ) Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{w} \right) Q(s,a;w)与 Q ^ ( s , a ; w ^ ) \hat{Q}\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\hat{w}} \right) Q^(s,a;w^),结合最大熵贝尔曼方程可设计损失函数
J ( w ) = 1 2 E [ ( Q ( s , a ; w ) − ( r s → s ′ + γ max a ′ ( Q ^ ( s ′ , a ′ ; w ^ ) − α log π ( s ′ , a ′ ; θ ) ) ) ) ] J\left( \boldsymbol{w} \right) =\frac{1}{2}\mathbb{E} \left[ \left( Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{w} \right) -\left( r_{\boldsymbol{s}\rightarrow \boldsymbol{s}'}+\gamma \max _{\boldsymbol{a}'}\left( \hat{Q}\left( \boldsymbol{s}',\boldsymbol{a}';\boldsymbol{\hat{w}} \right) -\alpha \log \pi \left( \boldsymbol{s}',\boldsymbol{a}';\boldsymbol{\theta } \right) \right) \right) \right) \right] J(w)=21E[(Q(s,a;w)−(rs→s′+γa′max(Q^(s′,a′;w^)−αlogπ(s′,a′;θ))))]
2.2 参数化策略
设SAC算法的输出是一个高斯分布,为了便于求导进行重参数化,令 π ( s , a ; θ ) \pi \left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right) π(s,a;θ)的输出是均值 μ ( s ; θ ) \boldsymbol{\mu }\left( \boldsymbol{s};\boldsymbol{\theta } \right) μ(s;θ)和标准差 σ ( s ; θ ) \boldsymbol{\sigma }\left( \boldsymbol{s};\boldsymbol{\theta } \right) σ(s;θ),从标准正态分布 N ( 0 , 1 ) \mathcal{N} \left( 0,1 \right) N(0,1)中采样 ε \varepsilon ε,则可得动作 ρ ( u ∣ s ) = μ ( s ; θ ) + ε ⋅ σ ( s ; θ ) \rho \left( \boldsymbol{u}|\boldsymbol{s} \right) =\mu \left( \boldsymbol{s};\boldsymbol{\theta } \right) +\varepsilon \cdot \sigma \left( \boldsymbol{s};\boldsymbol{\theta } \right) ρ(u∣s)=μ(s;θ)+ε⋅σ(s;θ)。由于正态分布的取值不受限,SAC进一步采用 tanh \tanh tanh函数进行压缩,以考虑有限区间的动作,即
a = π ( s , a ; θ ) = tanh ( u ) \boldsymbol{a}=\pi \left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right) =\tanh \left( \boldsymbol{u} \right) a=π(s,a;θ)=tanh(u)
动作压缩导致概率分布的不一致性 π ( a ∣ s ) ≠ ρ ( u ∣ s ) \pi \left( \boldsymbol{a}|\boldsymbol{s} \right) \ne \rho \left( \boldsymbol{u}|\boldsymbol{s} \right) π(a∣s)=ρ(u∣s),所以
π ( a ∣ s ) = ρ ( u ∣ s ) ∣ d a d u T ∣ − 1 ⇒ log π ( a ∣ s ) = log ρ ( u ∣ s ) − log ∣ d a d u T ∣ \pi \left( \boldsymbol{a}|\boldsymbol{s} \right) =\rho \left( \boldsymbol{u}|\boldsymbol{s} \right) \left| \frac{\mathrm{d}\boldsymbol{a}}{\mathrm{d}\boldsymbol{u}^T} \right|^{-1}\Rightarrow \log \pi \left( \boldsymbol{a}|\boldsymbol{s} \right) =\log \rho \left( \boldsymbol{u}|\boldsymbol{s} \right) -\log \left| \frac{\mathrm{d}\boldsymbol{a}}{\mathrm{d}\boldsymbol{u}^T} \right| π(a∣s)=ρ(u∣s) duTda −1⇒logπ(a∣s)=logρ(u∣s)−log duTda
接着,根据最大熵贝尔曼策略改进定理设计策略损失函数
J ( θ ) = E ( s , a ) π ( log π ( s , a ; θ ) − 1 α Q ( s , a ; w ) + log Z ( s ) ) J\left( \boldsymbol{\theta } \right) =\mathbb{E} _{\left( \boldsymbol{s},\boldsymbol{a} \right) ~\pi}\left( \log \pi \left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right) -\frac{1}{\alpha}Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{w} \right) +\log Z\left( \boldsymbol{s} \right) \right) J(θ)=E(s,a) π(logπ(s,a;θ)−α1Q(s,a;w)+logZ(s))
简化为
J ( θ ) = E ( s , a ) π ( α log π ( s , a ; θ ) − Q ( s , a ; w ) ) J\left( \boldsymbol{\theta } \right) =\mathbb{E} _{\left( \boldsymbol{s},\boldsymbol{a} \right) ~\pi}\left( \alpha \log \pi \left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right) -Q\left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{w} \right) \right) J(θ)=E(s,a) π(αlogπ(s,a;θ)−Q(s,a;w))
2.3 参数化温度
在训练过程中,随着策略的改善,熵可能会发生不可预测的变化,因此采用固定的温度超参数 α \alpha α衡量熵项的权重将使训练效果不稳定。SAC设计了温度的自适应调整机制,要求在最大化期望回报的同时,每次迭代的策略需要满足最小熵约束。设置损失函数
J ( α ) = E [ − α log π ( s , a ; θ ) − α H 0 ] J\left( \alpha \right) =\mathbb{E} \left[ -\alpha \log \pi \left( \boldsymbol{s},\boldsymbol{a};\boldsymbol{\theta } \right) -\alpha H_0 \right] J(α)=E[−αlogπ(s,a;θ)−αH0]
J ( α ) J\left( \alpha \right) J(α)指出,若动作熵大于目标熵,则正梯度将减小温度系数 α \alpha α,降低策略分布的随机性,使模型专注于获得更高的单峰回报;若动作熵小于目标熵,则负梯度将增大温度系数 α \alpha α,提升策略分布的随机性,防止产生过拟合
至此完成了SAC算法的参数化过程
3 算法流程
SAC算法完整的流程如下所示
🔥 更多精彩专栏:
- 《ROS从入门到精通》
- 《Pytorch深度学习实战》
- 《机器学习强基计划》
- 《运动规划实战精讲》
- …
相关文章:
深度强化学习 | 图文详细推导软性演员-评论家SAC算法原理
目录 0 专栏介绍1 最大熵贝尔曼方程2 SAC算法原理推导2.1 参数化动作-价值函数2.2 参数化策略2.3 参数化温度 3 算法流程 0 专栏介绍 本专栏以贝尔曼最优方程等数学原理为根基,结合PyTorch框架逐层拆解DRL的核心算法(如DQN、PPO、SAC)逻辑。针对机器人运动规划场景…...
大数据开发 hadoop集群 3.Hadoop运行环境搭建
一、配置虚拟机 1.1 下载VMware虚拟机 1.下载地址:VMware Workstation下载_VMware Workstation官方免费下载_2024最新版_华军软件园 1.2 创建虚拟机 简易安装信息 1.3. 命名虚拟机 标题一 指定磁盘容量大小(推荐大小) 1.4. 语言和时区设…...
【HTTPS基础概念与原理】HTTPS vs HTTP:为什么现代网站必须用HTTPS?
以下是关于 HTTPS vs HTTP 的详细对比分析,涵盖安全性、性能差异及SEO影响,帮助您全面理解为何现代网站必须采用HTTPS: 一、安全性对比:HTTPS 如何解决 HTTP 的致命缺陷 1. HTTP 的安全隐患 • 明文传输:HTTP 数据以明…...
【springcloud学习(dalston.sr1)】Eureka单个服务端的搭建(含源代码)(三)
该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一) 这篇文章主要介绍单个eureka服务端的集群环境是如何搭建的。 通过前面的文章【springcloud学习(dalston.sr1)】…...
榕壹云打车系统:基于Spring Boot+MySQL+UniApp的开源网约车解决方案
传统出租车行业的数字化痛点与破局 近年来,随着网约车市场的爆发式增长,传统出租车企业面临数字化转型的迫切需求。传统出租车行业存在以下核心痛点: 1. 运营效率低下:手工调度、纸质单据导致资源浪费。 2. 乘客体验不足:无法实时查看车辆位置、支付不便。 3. 安全监管…...
第5章 运算符、表达式和语句
目录 5.1 循环简介5.2 基本运算符5.3 其他运算符5.4 表达式和语句5.5 类型转换5.6 带有参数的函数5.7 一个实例程序5.11 编程练习 5.1 循环简介 5.2 基本运算符 赋值运算符: 几个术语:数据对象、左值、右值和操作数 数据对象:泛指数据存储区…...
全流量解析:让安全防御从“被动挨打”升级为“主动狩猎”
在网络安全领域,攻击者就像“隐形小偷”,总想悄无声息地入侵你的网络。而全流量解析,就是一套能“看清每一辆网络货车里装了什么”的技术。它通过采集并分析网络中的全部原始流量数据,帮助安全团队发现威胁、溯源攻击,…...
bfs-最小步数问题
最小步长模型 特征: 主要是解决权值为1且状态为字符串类型的最短路问题,实质上是有向图的最短路问题,可以简化为bfs求最短路问题。 代表题目: acwing 845 八数码问题: 八数码题中由于每次交换的状态是由x进行上下左右…...
机器学习 Day17 朴素贝叶斯算法-----概率论知识
1.简介 朴素贝叶斯(Naive Bayes)是一类基于贝叶斯定理(之后讲)并假设特征之间相互独立的概率分类算法 ,是机器学习中应用广泛的分类模型。以下为您详细介绍: 核心原理 贝叶斯定理:描述后验概…...
Selenium-Java版(环境安装)
Selenium自动化环境安装 前言 安装 安装客户端库 安装Chrome浏览器 安装Chrome浏览器驱动 安装Edge浏览器驱动 配置环境变量 示例 前言 参考教材:Python Selenium Web自动化 2024版 - 自动化测试 爬虫_哔哩哔哩_bilibili 安装 安装客户端库 <dep…...
【华为HCIP | 华为数通工程师】821—多选解析—第二十四页
980、以下关于BGP路由等价负载分担的描述,正确的是哪些项? A、公网中到达同一目的地的IBGP和EBGP路由不能形成负载分担。 B、在设备上使能BGP负载分担功能后,只有满足条件的多条BGP路由才会成为等价路由,进行负载分担。 C、默认情况下设备只会对AS Path长度相同的路由进…...
如何用Jsoup库提取商品名称和价格?
使用 Jsoup 库提取商品名称和价格是一个常见的任务,尤其是在爬取电商网站的商品详情时。Jsoup 是一个非常强大的 HTML 解析库,可以方便地从 HTML 文档中提取数据。以下是如何使用 Jsoup 提取商品名称和价格的详细步骤和代码示例。 一、环境准备 确保你…...
一文掌握六个空转数据库
写在前面 在实际的空转分析,尤其是细胞注释环节中,我们需要依赖大量的文献/数据库来对结果进行参考、校验,此时空间转录数据库能够快速帮助我们找到合适的参考数据集/信息。此外,现存的很多空转数据库收集了大量可供挖掘的数据&a…...
基于Qt的OSG三维建模
以下是一个基于Qt和OpenSceneGraph(OSG)实现三维模型交互的示例代码,包含模型高亮、文本标注等功能。代码采用Qt5和OSG 3.6版本开发。 一、核心类设计(C) 1. 主窗口类(继承QMainWindow) #inc…...
Spring Cloud:构建云原生微服务架构的最佳工具和实践
🌥️ 1. 引言 一、背景介绍:为什么需要微服务? 随着互联网技术的发展,企业级应用的功能日益复杂,传统的单体架构(Monolithic Architecture)逐渐暴露出一系列问题: 项目庞大&#…...
云图库和黑马点评的项目学习经验
捷优商超 我这个项目我主要实现了三个点,第一个是博主推送,就是用户进行消息的推送,拱用户进行商品的评价。第二个就是用户的签到。第三个就是优惠券秒杀了。 首先是博主推送,我们获取到前端信息以后直接把消息放到数据库里面&…...
苍穹外卖 - Day02 学习笔记
一、核心功能:新增员工 在实现新增员工功能时,有几个关键的技术点和设计考量需要我们掌握。 1.1 数据传输对象 (DTO) 的应用 核心概念: 数据传输对象(Data Transfer Object, DTO)是在应用程序不同分层之间传递数据的…...
设计模式(9)——创建型模式之工厂方法
设计模式(9)——创建型模式之工厂方法 工厂方法作用结构伪代码适用场景工厂方法 作用 工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。 结构 产品(Product)将会对接口进行声明。对于所有由创建者及其子类构建的对象,…...
机器学习基础课程-6-课程实验
目录 6.1 实验介绍 实验准备 贷款审批结果预测 6.2 数据读取 6.3 数据处理 6.4 特征处理 有序型特征处理 类别型特征处理 数值型特征归一化 6.5 建立机器学习模型 建立测试模型 结果可视化 6.1 实验介绍 贷款审批结果预测 银行的放贷审批,核心要素为风险控制。因此&…...
IP SSL怎么签发使用
IP证书的签发首先是需要有一个可供绑定的IP地址,作为常用数字证书之一,IP证书也因为其广泛的应用范围而深得用户的青睐和喜欢。 部署IP证书后,可以实现该IP地址的https访问,过程和域名证书相差不多。 IP证书和域名证书的区别 很…...
QMK键盘编码器(Encoder)(理论部分)
QMK键盘编码器(Encoder)(理论部分) 前言 作为一名深耕机械键盘DIY多年的老司机,我发现很多键盘爱好者对QMK编码器的配置总是一知半解。今天我就把多年积累的经验毫无保留地分享给大家,从硬件接线到软件配置,从基础应用到高阶玩法,一文全搞定!保证看完就能让你的编码…...
AI编程:使用Trae + Claude生成原型图,提示词分享
最近在学习AI编程相关的东西,看到了有人分享的提示词,做了两个APP原型图,分享给大家。 成果 第一个是依据B站的 探索者-子默 的视频,照着生成的AI改写原型图 第二个是我修改了一下提示词让AI生成做视频解析链接的APP原型图。 整体…...
计算机操作系统(七)详细讲解进程的组成与特性,状态与转换
计算机操作系统(七)进程的组成与特性,状态与转换 前言一、进程的组成1. 什么是“进程”?2. 进程的三个核心组成部分2.1 PCB(进程控制块)—— 进程的“身份证户口本”2.2 程序段—— 进程的“任务清单”2.3 …...
【2025.5.12】视觉语言模型 (更好、更快、更强)
【2025.5.12】Vision Language Models (Better, Faster, Stronger): https://huggingface.co/blog/vlms-2025 【2024.4.11】Vision Language Models Explained【先了解视觉语言模型是什么】: https://huggingface.co/blog/vlms nanoVLM: https://github.…...
数据清洗ETL
ETL介绍 “ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。ETL一词较常用在数据仓库,…...
STM32 实时时钟(RTC)详解
一、RTC 简介 RTC(Real Time Clock)即实时时钟,本质上是一个 32 位的秒级计数器: 最大计数值为 4294967295 秒,约合 136 年: 复制编辑 4294967295 / 60 / 60 / 24 / 365 ≈ 136 年 RTC 初始化时&#x…...
Java中的异常机制
目录 Error(错误) Exception(异常) 受检异常(Checked Exception) 非受检异常(Unchecked Exception) 图示总结: 异常处理机制 try-catch-finally throws关键字 图…...
计算机网络:怎么理解调制解调器的数字调制技术?
数字调制技术详解 数字调制技术是将数字比特流转换为适合在物理信道(如电缆、光纤、无线信道)传输的模拟信号的核心技术。通过改变载波(通常是正弦波)的幅度、频率或相位(或组合),将二进制数据映射到模拟波形上。其目标是高效利用频谱资源、提升抗干扰能力,并适应不同…...
【MySQL】自适应哈希详解:作用、配置以及如何查看
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
【sql】按照数据的日期/天 ,对入库数据做数量分类
我今天写SQL,发现我的时间的写法是“年-月-日 时:分:秒 ”, 我想要按照“年-月-日”分类,看看我每一天的入库数据量是多少,然后做出一个报表出来。 sql对时间的处理: SELECT DATE(update_time) AS date_only,COUNT(*…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-A. PostgreSQL常用函数速查表
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL常用函数速查表:从数据清洗到分析的全场景工具集引言一、字符串处理函数1.1 基础操作函数1.2 模式匹配函数(正则表达式) 二、数…...
【软件测试】:推荐一些接口与自动化测试学习练习网站(API测试与自动化学习全攻略)
一、API测试练习平台 Postman Learning Center (https://learning.postman.com/) 特点:Postman官方学习中心,提供API测试完整教程(含视频、文档、沙盒环境) 练习场景:请求构造、环境变量、自动…...
iOS Safari调试教程
iOS Safari调试 本教程将指导您如何使用WebDebugX调试iOS设备上的Safari浏览器。通过本教程,您将学习如何连接iOS设备、调试Safari中的网页、分析性能问题以及解决常见的调试挑战。 准备工作 在开始调试iOS Safari之前,请确保您已经: 安装…...
Java 大视界——Java 大数据在智慧交通智能停车诱导系统中的数据融合与实时更新
面对城市停车资源错配导致的30%以上交通拥堵问题,本文以某新一线城市智慧交通项目为蓝本,深度解析Java大数据技术如何实现多源停车数据融合、动态路径规划与诱导策略优化。通过构建“感知-计算-决策”全链路系统,实现车位状态更新延迟<200…...
KUKA库卡焊接机器人智能气阀
在工业焊接的大舞台上,成本把控与环保考量愈发重要。KUKA 库卡焊接机器人智能气阀,作为前沿科技结晶,成为实现库卡焊接机器人节气的关键 “利器”,助力企业在降本增效与绿色发展之路上大步迈进。 智能气阀融合先进传感与智能调…...
react中安装依赖时的问题 【集合】
目录 依赖升级/更新 1、 npm install --save-dev 与 npm install 的区别 1. 安装位置(依赖类型) 2. package.json 中的区别 3. 示例 4. 何时使用哪种方式 2、npm install 和 yarn add 有什么不一样吗 命令语法: …...
【网络实验】-BGP-EBGP的基本配置
实验拓扑 实验要求: 使用两种方式建立不同AS号的BGP邻居,不同AS号路由器之间建立的邻居称为EBGP邻居 实验目的: 熟悉使用物理口和环回口建立邻居的方式 IP地址规划: 路由器接口IP地址AR1G0/0/012.1.1.1/24AR1Loopback 01.1.1…...
【嵌入式开发-按键扫描】
嵌入式开发-按键扫描 ■ 1. 按键■ 按键队列发送后在读取队列处理■ 定时器30ms扫描一次,并通过MsgAdd(msg); 发送出去。 ■ 2. 触摸屏处理■■ ■ 1. 按键 ■ 按键队列发送后在读取队列处理 // key queue #define KEY_QUEUE_MAX 5typedef enum {KEY_TYPE_IR 0,K…...
NineData 社区版 V4.1.0 正式发布,新增 4 条迁移链路,本地化数据管理能力再升级
NineData 社区版 V4.1.0 正式更新发布。本次通过新增 4 条迁移链路扩展、国产数据库深度适配、敏感数据保护增强等升级,进一步巩固了其作为高效、安全、易用的数据管理工具的定位。无论是开发测试、数据迁移,还是多环境的数据管理,NineData…...
TypeScript装饰器:从入门到精通
TypeScript装饰器:从入门到精通 什么是装饰器? 装饰器(Decorator)是TypeScript中一个非常酷的特性,它允许我们在不修改原有代码的情况下,给类、方法、属性等添加额外的功能。想象一下装饰器就像给你的代码…...
R语言学习--Day02--实战经验反馈
最近在做需要用R语言做数据清洗的项目,在网上看再多的技巧与语法,都不如在项目中实战学习的快,下面是我通过实战得来的经验。 判断Rstudio是否卡死 很多时候,我们在运行R语言代码时,即使只是运行框选的几行代码&#…...
《AI驱动的智能推荐系统:原理、应用与未来》
一、引言 在当今信息爆炸的时代,用户面临着海量的信息选择,从购物平台上的商品推荐到流媒体服务中的影视推荐,智能推荐系统已经成为我们日常生活中不可或缺的一部分。AI驱动的智能推荐系统通过分析用户的行为和偏好,为用户提供个性…...
AR禁毒:科技赋能,筑牢防毒新防线
过去,传统禁毒宣传教育方式对普及禁毒知识、提高禁毒意识意义重大。但随着时代和社会环境变化,其困境逐渐显现。传统宣传方式单一,主要依靠讲座、发传单、办展览。讲座形式枯燥,对青少年吸引力不足;发传单易被丢弃&…...
Ubuntu摄像头打开失败
如果遇见上面Ubuntu连接摄像头但无法打开如以上 先安装cheese apt install cheese 打开终端控制台,输入以下命令 ls /dev/video* 出现以上有设备的情况,我们采用以下解决 : 1、点击虚拟机->点击设置 2、 进入设置界面点击USB控制器&a…...
Ascend的aclgraph(七)AclConcreteGraph:capture_begin
1 回顾 在上一章Ascend的aclgraph(六)AclConcreteGraph中提到了capture_begin和capture_end两个函数,这2个函数是pybind形式,调用到torch_npu中去执行。 大概流程图如下: def __enter__(self):# Free as much memory as we can…...
JT/T 808 各版本协议字段级别对比与解析适配建议
文章目录 一、概述二、字段级对比表(以核心消息为例)三、版本文档结构差异分析四、Java 协议解析适配建议4.1、协议版本识别策略:4.2、可扩展消息体结构设计:4.3、字段兼容处理建议:4.4、推荐使用解析库或框架…...
Kafka 消费者组进度监控方法解析
#作者:张桐瑞 文章目录 前言一、使用 Kafka 自带命令行工具 kafka-consumer-groups 脚本二、使用 Kafka Java Consumer API 编程三、使用 Kafka 自带的 JMX 监控指标 前言 在 Kafka 消息队列系统中,对于 Kafka 消费者而言,监控其消费进度&a…...
国产大模型 “五强争霸”,决战 AGI
中国 AI 大模型市场正经历一场史无前例的洗牌!曾经 “百模混战” 的局面已落幕,字节、阿里、阶跃星辰、智谱和 DeepSeek 五大巨头强势崛起,形成 “基模五强” 新格局。这场竞争不仅是技术实力的较量,更是资源、人才与生态的全面博…...
lesson01-PyTorch初见(理论+代码实战)
一、初识PyTorch 二、同类框架 PyTorchVSTensorFlow 三、参数 对比 四、PyTorch生态 四、常用的网络层 五、代码分析 import torch from torch import autogradx torch.tensor(1.) a torch.tensor(1., requires_gradTrue) b torch.tensor(2., requires_gradTrue) c tor…...
几种运放典型应用电路
运算放大器简称:OP、OPA、OPAMP、运放。 一、电压跟随器 电压跟随器顾名思义运放的输入端电压与运放的输出电压相等 这个电路一般应用目的是增加电压驱动能力: 比如说有个3V电源,借一个负载,随着负载电流变大,3V就会变小说明3V电源带负载能力小,驱动能力弱,这个时候…...