基于Rosen梯度投影法的约束优化问题求解及MATLAB实现
摘要
在工程优化、经济建模等领域,约束优化问题普遍存在,其核心是在满足线性或非线性约束条件下求解目标函数的极值。本文聚焦Rosen梯度投影法,系统阐述其算法原理、实现步骤及MATLAB编程方法。
关键词:Rosen梯度投影法;约束优化;可行点;MATLAB实现;线性约束
一、引言
在科学研究与工程实践中,优化问题常需满足特定约束条件,如资源限制、物理定律等。约束优化问题的数学模型可表示为:
min f ( x ) , s.t. { h i ( x ) = 0 , i = 1 , 2 , ⋯ , k g j ( x ) ≥ 0 , j = 1 , 2 , ⋯ , m \min f(\boldsymbol{x}), \quad \text{s.t.} \quad \begin{cases} h_i(\boldsymbol{x}) = 0, & i=1,2,\cdots,k \\ g_j(\boldsymbol{x}) \geq 0, & j=1,2,\cdots,m \end{cases} minf(x),s.t.{hi(x)=0,gj(x)≥0,i=1,2,⋯,kj=1,2,⋯,m
其中, f ( x ) f(\boldsymbol{x}) f(x)为目标函数, h i ( x ) h_i(\boldsymbol{x}) hi(x)和 g j ( x ) g_j(\boldsymbol{x}) gj(x)分别为等式与不等式约束。针对此类问题,Rosen梯度投影法是一种高效的直接法,尤其适用于线性约束场景,通过投影技术将梯度方向映射到可行域,逐步逼近最优解。
二、Rosen梯度投影法算法原理
2.1 核心思想
Rosen梯度投影法的核心是从一个可行点出发,沿目标函数下降的可行方向搜索,通过迭代更新可行点,最终收敛到最优解。其核心步骤包括:
- 可行点定义:满足所有约束条件的点 x \boldsymbol{x} x,即 A x ≥ b A\boldsymbol{x} \geq \boldsymbol{b} Ax≥b(线性约束场景)。
- 梯度投影:将目标函数的负梯度方向投影到约束面的切空间,得到可行搜索方向;若投影后方向为零,则检查当前点是否为K-K-T点。
2.2 线性约束场景建模
假设约束条件为线性不等式 A x ≥ b A\boldsymbol{x} \geq \boldsymbol{b} Ax≥b,其中 A A A为约束系数矩阵, b \boldsymbol{b} b为约束向量。在当前可行点 x ( k ) \boldsymbol{x}^{(k)} x(k)处,可将约束分为active约束( A 1 x ( k ) = b 1 A_1\boldsymbol{x}^{(k)} = \boldsymbol{b}_1 A1x(k)=b1)和inactive约束( A 2 x ( k ) > b 2 A_2\boldsymbol{x}^{(k)} > \boldsymbol{b}_2 A2x(k)>b2),分别对应紧约束和非紧约束。
2.3 投影矩阵构造
定义投影矩阵 P P P,用于将梯度方向投影到active约束的切空间。若 A 1 A_1 A1非空,投影矩阵为:
P = I − A 1 T ( A 1 A 1 T ) − 1 A 1 P = I - A_1^T (A_1 A_1^T)^{-1} A_1 P=I−A1T(A1A1T)−1A1
其中, I I I为单位矩阵。该矩阵可将任意向量投影到 A 1 x = b 1 A_1\boldsymbol{x} = \boldsymbol{b}_1 A1x=b1的切空间,即与active约束正交的子空间。
三、算法步骤详解
3.1 初始化
- 给定初始可行点 x ( 1 ) \boldsymbol{x}^{(1)} x(1),满足 A x ( 1 ) ≥ b A\boldsymbol{x}^{(1)} \geq \boldsymbol{b} Ax(1)≥b,设置迭代计数器 k = 1 k=1 k=1。
- 分解约束矩阵 A A A为 [ A 1 ; A 2 ] [A_1; A_2] [A1;A2],对应active约束 A 1 x ( k ) = b 1 A_1\boldsymbol{x}^{(k)} = \boldsymbol{b}_1 A1x(k)=b1和inactive约束 A 2 x ( k ) > b 2 A_2\boldsymbol{x}^{(k)} > \boldsymbol{b}_2 A2x(k)>b2。
3.2 投影方向计算
- 若 A 1 A_1 A1为空(无active约束),则投影矩阵 P = I P=I P=I,搜索方向为负梯度方向 d ( k ) = − ∇ f ( x ( k ) ) \boldsymbol{d}^{(k)} = -\nabla f(\boldsymbol{x}^{(k)}) d(k)=−∇f(x(k))。
- 若 A 1 A_1 A1非空,计算投影后的搜索方向:
d ( k ) = − P ∇ f ( x ( k ) ) \boldsymbol{d}^{(k)} = -P \nabla f(\boldsymbol{x}^{(k)}) d(k)=−P∇f(x(k))
若 d ( k ) ≠ 0 \boldsymbol{d}^{(k)} \neq \boldsymbol{0} d(k)=0,沿该方向搜索;若 d ( k ) = 0 \boldsymbol{d}^{(k)} = \boldsymbol{0} d(k)=0,则检查当前点是否为K-K-T点(即拉格朗日乘子非负)。
3.3 K-K-T点判定
计算拉格朗日乘子向量:
w = ( A 1 A 1 T ) − 1 A 1 ∇ f ( x ( k ) ) \boldsymbol{w} = (A_1 A_1^T)^{-1} A_1 \nabla f(\boldsymbol{x}^{(k)}) w=(A1A1T)−1A1∇f(x(k))
若 w ≥ 0 \boldsymbol{w} \geq \boldsymbol{0} w≥0,当前点为K-K-T点,停止迭代;否则,移除 w \boldsymbol{w} w中负分量对应的active约束,更新 A 1 A_1 A1后重新计算投影方向。
3.4 一维搜索与步长确定
在搜索方向 d ( k ) \boldsymbol{d}^{(k)} d(k)上求解一维优化问题:
min λ ≥ 0 f ( x ( k ) + λ d ( k ) ) , s.t. A 2 ( x ( k ) + λ d ( k ) ) ≥ b 2 \min_{\lambda \geq 0} f(\boldsymbol{x}^{(k)} + \lambda \boldsymbol{d}^{(k)}), \quad \text{s.t.} \quad A_2(\boldsymbol{x}^{(k)} + \lambda \boldsymbol{d}^{(k)}) \geq \boldsymbol{b}_2 λ≥0minf(x(k)+λd(k)),s.t.A2(x(k)+λd(k))≥b2
最大步长 λ max \lambda_{\text{max}} λmax由inactive约束决定:
λ max = { ∞ , A 2 d ( k ) ≥ 0 min { b 2 − A 2 x ( k ) A 2 d ( k ) ∣ A 2 d ( k ) < 0 } , 其他 \lambda_{\text{max}} = \begin{cases} \infty, & A_2 \boldsymbol{d}^{(k)} \geq \boldsymbol{0} \\ \min\left\{ \frac{\boldsymbol{b}_2 - A_2 \boldsymbol{x}^{(k)}}{A_2 \boldsymbol{d}^{(k)}} \mid A_2 \boldsymbol{d}^{(k)} < 0 \right\}, & \text{其他} \end{cases} λmax={∞,min{A2d(k)b2−A2x(k)∣A2d(k)<0},A2d(k)≥0其他
通过黄金分割法或进退法求解最优步长 λ k \lambda_k λk,更新可行点:
x ( k + 1 ) = x ( k ) + λ k d ( k ) \boldsymbol{x}^{(k+1)} = \boldsymbol{x}^{(k)} + \lambda_k \boldsymbol{d}^{(k)} x(k+1)=x(k)+λkd(k)
3.5 迭代终止条件
- 投影方向 d ( k ) \boldsymbol{d}^{(k)} d(k)为零,且拉格朗日乘子非负;
- 目标函数值或可行点变化小于指定精度 ε \varepsilon ε。
四、MATLAB实现
4.1 函数定义与参数说明
编写函数minRosen
实现Rosen梯度投影法,调用格式:
[x, minf] = minRosen(f, A, b, x0, var, eps)
f
:目标函数(符号表达式);A
:约束矩阵(线性不等式 A x ≥ b A\boldsymbol{x} \geq \boldsymbol{b} Ax≥b);b
:约束右端向量;x0
:初始可行点;var
:自变量向量(符号变量);eps
:精度(默认 1 0 − 6 10^{-6} 10−6)。
4.2 核心代码逻辑
- 约束分解:遍历约束条件,分离active和inactive约束:
k = 0; s = 0;
A1 = A; A2 = A;
b1 = b; b2 = b;
for i = 1:mdfun = A(i,:)*x0 - b(i);if abs(dfun) < 1e-9 % 视为active约束k = k + 1;A1(k,:) = A(i,:);b1(k,1) = b(i);elses = s + 1;A2(s,:) = A(i,:);b2(s,1) = b(i);end
end
- 投影矩阵与搜索方向:
P = eye(n,n);
if k > 0tM = transpose(A1);P = P - tM * inv(A1 * tM) * A1; % 构造投影矩阵
end
gv = Funval(gf, var, x0); % 计算梯度
d = -P * gv; % 搜索方向
- 一维搜索与步长计算:
bb = b2 - A2 * x0;
dd = A2 * d;
if all(dd >= 0)lm = inf; % 无步长限制
elselm = min(bb(dd < 0) ./ dd(dd < 0)); % 计算最大可行步长
end
4.3 完整代码(节选)
function [x, minf] = minRosen(f, A, b, x0, var, eps)format long;if nargin == 5, eps = 1.0e-6; endsyms lambda;x0 = transpose(x0); n = length(var);sz = size(A); m = sz(1);gf = jacobian(f, var); % 目标函数梯度bConti = 1;while bConti% 分解active和inactive约束k = 0; s = 0;A1 = A; A2 = A;b1 = b; b2 = b;for i = 1:mdfun = A(i,:)*x0 - b(i);if abs(dfun) < 1e-9k = k + 1;A1(k,:) = A(i,:);b1(k,1) = b(i);elses = s + 1;A2(s,:) = A(i,:);b2(s,1) = b(i);endendif k > 0, A1 = A1(1:k,:); b1 = b1(1:k,:); endif s > 0, A2 = A2(1:s,:); b2 = b2(1:s,:); end% 计算投影矩阵和搜索方向P = eye(n,n);if k > 0tM = transpose(A1);P = P - tM * inv(A1 * tM) * A1;endgv = Funval(gf, var, x0);gv = transpose(gv);d = -P * gv; % 搜索方向if all(d == 0)if k == 0x = x0;bConti = 0;break;elsew = inv(A1 * tM) * A1 * gv; % 拉格朗日乘子if all(w >= -1e-9) % 考虑数值误差x = x0;bConti = 0;break;else[~, index] = min(w); % 移除负乘子对应的约束if size(A1,1) == 1k = 0;elseA1 = [A1(1:(index-1),:); A1((index+1):end,:)];endendendelse% 计算最大步长lambda_maxbb = b2 - A2 * x0;dd = A2 * d;if all(dd >= -1e-9)lm = inf;elselm = min(bb(dd < -1e-9) ./ dd(dd < -1e-9));end% 一维搜索求解最优步长y1 = x0 + lambda * d;tmpf = subs(f, var, y1);[xm, ~] = minHJ(tmpf, 0, lm, 1e-14); % 黄金分割法tol = norm(xm * d);if tol < epsx = x0;break;endx0 = x0 + xm * d;endendminf = Funval(f, var, x);format short;
end
五、实例分析:求解二维约束优化问题
5.1 问题描述
求目标函数 f ( t , s ) = 2 t 2 + s 2 − 2 t s + 3 t − 8 s + 2 f(t, s) = 2t^2 + s^2 - 2ts + 3t - 8s + 2 f(t,s)=2t2+s2−2ts+3t−8s+2在约束条件:
{ − t + s ≥ − 4 − 3 t − 5 s ≥ − 8 \begin{cases} -t + s \geq -4 \\ -3t - 5s \geq -8 \end{cases} {−t+s≥−4−3t−5s≥−8
下的极小值,初始可行点 x 0 = ( 0 , 0 ) \boldsymbol{x}^0 = (0, 0) x0=(0,0)。
5.2 MATLAB求解步骤
- 定义目标函数与约束:
syms t s;
f = 2*t^2 + s^2 - 2*t*s + 3*t - 8*s + 2;
A = [-1 1; -3 -5]; % 约束矩阵A
b = [-4; -8]; % 约束向量b
x0 = [0; 0]; % 初始可行点
- 调用
minRosen
函数:
[x, mf] = minRosen(f, A, b, x0, [t s])
- 结果输出:
x = -0.3764 1.8258
mf = -8.7444
5.3 结果分析
- 最优解 x ∗ ≈ ( − 0.3764 , 1.8258 ) \boldsymbol{x}^*\approx (-0.3764, 1.8258) x∗≈(−0.3764,1.8258),满足所有约束条件:
- − ( − 0.3764 ) + 1.8258 = 2.2022 ≥ − 4 -(-0.3764) + 1.8258 = 2.2022 \geq -4 −(−0.3764)+1.8258=2.2022≥−4
- − 3 ( − 0.3764 ) − 5 ( 1.8258 ) = 1.1292 − 9.1290 = − 8.0 ≥ − 8 -3(-0.3764) -5(1.8258) = 1.1292 - 9.1290 = -8.0 \geq -8 −3(−0.3764)−5(1.8258)=1.1292−9.1290=−8.0≥−8
- 目标函数值收敛到局部极小值,验证算法有效性。
六、注意事项
- 初始点选择:必须为可行点,否则算法无法启动(可通过预处理调整初始点)。
- 约束处理:仅适用于线性约束,非线性约束需转换为其他方法(如罚函数法)。
- 数值精度:迭代过程中需考虑浮点数误差,避免因舍入错误导致收敛失败。
- 计算效率:高维问题中投影矩阵求逆可能耗时,可结合稀疏矩阵优化计算。
七、总结
Rosen梯度投影法通过可行点搜索与梯度投影技术,为线性约束优化问题提供了高效的求解框架。其核心优势在于直接利用约束结构,避免了罚函数法的参数调整难题,适用于工程优化中的线性约束场景。
相关文章:
基于Rosen梯度投影法的约束优化问题求解及MATLAB实现
摘要 在工程优化、经济建模等领域,约束优化问题普遍存在,其核心是在满足线性或非线性约束条件下求解目标函数的极值。本文聚焦Rosen梯度投影法,系统阐述其算法原理、实现步骤及MATLAB编程方法。 关键词:Rosen梯度投影法…...
Model Context Protocol (MCP) - 尝试创建和测试一下MCP Server
1.简单介绍 MCP是Model Context Protocol的缩写,是Anthropic开源的一个标准协议。MCP使得大语言模型可以和外部的数据源,工具进行集成。当前MCP在社区逐渐地流行起来了。同时official C# SDK(仓库是csharp-sdk) 也在不断更新中,目前最新版本…...
Linux上位机开发实践(关于Qt的移植)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 linux平台上面,很多界面应用,都是基于qt开发的。不管是x86平台,还是arm平台,qt使用的地方都比较多。…...
Node.js 项目 用 `Docker Compose` 发布的完整流程
Node.js 项目 用 Docker Compose 发布的完整流程 ✅ 一、基本项目结构示例 以一个简单 Express 项目为例: my-node-app/ ├── app.js # 启动文件 ├── package.json ├── package-lock.json ├── Dockerfile # 构建 Node 容器 ├…...
Java基础:浅析Java中的XML文件处理
概述 XML(全称Extensible Markup Language,可扩展标记语言) .本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系 XML特点 1.XML中的“<标签名>”成为一个标签或者一个元素,一般成对出现的 2.XML…...
MCU刷写——S19(S-Record)文件格式详解及Python代码
工作之余来写写关于MCU的Bootloader刷写的相关知识,以免忘记。今天就来聊聊S19这种文件的格式,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢…...
HTML — 过渡与动画
HTML过渡与动画是提升网页交互体验的核心技术,主要通过CSS实现动态效果。 过渡 CSS过渡(Transition)介绍 适用于元素属性变化时的平滑渐变效果,如悬停变色、尺寸调整。通过定义transition-property(过渡属性…...
python【标准库】multiprocessing
文章目录 介绍多进程Process 创建子进程共享内存数据多进程通信Pool创建子进程多进程案例多进程注意事项介绍 python3.10.17版本multiprocessing 是一个多进程标准模块,使用类似于threading模块的API创建子进程,充分利用多核CPU来并行处理任务。提供本地、远程的并发,高效避…...
BANK OF CHINA(HONG KONG)网点
BANK OF CHINA(HONG KONG)网点开户 ZoneBankAddressDates东区杏花邨分行香港柴湾杏花邨东翼商场205-208号20240415: 11:15, 13:00, 11:15, 13:00, 11:15, 13:0020240412: 11:15, 13:00东区鲗鱼涌分行香港鰂鱼涌英皇道1060号柏惠苑20240412: 09:45 注意事项 到达指定分行时&am…...
基于springboot的“嗨玩旅游网站”的设计与实现(源码+数据库+文档+PPT)
基于springboot的“嗨玩旅游网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:springboot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统注册…...
机器学习(3)——决策树
文章目录 1. 决策树基本原理1.1. 什么是决策树?1.2. 决策树的基本构成:1.3. 核心思想 2. 决策树的构建过程2.1. 特征选择2.1.1. 信息增益(ID3)2.1.2. 基尼不纯度(CART)2.1.3. 均方误差(MSE&…...
【人脸识别中的“类内差异”和“类间差异】
核心问题:人脸识别中的“类内差异”和“类间差异” 想象你在教一个小朋友认人: 类间差异(不同人之间的区别): 目标:让小朋友能分清“爸爸”和“妈妈”。方法:指着爸爸说“这是爸爸”࿰…...
第十六届蓝桥杯 省赛C/C++ 大学B组
编程题目现在在洛谷上都可以提交了。 未完待续,写不动了。 C11 编译命令 g A.cpp -o A -Wall -lm -stdc11A. 移动距离 本题总分:5 分 问题描述 小明初始在二维平面的原点,他想前往坐标 ( 233 , 666 ) (233, 666) (233,666)。在移动过程…...
SpringBoot3.0 +GraalVM21 + Docker 打包成可执行文件
SpringBoot3.0 GraalVM21 Docker 打包成可执行文件 前言 随着时代的飞速发展,JDK 17 及以上版本开始支持通过 GraalVM 将运行在 JVM 上的 jar 包直接打包成可在操作系统上运行的原生可执行文件。这一特性能使开发者在某些场景下更加灵活地部署 Java 程序。 在云原…...
从编程范式看 “万物皆智能,万事皆自动” 愿景
从编程范式看“万物皆智能,万事皆自动”愿景 引言 在信息技术飞速发展的今天,“万物皆智能,万事皆自动”成为了众多 IT 从业者和科技爱好者心中的终极愿景。这一愿景描绘了一个所有事物都具备智能、所有事情都能自动完成的美好未来。而在实现这一愿景的征程中,面向对象编…...
Vue 项目中 package.json 文件的深度解析
Vue 项目中 package.json 文件的深度解析 在 Vue 项目中,package.json 文件是项目配置的核心,它管理着项目的依赖关系、脚本命令、版本信息等重要内容。正确理解和配置 package.json 文件,对于项目的开发、构建、测试和部署都至关重要。本文…...
解决2080Ti使用节点ComfyUI-PuLID-Flux-Enhanced中遇到的问题
使用蓝大的工作流《一键同时换头、换脸、发型、发色之双pulid技巧》 刚开始遇到的是不支持bf16的错误 根据《bf16 is only supported on A100 GPUs #33》中提到,修改pulidflux.py中的dtype 为 dtype torch.float16 后,出现新的错误,这个…...
1 程序的本质,计算机语言简史,TIOBE 指数,C 语言的独特魅力、发展历程、发行版本和应用场景
👋 嘿,各位编程探险家们!是不是一提到 C 语言,脑海中就浮现出指针乱舞、内存泄漏的恐怖画面?别怕,你并不孤单!😅 今天,你踏入了这个专为 “C 语言恐惧症” 患者打造的避…...
python格式化字符串漏洞
什么是python格式化字符串漏洞 python中,存在几种格式化字符串的方式,然而当我们使用的方式不正确的时候,即格式化的字符串能够被我们控制时,就会导致一些严重的问题,比如获取敏感信息 python常见的格式化字符串 百…...
撰写学位论文Word图表目录的自动生成
第一步:为图片和表格添加题注 选中图片或表格 右键点击需要编号的图片或表格,选择 【插入题注】(或通过菜单栏 引用 → 插入题注)。 设置题注标签 在弹窗中选择 标签(如默认有“图”“表”,若无需自定义标…...
SDC命令详解:使用相对路径访问设计对象(current_instance命令)
相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 在使用get_cells等命令访问设计对象时,需要指定设计对象的名字,这个名字是一个相对路径,本文就将对此进行讨论。 相对路径 使…...
vector的应用
在平常使用c是,只使用普通数组肯定不够便捷,这时,我们就可以使用vector来使代码更加简洁 目录 1.vector的定义 2.在vector末尾增加一个元素 3.输出元素 (1)输出单个元素 (2)循环输出元素 4…...
pytorch查询字典、列表维度
输出tensor变量维度 print(a.shape)输出字典维度 for key, value in output_dict.items():if isinstance(value, torch.Tensor):print(f"{key} shape:", value.shape)输出列表维度 def get_list_dimensions(lst):# 基线条件:如果lst不是列表࿰…...
征程 6 VIO Frame 时间戳介绍
1. 时间类型 征程 6 内部的时间类型如下 Linux 系统时间是基于 arm system counter 抽象的,Linux 的基于 arm system counter 抽象了很多种时间,图中画了两种。CLOCK_MONOTONIC_RAW 是不会被时间同步调整的。 2. Frame 时间戳 从 VIO 侧获取的图像数…...
DotnetCore开源库SampleAdmin源码编译
1.报错: System.Net.Sockets.SocketException HResult0x80004005 Message由于目标计算机积极拒绝,无法连接。 SourceSystem.Net.Sockets StackTrace: 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, C…...
QML之ScrollView(滚动视图)
ScrollView 是 Qt Quick Controls 2 中提供的可滚动视图容器,用于创建可滚动区域。以下是详细使用方法: 基本用法 qml import QtQuick 2.15 import QtQuick.Controls 2.15ScrollView {id: scrollViewwidth: 300height: 200clip: true// 背景设置&…...
FreeRTOS使任务处于就绪状态的API
在FreeRTOS中,任务的**就绪状态(Ready State)**意味着任务已准备好运行,但尚未被调度器分配CPU时间。以下是通过API使任务进入就绪状态的常见方法及其分类: 1. 恢复被挂起的任务 vTaskResume(TaskHandle_t xTaskToResume) 将被挂起(Suspended)的任务恢复为就绪状态。 示…...
第四篇:Python文件操作与异常处理
第一章:文件操作基础与核心原理 1.1 文件系统基础 文件系统是操作系统用于管理存储设备中数据的核心机制。Python通过内置的open()函数实现文件操作,支持文本文件(.txt、.csv)和二进制文件(.jpg、.dat)的…...
蓝桥杯 嵌入式 小结
一、BSP模版 1. Key 按键扫描模版,需要注意的是 key_val 。 uint8_t Key_Scan(void) {uint8_t key_val0;if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)GPIO_PIN_RESET){key_val1;}if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)GPIO_PIN_RESET){key_val2;}if(HAL_GPIO_ReadPin(…...
【音视频】SDL渲染YUV格式像素
SDL视频显示的流程 实现流程 准备视频文件 准备一个格式为yuv420p,分辨率为320x240的yuv数据,并且将视频文件放入项目构建的目录下: 初始化SDL 初始化SDL的视频模块 //初始化 SDL if(SDL_Init(SDL_INIT_VIDEO)) {fprintf( stderr, "…...
ThingsBoard3.9.1 MQTT Topic(1)
1.网关转发子设备的遥测信息, Topic:v1/gateway/telemetry { "m1": [{ "mode": "CW", "temperature": 23 }], "m2": [{ "mode": "CW", "temperature": 23 }] } 说明:json格式&a…...
如何查看自己抖音的IP属地?详细教程+常见问题解答
在当今互联网时代,IP属地信息已成为各大社交平台(如抖音、微博、快手等)展示用户真实网络位置的重要功能。无论是出于隐私保护、账号安全,还是单纯好奇自己的IP归属地,了解如何查看抖音IP属地都很有必要。 本文将详细介…...
李宏毅NLP-2-语音识别part1
语音识别part1 这是一篇名为 “Speech Recognition is Difficult?”(语音识别很难吗? )的文章。作者是 J.R. Pierce,来自贝尔电话实验室(Bell Telephone Laboratories, Inc.) 。文中提到语音识别虽有吸引力…...
AUTOSAR图解==>AUTOSAR_SWS_MemoryMapping
AUTOSAR 内存映射机制详解 深入解析AUTOSAR标准中的内存映射技术 目录 AUTOSAR 内存映射机制详解 目录1. 概述2. 内存映射架构 2.1 架构组成2.2 映射类型2.3 关键组件3. 配置数据模型 3.1 主要配置容器3.2 内存段类型3.3 初始化策略4. 映射使用流程 4.1 配置阶段4.2 开发阶段...
探索 HTML5 新特性:提升网页开发的现代体验
在 Web 开发的演进历程中,HTML5 无疑是一座重要的里程碑。它不仅为网页带来了更丰富的功能,还提升了开发效率与用户体验。本文将深入探讨 HTML5 那些令人瞩目的新特性,助你紧跟现代 Web 开发潮流。 一、语义化标签:让结构更清晰 …...
系统设计思维的讨论
我们经常说自己熟悉了spring,能够搭建起一个项目基本框架,并且在此之上进行开发,用户or客户提出需求碰到不会的百度找找就可以实现。干个四五年下一份工作就去面试架构师了,运气好一些可能在中小公司真的找到一份架构师、技术负责…...
【音视频】SDL播放PCM音频
相关API 打开音频设备 int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained); desired:期望的参数。obtained:实际音频设备的参数,一般情况下设置为NULL即可。 SDL_AudioSpec typedef struct SDL_AudioSpec { i…...
FATFS文件系统配置
1、FatFs模块功能配置选项参考ffconf.h函数配置链接:FatFs模块功能配置选项 2、FATFS配置 FATFS 支持长文件名链接: FATFS:配置 FATFS 支持长文件名 3、 FATFS移植链接1 4、 FATFS移植链接2 5、FAT32 和 FATFS 是两个不同层次的概念,分别属于…...
JVM 字节码是如何存储信息的?
JVM 字节码是 Java 虚拟机 (JVM) 执行的指令集,它是一种与平台无关的二进制格式,在任何支持 JVM 的平台上都可运行的Java 程序。 字节码存储信息的方式,主要通过以下几个关键组成部分和机制来实现: 1. 指令 (Opcodes) 和 操作数 …...
Linux:多路转接(上)——select
目录 一、select接口 1.认识select系统调用 2.对各个参数的认识 二、编写select服务器 一、select接口 1.认识select系统调用 int select(int nfds, fd_set readfds, fd_set writefds, fd_set exceptfds, struct timeval* timeout); 头文件:sys/time.h、sys/ty…...
如何解决DDoS攻击问题 ?—专业解决方案深度分析
本文深入解析DDoS攻击面临的挑战与解决策略,提供了一系列防御技术和实践建议,帮助企业加强其网络安全架构,有效防御DDoS攻击。从攻击的识别、防范措施到应急响应,为网络安全工作者提供了详细的操作指引。 DDoS攻击概览:…...
机器学习Python实战-第三章-分类问题-3.决策树算法
目录 3.3.1 原理简介 3.3.2 算法步骤 3.3.3 实战 3.3.4 实验 前半部分是理论介绍,后半部分是代码实践,可以选择性阅读。 决策树(decision tree)是功能强大而且相当受欢迎的分类和预估方法&…...
Spring三级缓存学习
Spring的三级缓存机制主要用于解决单例Bean的循环依赖问题。其核心在于提前暴露Bean的引用,允许未完全初始化的对象被其他Bean引用。以下是三级缓存的详细说明及其解决循环依赖的原理: 三级缓存结构 一级缓存(singletonObjects) 存…...
欧拉函数φ
函数作用 计算 1 1 1 ~ n n n中有多少个与 n n n互质的数。 函数公式 φ ( n ) n p 1 − 1 p 1 p 2 − 1 p 2 … … p m − 1 p m φ(n)n\times\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\times……\times\frac{p_m-1}{p_m} φ(n)np1p1−1p2p2−1……pmp…...
蓝桥杯刷题指南
蓝桥杯是中国普及性最好的计算机程序设计竞赛之一,参加者包括大学生、高中生和草根程序员等各个群体。通过刷题来提升自己的编程能力是参加蓝桥杯比赛的常见做法。下面是一些蓝桥杯常见的题型和刷题技巧,希望对大家有所帮助。 基础入门题目:…...
ctfshow WEB web12
发现只有这样一句话,应该是要看页面源代码的,右键查看页面源代码 发现可能存在代码执行漏洞,拼接一个?cmdphpinfo(); 成功显示出php信息, 说明存在代码执行漏洞 接下来遍历目录,我们要用到一个函数 glob() glob() 函数可以查找…...
ChromeOS 135 版本更新
ChromeOS 135 版本更新 一、ChromeOS 135 更新内容 1. ChromeOS 电池寿命优化策略 为了延长 Chromebook 的使用寿命,ChromeOS 135 引入了一项全新的电池充电限制策略 —— DevicePowerBatteryChargingOptimization,可提供更多充电优化选项,…...
redis的缓存
redis的缓存 一.缓存简介1.缓存2.redis作为数据库(MySQL)缓存的原因 二.缓存更新策略1.定期生成2.实时生成3.内存淘汰策略1)FIFO(First In First Out) 先进先出2)LRU(Least Recently Used)淘汰最久未使用的3)LFU(Least…...
字符串与相应函数(上)
字符串处理函数分类 求字符串长度:strlen长度不受限制的字符串函数:strcpy,strcat,strcmp长度受限制的字符串函数:strncpy,strncat,strncmp字符串查找:strstr,strtok错误信息报告:strerror字符操作,内存操作函数&…...
【微知】Mellanox网卡网线插入后驱动的几个日志?(Cable plugged;IPv6 ... link becomes ready)
概要 本文是一个简单的信息记录。记录的是当服务器网卡的光模块插入后内核的日志打印。通过这种日志打印,可以在定位分析问题的时候,知道进行过一次模块插拔。 日志 截图版: 文字版: [32704.121294] mlx5_core 0000:01:00.0…...