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

DP 问题 -- LQR中的DP问题

深入地介绍线性二次调节问题(Linear Quadratic Regulator, LQR),并详细说明它作为动态规划(DP)的一个经典应用问题的求解过程。


📌 一、LQR问题定义(最优控制视角)

LQR 问题是一种特殊的最优控制问题,系统动力学为线性、代价函数为二次型的优化问题:

离散时间线性系统:

x t + 1 = A x t + B u t x_{t+1} = Ax_t + Bu_t xt+1=Axt+But

  • x t ∈ R n x_t \in \mathbb{R}^n xtRn 为系统状态
  • u t ∈ R m u_t \in \mathbb{R}^m utRm 为控制输入
  • A , B A,B A,B 为系统动力学矩阵

目标是找到控制策略 u t = − K x t u_t = -K x_t ut=Kxt,最小化如下二次型代价函数:

J = ∑ t = 0 ∞ ( x t T Q x t + u t T R u t ) J = \sum_{t=0}^{\infty}(x_t^T Q x_t + u_t^T R u_t) J=t=0(xtTQxt+utTRut)

其中:

  • Q ≥ 0 Q \ge 0 Q0(半正定矩阵),衡量状态代价
  • R > 0 R>0 R>0 为控制成本矩阵,通常正定

📌 二、LQR的DP形式——贝尔曼方程

LQR 问题的值函数 V ( x ) V(x) V(x) 是一个关于状态的二次型函数:

假设值函数具有如下形式:

V ( x ) = x T P x V(x) = x^T P x V(x)=xTPx

其中, P P P 为待求的对称正定矩阵。

根据DP的贝尔曼方程:

V ( x ) = min ⁡ u [ x ⊤ Q x + u ⊤ R u + γ V ( x ′ ) ] V(x) = \min_{u}\left[ x^\top Q x + u^\top R u + \gamma V(x') \right] V(x)=umin[xQx+uRu+γV(x)]

带入系统动力学 x ′ = A x + B u x' = Ax + Bu x=Ax+Bu 和上述二次型值函数假设,有:

V ( x ) = min ⁡ u [ x T Q x + u T R u + ( A x + B u ) T P ( A x + B u ) ] V(x) = \min_u\left[ x^T Q x + u^T R u + (Ax+Bu)^T P (Ax+Bu) \right] V(x)=umin[xTQx+uTRu+(Ax+Bu)TP(Ax+Bu)]

展开后:

V ( x ) = min ⁡ u [ x T Q x + u T R u + x T A T P A x + u T B T P B u + 2 x T A T P B u ] V(x) = \min_u\left[ x^T Q x + u^T R u + x^T A^T P A x + u^T B^T P B u + 2x^T A^T P B u \right] V(x)=umin[xTQx+uTRu+xTATPAx+uTBTPBu+2xTATPBu]

其中, P P P 为待确定的对称正定矩阵, Q , R Q,R Q,R 分别为状态与控制的成本矩阵。


📌 三、LQR 的 DP 求解步骤(里卡提方程求解)

为了得到最优控制律 u ∗ = − K x u^* = -K x u=Kx,关键在于确定矩阵 P P P
其求解通过动态规划(Bellman方程)导出离散里卡提方程(Discrete Algebraic Riccati Equation)

👉 离散时间里卡提方程(DRE)

P = Q + A T P A − A T P B ( R + B T P B ) − 1 B T P A P = Q + A^T P A - A^T P B(R + B^T P B)^{-1}B^T P A P=Q+ATPAATPB(R+BTPB)1BTPA

DP求解步骤

  1. 初始化矩阵 P P P 为某一正定矩阵(通常是 Q Q Q)。

  2. 迭代求解里卡提方程直到收敛。

    • 每次迭代计算:
      P k + 1 = Q + A T P k A − A T P k B ( R + B T P k B ) − 1 B T P k A P_{k+1} = Q + A^T P_k A - A^T P_k B(R+B^T P_k B)^{-1}B^T P_k A Pk+1=Q+ATPkAATPkB(R+BTPkB)1BTPkA
  3. 收敛判断
    ∥ P k + 1 − P k ∥ < ϵ \|P_{k+1}-P_k\|<\epsilon Pk+1Pk<ϵ 时结束迭代,获得稳态解 P ∗ P^* P

  4. 得到最优反馈控制律
    u t ∗ = − K x t , K = ( R + B T P B ) − 1 B T P A u_t^*=-K x_t, \quad K=(R+B^T P B)^{-1} B^T P A ut=Kxt,K=(R+BTPB)1BTPA


📌 四、LQR的一个简单示例(二维状态、一维控制输入)

假设无人机高度控制问题:

  • 状态:高度 h h h 和速度 v v v
    你给出的方程似乎格式有点小问题,这里帮你重新规范一下,并做详细解释:

🚩 正确的状态空间模型表示

假设系统是一个二维状态系统(如无人机高度控制问题):

状态定义:

状态向量:
x = [ h v ] x = \begin{bmatrix} h \\ v \end{bmatrix} x=[hv]

其中:

  • h h h:高度
  • v v v:速度

状态方程(离散时间系统):

给定状态空间模型为:
x k + 1 = A x k + B u k x_{k+1} = Ax_k + Bu_k xk+1=Axk+Buk

具体的系统矩阵 A , B A, B A,B为:
A = [ 1 d t 0 1 ] , B = [ 0 d t ] A=\begin{bmatrix} 1 & dt \\ 0 & 1 \end{bmatrix}, \quad B=\begin{bmatrix}0 \\ dt\end{bmatrix} A=[10dt1],B=[0dt]

  • 这里 d t dt dt 表示采样时间间隔。
  • u k u_k uk 为在时刻 k k k 时作用于系统的控制输入(加速度输入)。

系统模型的物理含义:

  • 位置更新方式为: h k + 1 = h k + v k ⋅ d t h_{k+1} = h_k + v_k \cdot dt hk+1=hk+vkdt
  • 速度更新方式为: v k + 1 = v k + u k ⋅ d t v_{k+1} = v_k + u_k \cdot dt vk+1=vk+ukdt

显然:

  • 状态转移矩阵 A A A 描述了状态的惯性关系;
  • 控制矩阵 B B B 表示控制输入 u k u_k uk 如何影响状态(仅作用于速度方向)。

📌 完整的状态空间表达式

更清晰的矩阵形式写为:

x k + 1 = [ h k + 1 v k + 1 ] = [ 1 d t 0 1 ] [ h k v k ] + [ 0 d t ] u k x_{k+1}=\begin{bmatrix} h_{k+1} \\ v_{k+1} \end{bmatrix}= \begin{bmatrix} 1 & dt \\[6pt] 0 & 1 \end{bmatrix} \begin{bmatrix} h_k \\ v_k \end{bmatrix}+ \begin{bmatrix} 0 \\ dt \end{bmatrix} u_k xk+1=[hk+1vk+1]=[10dt1][hkvk]+[0dt]uk

其中:

  • 状态向量 x k = [ h k , v k ] T x_k=[h_k,v_k]^T xk=[hk,vk]T
  • 控制输入 u k u_k uk(加速度输入)
  • 状态转移矩阵 A A A 表示位置由速度积分更新
  • 输入矩阵 B B B 描述输入作用于速度

📌 基于DP的LQR问题求解步骤

以此为基础的LQR控制问题(LQR框架):

🚩 步骤① 设定代价函数

假设代价函数为二次型:
J = ∑ k = 0 ∞ ( x k T Q x k + u k T R u k ) J = \sum_{k=0}^{\infty}(x_k^TQx_k + u_k^TRu_k) J=k=0(xkTQxk+ukTRuk)
例如设定:

  • 状态成本矩阵 Q = [ q h 0 0 q v ] Q=\begin{bmatrix}q_h & 0\\0&q_v\end{bmatrix} Q=[qh00qv],用于惩罚高度和速度偏差。
  • 控制成本 R = r R= r R=r(标量,一维控制输入)。

🚩 步骤② 求解里卡提方程 (DP方法)

DP方程推导得到的离散里卡提方程:
P = Q + A T P A − A T P B ( R + B T P B ) − 1 B T P A P = Q + A^TPA - A^TPB(R+B^TPB)^{-1}B^TPA P=Q+ATPAATPB(R+BTPB)1BTPA

具体执行:

  • 初始化 P = Q P=Q P=Q
  • 反复执行上述迭代,直至 P P P 收敛。

📌 步骤③ 求取最优反馈控制律

稳定后得到的最优反馈增益 K K K
K = ( R + B T P B ) − 1 B T P A K = (R + B^TPB)^{-1}B^TPA K=(R+BTPB)1BTPA

  • 此时最优控制输入:
    u k = − K x k u_k=-Kx_k uk=Kxk

  • 即反馈控制为:
    u k = − [ K h , K v ] [ h k v k ] u_k=-[K_h, K_v]\begin{bmatrix}h_k \\ v_k\end{bmatrix} uk=[Kh,Kv][hkvk]


🚩 LQR最优控制具体执行步骤(总结)

  1. 给定 A , B , Q , R A,B,Q,R A,B,Q,R
  2. 通过 DP 求解里卡提方程,获得矩阵 P P P
  3. 根据矩阵 P P P 求出反馈增益矩阵 K K K
  4. 实施反馈控制 u = − K x u=-Kx u=Kx

📌 实际应用与扩展

这个示例清晰展示了如何从状态空间模型出发,使用动态规划(DP)思想求解最优控制问题(LQR)。

  • 在无人机实际应用中, A , B , Q , R A,B,Q,R A,B,Q,R的选择决定了无人机轨迹跟踪的性能与响应特性。
  • 可以结合强化学习算法进一步优化控制器参数,以应对动态环境变化(风速扰动、载荷变化等)。

🚩 总结与回顾

以上详细阐述了:

  • LQR问题的状态空间定义;
  • DP求解LQR的核心过程(里卡提方程);
  • 从值函数提取反馈控制策略的明确过程。

这种结合 DP 与控制理论的理解,为进一步理解强化学习和最优控制算法奠定了坚实基础。


📌 四、DP 求解 LQR 问题的意义与应用场景

DP 求解 LQR 的优势:

  • 提供全局最优控制解
  • 提供了闭环控制律 u = − K x u = -K x u=Kx,实现实时控制;
  • 计算高效(提前算出增益 K K K,实时仅需简单计算)。

典型应用:

  • 无人机飞行稳定与轨迹跟踪控制;
  • 自动驾驶汽车轨迹跟踪;
  • 机器人姿态稳定控制(机械臂、机器人平衡)。

📌 四、LQR与强化学习的关系

  • LQR 是一个确定的、线性、二次型最优控制问题,是 DP 的特例。
  • 强化学习可看作非线性、随机系统中的广义 LQR 问题:
    • 状态空间更复杂、可能未知;
    • 使用函数逼近(如神经网络)替代里卡提方程求解;
    • 如 Deep RL 中的 DDPG 算法,可看作非线性随机环境中的广义LQR解法。

🚩 总结(LQR-DP求解过程关键点):

  • LQR问题的最优控制求解可用 DP 思想,推导得到里卡提方程;
  • 通过值函数迭代方式求解里卡提方程,获得最优反馈控制增益;
  • 可将 LQR 问题理解为 DP 和强化学习的特例,便于推广到更复杂的问题。

相关文章:

DP 问题 -- LQR中的DP问题

深入地介绍线性二次调节问题&#xff08;Linear Quadratic Regulator, LQR&#xff09;&#xff0c;并详细说明它作为动态规划&#xff08;DP&#xff09;的一个经典应用问题的求解过程。 &#x1f4cc; 一、LQR问题定义&#xff08;最优控制视角&#xff09; LQR 问题是一种特…...

Win7重装不翻车!ISO镜像安全下载渠道+BIOS设置避雷手册

一、写在前面&#xff1a;为什么你需要这份教程&#xff1f; 当电脑频繁蓝屏、系统崩溃甚至无法开机时&#xff0c;重装系统可能是最后的救命稻草。但市面上的教程往往存在三大痛点&#xff1a; ⚠️ 镜像来源不明导致系统被植入后门 ⚠️ 启动盘制作失败反复折腾 ⚠️ 操作失…...

CEF在MFC上的示例工程

CEF 在 MFC 中的使用 工程配置 1、首先创建一个MFC对话框工程 创建完运行测试效果如下 2、MFC工程引入CEF库 将 CEF 目录下的 cef子目录下载解压后放到MFC工程中&#xff1a; 然后在VS中对工程右键 -> 属性 -> C/C -> 常规 -> 附加包含目录&#xff0c;添加“.\…...

#UVM# 关于 config_db 机制中的直线非直线设置和获取讲解

在 UVM 验证环境中,uvm_config_db 是一种强大的机制,用于在不同组件之间传递配置参数。实际应用中,我们经常使用直线和非直线的设置与获取。今天,着重回忆一下这些内容,希望实际中更加方便的使用。 UVM 树结构示例 假设 UVM 树结构如下: uvm_test_top ├── env │ …...

[PWNME 2025] PWN 复现

这种比赛得0也不容易&#xff0c;前边暖声还是能作的。 GOT 指针前溢出&#xff0c;可以溢出到GOT表&#xff0c;然后把后门写上就行 Einstein 这个拿到WP也没复现成&#xff0c;最后自己改了一下。 int __cdecl handle() {int offset; // [rsp8h] [rbp-38h] BYREFunsigne…...

Java网络编程,多线程,IO流综合项目一一ChatBoxes

Java网络编程&#xff0c;多线程&#xff0c;IO流综合小项目一一ChatBoxes 作者&#xff1a;blue 时间&#xff1a;2025.3.7 文章目录 Java网络编程&#xff0c;多线程&#xff0c;IO流综合小项目一一ChatBoxes1.项目介绍2.项目源码剖析2.1客户端源码2.2客户端Sender线程Runn…...

大数据、人工智能、云计算、物联网、区块链序言【大数据导论】

这里是阿川的博客&#xff0c;祝您变得更强 ✨ 个人主页&#xff1a;在线OJ的阿川 &#x1f496;文章专栏&#xff1a;大数据入门到进阶 &#x1f30f;代码仓库&#xff1a; 写在开头 现在您看到的是我的结论或想法&#xff0c;但在这背后凝结了大量的思考、经验和讨论 这是目…...

【算法 C/C++】一维前缀和

2025 - 03 - 08 - 第 68 篇 Author: 郑龙浩 / 仟濹 【一维前缀和】 文章目录 前缀和与差分 - 我的博客1 大体介绍2 计算某些区间的和( 不使用前缀和 )3 计算某些区间的和( 使用前缀和 ) 前缀和与差分 - 我的博客 一维前缀和 【算法 C/C】一维前缀和 一维差分 【算法 C/C】一维…...

【C++】:STL详解 —— 红黑树

目录 平衡二叉查找树 红黑树的概念 红黑树的五大性质 红黑树的效率 红黑树和AVL树的比较 插入与删除操作 内存与实现复杂度 经典性能数据对比 总结 对旋转的基本理解 旋转的作用 左旋&#xff08;Left Rotation&#xff09; 右旋&#xff08;Right Rotation&#xf…...

【A2DP】SBC 编解码器互操作性要求详解

目录 一、SBC编解码器互操作性概述 二、编解码器特定信息元素(Codec Specific Information Elements) 2.1 采样频率(Sampling Frequency) 2.2 声道模式(Channel Mode) 2.3 块长度(Block Length) 2.4 子带数量(Subbands) 2.5 分配方法(Allocation Method) 2…...

Mysql的卸载安装配置以及简单使用

MySQL其它问题已经更新在&#xff1a;MySQL完善配置---可视化-CSDN博客 一、卸载 ①控制面板卸载 ②C盘隐藏项目>ProgramData>mysql相关文件夹&#xff0c;还有Program file下的MySQL文件夹 ③开始菜单栏搜索>服务&#xff0c;找到MySQL相关服务删除&#xff0c;如果再…...

Ubuntu 下 nginx-1.24.0 源码分析 (1)

main 函数在 src\core\nginx.c int ngx_cdecl main(int argc, char *const *argv) {ngx_buf_t *b;ngx_log_t *log;ngx_uint_t i;ngx_cycle_t *cycle, init_cycle;ngx_conf_dump_t *cd;ngx_core_conf_t *ccf;ngx_debug_init(); 进入 main 函数 最…...

驱动开发系列43 - Linux 显卡KMD驱动代码分析(四)- DRM设备操作

一:概述 DRM(Direct Rendering Manager)是Linux内核中的一个子系统,主要负责图形硬件的管理与图形渲染的加速。它为图形驱动提供了一个统一的接口,可以使用户空间程序与图形硬件进行直接交互,而无需通过X服务器或Wayland等显示管理器。DRM不仅用于管理显卡,还处理视频输…...

PAT乙级真题(2014·冬)

大纲 1031、查验身份证-&#xff08;解析&#xff09;-简单题 1032、挖掘机技术哪家强-&#xff08;解析&#xff09;-细节题(┬┬﹏┬┬)&#xff0c;太抠细节了 1033、旧键盘打字-&#xff08;解析&#xff09;-输入格式&#xff01;这才是重点(┬┬﹏┬┬)&#xff0c;让…...

快速使用MASR V3版不能语音识别框架

前言 本文章主要介绍如何快速使用MASR语音识别框架训练和推理&#xff0c;本文将致力于最简单的方式去介绍使用&#xff0c;如果使用更进阶功能&#xff0c;还需要从源码去看文档。仅需三行代码即可实现训练和推理。 源码地址&#xff1a;https://github.com/yeyupiaoling/MA…...

学习笔记:Python网络编程初探之基本概念(一)

一、网络目的 让你设备上的数据和其他设备上进行共享&#xff0c;使用网络能够把多方链接在一起&#xff0c;然后可以进行数据传递。 网络编程就是&#xff0c;让在不同的电脑上的软件能够进行数据传递&#xff0c;即进程之间的通信。 二、IP地址的作用 用来标记唯一一台电脑…...

硬件基础(4):(2)认识ADC参考电压

文章目录 1. **ADC参考电压的定义**2. **如何影响采样值**3. **参考电压的选择**4. **如何选择参考电压**5. **总结** **ADC参考电压&#xff08;Vref&#xff09;**是用于定义ADC采样范围的一个重要参数&#xff0c;以下是对 ADC 参考电压的详细解释&#xff1a; 1. ADC参考电…...

项目中同时使用Redis(lettuce)和Redisson的报错

温馨提示&#xff1a;图片有点小&#xff0c;可以放大页面进行查看... 问题1&#xff1a;版本冲突 直接上图&#xff0c;这个错表示依赖版本不匹配问题&#xff0c;我本地SpringBoot用的是2.7&#xff0c;但是Redisson版本用的3.32.5。 我们通过点击 artifactId跟进去 发现它…...

工程化与框架系列(25)--低代码平台开发

低代码平台开发 &#x1f527; 引言 低代码开发平台是一种通过可视化配置和少量代码实现应用开发的技术方案。本文将深入探讨低代码平台的设计与实现&#xff0c;包括可视化编辑器、组件系统、数据流管理等关键主题&#xff0c;帮助开发者构建高效的低代码开发平台。 低代码…...

在CentOS系统上安装Conda的详细指南

前言 Conda 是一个开源的包管理系统和环境管理系统&#xff0c;广泛应用于数据科学和机器学习领域。本文将详细介绍如何在 CentOS 系统上安装 Conda&#xff0c;帮助您快速搭建开发环境。 准备工作 在开始安装之前&#xff0c;请确保您的 CentOS 系统已经满足以下条件&#x…...

系统思考—组织诊断

“未经过诊断的行动是盲目的。” — 托马斯爱迪生 最近和一家教育培训机构沟通时&#xff0c;发现他们面临一个有意思的问题&#xff1a;每年招生都挺不错&#xff0c;但教师的整体绩效一直提升缓慢&#xff0c;导致师生之间存在长期的不匹配。管理层试了很多办法&#xff0c;…...

项目实战--网页五子棋(对战功能)(9)

上期我们完成了websocket建立连接后的数据初始化&#xff0c;今天我们完成落子交互的具体代码&#xff1a; 这里我们先复习一下&#xff0c;之前约定好的落子请求与响应包含的字段&#xff1a; 1. 发送落子请求 我们在script.js文件中找到落子的相关方法&#xff0c;增加发送请…...

Ubuntu系统安装Apache2方法

Ubuntu系统安装Apache2方法 一、安装 Apache2更新软件包列表安装 Apache2启动服务验证安装 二、访问默认页面三、基本配置配置文件结构目录权限访问测试 四、故障排除五、总结 一、安装 Apache2 更新软件包列表 在安装任何软件之前&#xff0c;建议先更新系统的软件包列表&am…...

DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)

DeepSeek R1-32B微调实战指南 ├── 1. 环境准备 │ ├── 1.1 硬件配置 │ │ ├─ 全参数微调:4*A100 80GB │ │ └─ LoRA微调:单卡24GB │ ├── 1.2 软件依赖 │ │ ├─ PyTorch 2.1.2+CUDA │ │ └─ Unsloth/ColossalAI │ └── 1.3 模…...

基于springboot和spring-boot-starter-data-jpa快速操作mysql数据库

1、创建springboot项目 2、pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…...

深度学习代码解读——自用

代码来自&#xff1a;GitHub - ChuHan89/WSSS-Tissue 借助了一些人工智能 2_generate_PM.py 功能总结 该代码用于 生成弱监督语义分割&#xff08;WSSS&#xff09;所需的伪掩码&#xff08;Pseudo-Masks&#xff09;&#xff0c;是 Stage2 训练的前置步骤。其核心流程为&a…...

文件与目录权限

目录 文件权限 文件读权限&#xff08;r) 文件写权限&#xff08;w) 文件可执行权限(x) 目录权限 目录读权限&#xff08;r) 目录写权限&#xff08;w) 文件可执行权限&#xff08;x)&#xff08;与文件权限最大不同之处&#xff09; 注意 在 Linux 系统中&#xff0c…...

算法005——有效三角形个数

力扣——有效三角形个数点击链接跳转 判断三条边是否能组成三角形&#xff0c;大家第一时间想到的就是两边之和大于第三边 但是运用这个方法&#xff0c;我们需要判断三次&#xff0c;有一个更简单的方法&#xff0c;只需要判断一次 因为 C 已经是三边之中最大的了&#xff…...

Facebook 的隐私保护数据存储方案研究

Facebook 的隐私保护数据存储方案研究 在这个信息爆炸的时代&#xff0c;数据隐私保护已成为公众关注的热点。Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;承载着海量用户数据&#xff0c;其隐私保护措施和数据存储方案对于维护用户隐私至关重要。本文将深…...

如何高效利用Spring中的@Cacheable注解?

在现代软件开发中&#xff0c;缓存是提升应用性能的重要手段。Spring框架提供了Cacheable注解&#xff0c;帮助开发者轻松实现缓存机制。今天我们就来详细聊聊Cacheable注解的使用&#xff0c;看看它是如何让我们的应用更加高效的&#xff01; Cacheable注解的核心功能是缓存方…...

Qt 进度条与多线程应用、基于 Qt 的文件复制工具开发

练习1&#xff1a;Qt 进度条与多线程应用 题目描述 开发一个基于 Qt 的应用程序&#xff0c;该应用程序包含一个水平进度条&#xff08;QSlider&#xff09;&#xff0c;并且需要通过多线程来更新进度条的值。请根据以下要求完成代码&#xff1a; 界面设计&#xff1a; 使用 QS…...

软件工程---构件

在软件工程中&#xff0c;构件是一个独立的、可复用的软件单元&#xff0c;它具有明确的功能、接口和行为&#xff0c;并且可以在不同的环境中加以集成和复用。构件的概念是软件架构和组件化开发的核心思想之一&#xff0c;其目的是促进软件系统的模块化、可维护性和可扩展性。…...

【算法 C/C++】二维差分

2025 - 03 - 08 - 第 71 篇 Author: 郑龙浩 / 仟濹 【二维差分】 文章目录 前缀和与差分 - 我的博客差分(二维)1 大体思路 | 一些区间加某数的最终结果2 二维差分原理3 例题 前缀和与差分 - 我的博客 一维前缀和 【算法 C/C】一维前缀和 一维差分 【算法 C/C】一维差分 二维前…...

灰色地带规避:知识产权校验API的商标库模糊匹配算法

在反向海淘或其他电商业务场景中&#xff0c;为了规避知识产权方面的灰色地带&#xff0c;开发知识产权校验 API 并运用商标库模糊匹配算法是很有必要的。以下将详细介绍商标库模糊匹配算法的设计与实现&#xff1a; 算法设计思路 商标库模糊匹配算法的核心目标是在给定一个待匹…...

LINUX网络基础 [五] - HTTP协议

目录 HTTP协议 预备知识 认识 URL 认识 urlencode 和 urldecode HTTP协议格式 HTTP请求协议格式 HTTP响应协议格式 HTTP的方法 HTTP的状态码 ​编辑HTTP常见Header HTTP实现代码 HttpServer.hpp HttpServer.cpp Socket.hpp log.hpp Makefile Web根目录 H…...

嵌入式人工智能应用-第6章 人脸检测

嵌入式人工智能应用 人脸检测 嵌入式人工智能应用1 人脸检测1.1 CNN 介绍1.2 人脸检测原理1.3 MTCNN介绍1.4 NCNN介绍2 系统安装2.1 安装依赖库NCNN2.2 运行对应的库3 总结1 人脸检测 1.1 CNN 介绍 卷积神经网络。卷积是什么意思呢?从数学上说,卷积是一种运算。它是我们学习…...

编程考古-Borland历史:《.EXE Interview》对Anders Hejlsberg关于Delphi的采访内容(中)

为了纪念Delphi在2002年2月14日发布的25周年(2020.2.12),这里有一段由.EXE杂志编辑Will Watts于1995年对Delphi首席架构师Anders Hejlsberg进行的采访记录。在这次采访中,Anders讨论了Delphi的设计与发展,以及即将到来的针对Windows 95的32位版本。 Q. 编译器引擎本身是用…...

redis数据类型以及底层数据结构

redis数据类型以及底层数据结构 String&#xff1a;字符串类型&#xff0c;底层就是动态字符串&#xff0c;使用sds数据结构 Map:有两种数据结构&#xff1a;1.压缩列表&#xff1a;当hash结构中存储的元素个数小于了512个。并且元 …...

C运算符 对比a++、++a、b--、 --b

#include<stdio.h> int main() { int a 21;int b 10;int c, d;c a;//先赋值给c,a本身再运算 c 21, a 22;//c a;//a本身先运算&#xff0c;再赋值给c a 22,c 22;printf("c %d, a %d\n",c, a); d --b;//b本身先运算&#xff0c;再赋值给d …...

Java EE 进阶:Spring MVC(2)

cookie和session的关系 两者都是在客户端和服务器中进行存储数据和传递信息的工具 cookie和session的区别 Cookie是客⼾端保存⽤⼾信息的⼀种机制. Session是服务器端保存⽤⼾信息的⼀种机制. Cookie和Session之间主要是通过SessionId关联起来的&#xff0c;SessionId是Co…...

基于Matlab的人脸识别的二维PCA

一、基本原理 传统 PCA 在处理图像数据时&#xff0c;需将二维图像矩阵拉伸为一维向量&#xff0c;这使得数据维度剧增&#xff0c;引发高计算成本与存储压力。与之不同&#xff0c;2DPCA 直接基于二维图像矩阵展开运算。 它着眼于图像矩阵的列向量&#xff0c;构建协方差矩阵…...

Java 深度复制对象:从基础到实战

目录 一、深度复制的概念二、实现深度复制的方法1. 使用序列化2. 手动实现深度复制 三、总结 在 Java 编程中&#xff0c;对象的复制是一个常见的需求。然而&#xff0c;简单的复制操作&#xff08;如直接赋值&#xff09;只会复制对象的引用&#xff0c;而不是创建一个新的对象…...

【Java开发指南 | 第三十五篇】Maven + Tomcat Web应用程序搭建

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 前言Maven Tomcat Web应用程序搭建1、使用Maven构建新项目2、单击项目&#xff0c;连续按两次shift键&#xff0c;输入"添加"&#xff0c;选择"添加框架支持"3、选择Java Web程序4、点击&…...

TCP三次握手,四次挥手;多进程、多线程实现并发服务器

三次握手&#xff0c;四次挥手 三次握手示意图&#xff1a; SYN、ACK是TCP协议头里面的标志位 同步 SYN&#xff1a;仅在三次握手建立 TCP 连接时有效。当 SYN 1 而 ACK 0 时&#xff0c;表明这是一个连接请求报文段&#xff0c;对方若同意建立连接&#xff0c;则应在相应的…...

Java基础系列:深入理解八大基本数据类型及避坑指南

目录 一、基本数据类型概述 八大类型速查表 二、各类型详解与常见陷阱 1. 整型家族&#xff08;byte/short/int/long&#xff09; 2. 浮点型&#xff08;float/double&#xff09; 3. 字符型&#xff08;char&#xff09; 4. 布尔型&#xff08;boolean&#xff09; 三…...

【Gaussian Model】高斯分布模型

目录 高斯分布模型用于异常检测&#xff08;Gaussian Model for Anomaly Detection&#xff09;1. 高斯分布简介2. 高斯分布模型用于异常检测(1) 训练阶段&#xff1a;估计数据分布(2) 检测阶段&#xff1a;计算概率判断异常点 3. 示例代码4. 高斯分布异常检测的优缺点优点缺点…...

Unity--Cubism Live2D模型使用

了解LIVE2D在unity的使用--前提记录 了解各个组件的作用 Live2D Manuals & Tutorials 这些文件都是重要的控制动画参数的 Cubism Editor是编辑Live2D的工具&#xff0c;而导出的数据的类型&#xff0c;需要满足以上的条件 SDK中包含的Cubism的Importer会自动生成一个Pref…...

Day4 C语言与画面显示练习

文章目录 1. harib01a例程2. harib01b例程3. harib01e例程4. harib01f例程5. harib01h例程 1. harib01a例程 上一章主要是将画面搞成黑屏&#xff0c;如果期望做点什么图案&#xff0c;只需要再VRAM里写点什么就好了&#xff0c;使用nask汇编语言实现一个函数write_mem8&#…...

【redis】全局命令exists、del、expire、ttl(惰性删除和定期删除)

exists——判定 key 是否存在 语法&#xff1a; exists key [key...] # 返回值&#xff1a;key 存在的个数针对多个 key 来说&#xff0c;是非常有用的时间复杂度 O ( 1 ) O(1) O(1) Redis 组织这些 key 就是按照哈希表的方式来组织的。Redis 支持很多数据结构指的是 value …...

VUE3项目的文档结构分析

1. Vue 3 项目的文档结构 Vue 3 项目通常基于 Vue CLI 或 Vite 等工具创建&#xff0c;其文档结构如下&#xff1a; 常见目录结构 my-vue-project/ ├── public/ # 静态资源目录 │ ├── index.html # 入口页面 ├── src/ …...