凸优化基础
文章目录
- 目录
- **第1讲:凸优化基础**
- **第2讲:凸优化建模**
- **第3讲:对偶理论**
- **第4讲:梯度下降法**
- **第5讲:牛顿法与内点法**
- **第6讲:次梯度与近端方法**
- **第7讲:分布式凸优化**
- **第8讲:鲁棒优化**
- **第9讲:凸优化在AI中的应用**
- **第10讲:前沿与总结**
- **第1讲:凸优化基础**
- **理论部分**
- **1. 凸集的定义**
- **2. 凸函数的定义**
- **3. 凸优化问题的标准形式**
- **4. 全局最优性**
- **案例部分**
- **线性回归的凸性证明**
- **代码部分**
- **使用MATLAB `fmincon` 验证凸函数最小值**
- 实例
目录
第1讲:凸优化基础
- 理论:凸集/凸函数定义、凸优化问题标准形式、全局最优性。
- 案例:线性回归的凸性证明。
- 代码:MATLAB
fmincon
验证凸函数最小值。
第2讲:凸优化建模
- 理论:常见凸问题类(LP、QP、SOCP、SDP)、建模技巧(松弛法)。
- 案例:投资组合优化(QP)、机器学习损失函数凸性分析。
- 代码:Python
CVXPY
建模投资组合问题。
第3讲:对偶理论
- 理论:拉格朗日对偶、强弱对偶性、KKT条件。
- 案例:支持向量机(SVM)对偶问题推导。
- 代码:MATLAB 求解对偶间隙。
第4讲:梯度下降法
- 理论:收敛性分析、步长选择(精确/回溯线搜索)。
- 案例:逻辑回归参数优化。
- 代码:Python 实现梯度下降(NumPy)。
第5讲:牛顿法与内点法
- 理论:牛顿方向、障碍函数、路径跟踪算法。
- 案例:不等式约束优化(如路径规划)。
- 代码:MATLAB
quadprog
实现内点法。
第6讲:次梯度与近端方法
- 理论:次梯度定义、近端算子、Lasso回归。
- 案例:稀疏信号恢复(压缩感知)。
- 代码:Python
scikit-learn
对比次梯度与近端梯度下降。
第7讲:分布式凸优化
- 理论:ADMM算法、一致性优化。
- 案例:多智能体协同控制。
- 代码:MATLAB 并行计算工具箱实现ADMM。
第8讲:鲁棒优化
- 理论:不确定集建模、鲁棒对偶。
- 案例:电力系统调度中的不确定性处理。
- 代码:Python
ROME
工具箱示例。
第9讲:凸优化在AI中的应用
- 理论:深度学习中的凸松弛(如低秩矩阵补全)。
- 案例:神经网络训练中的凸代理损失。
- 代码:PyTorch 自定义凸损失函数。
第10讲:前沿与总结
- 理论:非凸优化中的凸启发式方法(如凸包络)。
- 案例:学员自选课题报告(如医学图像重建)。
- 代码:综合项目答辩(MATLAB/Python实现)。
第1讲:凸优化基础
理论部分
1. 凸集的定义
凸集是凸优化理论的基石,用于定义问题的可行域。
-
定义:
一个集合 C ⊆ R n C \subseteq \mathbb{R}^n C⊆Rn 被称为凸集,如果对于任意两点 x , y ∈ C x, y \in C x,y∈C 和任意 λ ∈ [ 0 , 1 ] \lambda \in [0, 1] λ∈[0,1],都有:
λ x + ( 1 − λ ) y ∈ C λ x + ( 1 − λ ) y ∈ C λx+(1−λ)y∈C\lambda x + (1 - \lambda) y \in C λx+(1−λ)y∈Cλx+(1−λ)y∈C
这意味着连接 x x x 和 y y y 的线段完全包含在 C C C 内。 -
直观理解:
凸集没有“凹陷”或“空洞”,形状类似于圆盘、矩形等。例如,想象一个橡皮泥球,无论如何拉伸,只要不撕裂,它仍是凸的。 -
例子:
- 空集 ∅ \emptyset ∅ 和单点集 { x } \{x\} {x} 是凸集。
- 整个实数空间 R n \mathbb{R}^n Rn 是凸集。
- 闭球: { x ∈ R n ∣ ∥ x ∥ ≤ r } \{ x \in \mathbb{R}^n \mid \|x\| \leq r \} {x∈Rn∣∥x∥≤r}。
- 半空间: { x ∈ R n ∣ a T x ≤ b } \{ x \in \mathbb{R}^n \mid a^T x \leq b \} {x∈Rn∣aTx≤b},其中 a ∈ R n a \in \mathbb{R}^n a∈Rn, b ∈ R b \in \mathbb{R} b∈R。
- 凸多边形(二维)或凸多面体(三维)。
-
反例:
- 环形区域: { x ∈ R 2 ∣ 1 ≤ ∥ x ∥ ≤ 2 } \{ x \in \mathbb{R}^2 \mid 1 \leq \|x\| \leq 2 \} {x∈R2∣1≤∥x∥≤2}(两点间的线段会穿过空心部分)。
- 星形区域:如五角星,某些点之间的线段超出集合。
2. 凸函数的定义
凸函数决定了优化问题的“形状”,是理解凸优化的核心。
-
定义:
函数 f : R n → R f: \mathbb{R}^n \rightarrow \mathbb{R} f:Rn→R 是凸函数,如果对于任意 x , y ∈ R n x, y \in \mathbb{R}^n x,y∈Rn 和 λ ∈ [ 0 , 1 ] \lambda \in [0, 1] λ∈[0,1],满足:
f ( λ x + ( 1 − λ ) y ) ≤ λ f ( x ) + ( 1 − λ ) f ( y ) f ( λ x + ( 1 − λ ) y ) ≤ λ f ( x ) + ( 1 − λ ) f ( y ) f(λx+(1−λ)y)≤λf(x)+(1−λ)f(y)f(\lambda x + (1 - \lambda) y) \leq \lambda f(x) + (1 - \lambda) f(y) f(λx+(1−λ)y)≤λf(x)+(1−λ)f(y)f(λx+(1−λ)y)≤λf(x)+(1−λ)f(y)
这表示函数图像在任意两点之间的弦位于曲线上方。 -
直观理解:
凸函数形似“碗底向上”,在一维情况下,其图像不会出现多个“低谷”。例如,抛物线 f ( x ) = x 2 f(x) = x^2 f(x)=x2 是凸的,而 f ( x ) = x 3 f(x) = x^3 f(x)=x3 不是。 -
性质:
- 局部最小即全局最小:若 x ∗ x^* x∗ 是局部最小点,则 f ( x ∗ ) ≤ f ( x ) f(x^*) \leq f(x) f(x∗)≤f(x) 对所有 x x x 成立。
- 梯度条件(若可微): f ( y ) ≥ f ( x ) + ∇ f ( x ) T ( y − x ) f(y) \geq f(x) + \nabla f(x)^T (y - x) f(y)≥f(x)+∇f(x)T(y−x)。
- Hessian条件(若二次可微):Hessian矩阵 ∇ 2 f ( x ) \nabla^2 f(x) ∇2f(x) 在所有 x x x 处半正定。
-
例子:
- 线性函数: f ( x ) = a T x + b f(x) = a^T x + b f(x)=aTx+b(既凸又凹)。
- 二次函数: f ( x ) = 1 2 x T Q x + c T x + d f(x) = \frac{1}{2} x^T Q x + c^T x + d f(x)=21xTQx+cTx+d, Q Q Q 半正定。
- 指数函数: f ( x ) = e x f(x) = e^x f(x)=ex。
- 范数: f ( x ) = ∥ x ∥ p f(x) = \|x\|_p f(x)=∥x∥p(如 p = 1 , 2 p = 1, 2 p=1,2)。
3. 凸优化问题的标准形式
凸优化问题具有统一的数学表达,确保其可解性和唯一性。
-
标准形式:
minimize f ( x ) subject to g i ( x ) ≤ 0 , i = 1 , … , m h j ( x ) = 0 , j = 1 , … , p \begin{array}{ll} \text{minimize} & f(x) \\ \text{subject to} & g_i(x) \leq 0, \quad i = 1, \ldots, m \\ & h_j(x) = 0, \quad j = 1, \ldots, p \end{array} minimizesubject tof(x)gi(x)≤0,i=1,…,mhj(x)=0,j=1,…,p
其中:- f f f:凸函数(目标函数)。
- g i g_i gi:凸函数(不等式约束)。
- h j h_j hj:仿射函数(如 h j ( x ) = a j T x − b j h_j(x) = a_j^T x - b_j hj(x)=ajTx−bj)。
-
组成部分:
- 目标函数 f ( x ) f(x) f(x):需最小化,凸性保证单一全局解。
- 不等式约束 g i ( x ) ≤ 0 g_i(x) \leq 0 gi(x)≤0:定义凸的可行域。
- 等式约束 h j ( x ) = 0 h_j(x) = 0 hj(x)=0:保持凸性(仿射约束不会破坏凸集)。
-
意义:
标准形式将复杂的实际问题转化为数学模型,便于理论分析和算法设计。
4. 全局最优性
凸优化问题的独特优势在于局部最优解即全局最优解。
-
性质:
在凸优化问题中,任何局部最优解都是全局最优解。 -
证明概要:
假设 x ∗ x^* x∗ 是局部最优解,即存在邻域 ∥ x − x ∗ ∥ < ϵ \|x - x^*\| < \epsilon ∥x−x∗∥<ϵ 内 f ( x ) ≥ f ( x ∗ ) f(x) \geq f(x^*) f(x)≥f(x∗)。对于任意可行点 y y y,取 z = λ y + ( 1 − λ ) x ∗ z = \lambda y + (1 - \lambda) x^* z=λy+(1−λ)x∗( 0 < λ < 1 0 < \lambda < 1 0<λ<1),由于可行域凸, z z z 可行;由于 f f f 凸,
f ( z ) ≤ λ f ( y ) + ( 1 − λ ) f ( x ∗ ) f ( z ) ≤ λ f ( y ) + ( 1 − λ ) f ( x ∗ ) f(z)≤λf(y)+(1−λ)f(x∗)f(z) \leq \lambda f(y) + (1 - \lambda) f(x^*) f(z)≤λf(y)+(1−λ)f(x∗)f(z)≤λf(y)+(1−λ)f(x∗)
当 λ \lambda λ 足够小, z z z 在邻域内,故 f ( z ) ≥ f ( x ∗ ) f(z) \geq f(x^*) f(z)≥f(x∗)。结合上式, f ( y ) ≥ f ( x ∗ ) f(y) \geq f(x^*) f(y)≥f(x∗),即 x ∗ x^* x∗ 为全局最优。 -
应用:
这一性质允许使用简单算法(如梯度下降)高效求解,而无需担心陷入局部极值。
案例部分
线性回归的凸性证明
线性回归是凸优化的经典应用,广泛用于数据拟合。
-
问题描述:
给定数据集 { ( x i , y i ) } i = 1 N \{ (x_i, y_i) \}_{i=1}^N {(xi,yi)}i=1N( x i ∈ R d x_i \in \mathbb{R}^d xi∈Rd, y i ∈ R y_i \in \mathbb{R} yi∈R),求解 w ∈ R d w \in \mathbb{R}^d w∈Rd 和 b ∈ R b \in \mathbb{R} b∈R,使平方损失最小:
L ( w , b ) = ∑ i = 1 N ( y i − w T x i − b ) 2 L ( w , b ) = ∑ i = 1 N ( y i − w T x i − b ) 2 L(w,b)=∑i=1N(yi−wTxi−b)2L(w, b) = \sum_{i=1}^N (y_i - w^T x_i - b)^2 L(w,b)=∑i=1N(yi−wTxi−b)2L(w,b)=i=1∑N(yi−wTxi−b)2 -
优化形式:
min w , b L ( w , b ) \min_{w, b} \quad L(w, b) w,bminL(w,b)
无约束优化问题。 -
凸性证明:
-
定义 θ = [ w ; b ] ∈ R d + 1 \theta = [w; b] \in \mathbb{R}^{d+1} θ=[w;b]∈Rd+1,扩展 x ~ i = [ x i ; 1 ] \tilde{x}_i = [x_i; 1] x~i=[xi;1],则:
L ( θ ) = ∑ i = 1 N ( y i − θ T x i ) 2 L ( θ ) = ∑ i = 1 N ( y i − θ T x ~ i ) 2 L(θ)=∑i=1N(yi−θTx~i)2L(\theta) = \sum_{i=1}^N (y_i - \theta^T \tilde{x}_i)^2 L(θ)=∑i=1N(yi−θTx i)2L(θ)=i=1∑N(yi−θTx~i)2 -
L ( θ ) L(\theta) L(θ) 是二次函数,其Hessian为:
H = ∇ 2 L ( θ ) = 2 ∑ i = 1 N x i x i T H = ∇ 2 L ( θ ) = 2 ∑ i = 1 N x ~ i x ~ i T H=∇2L(θ)=2∑i=1Nx~ix~iTH = \nabla^2 L(\theta) = 2 \sum_{i=1}^N \tilde{x}_i \tilde{x}_i^T H=∇2L(θ)=2∑i=1Nx ix iTH=∇2L(θ)=2i=1∑Nx~ix~iT -
验证半正定性:对于任意 z ∈ R d + 1 z \in \mathbb{R}^{d+1} z∈Rd+1,
$$- zTHz=2∑i=1N(zTx~i)2≥0z^T H z = 2 \sum_{i=1}^N (z^T \tilde{x}_i)^2 \geq 0
$$
若 ∑ x ~ i x ~ i T \sum \tilde{x}_i \tilde{x}_i^T ∑x~ix~iT 满秩(如数据点线性无关), H H H 正定, L L L 强凸。
-
-
结论:
线性回归是凸优化问题,其全局最优解可通过解析法(正规方程)或迭代法(梯度下降)求得。
代码部分
使用MATLAB fmincon
验证凸函数最小值
通过编程实践验证凸优化的全局最优性。
- 问题:
求解 minimize f ( x ) = x 2 + 2 x + 1 \text{minimize} \ f(x) = x^2 + 2x + 1 minimize f(x)=x2+2x+1,理论最优解 x = − 1 x = -1 x=−1, f ( − 1 ) = 0 f(-1) = 0 f(−1)=0。 - 代码:
% 设置初始点 x0 = 0;% 使用fmincon求解无约束优化问题 options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'sqp'); [x_opt, fval] = fmincon(fun, x0, [], [], [], [], [], [], [], options);% 输出结果 fprintf('最优解: x = %.4f, 函数值 f(x) = %.4f\n', x_opt, fval);% 可视化验证 x_range = linspace(-3, 1, 100); f_values = arrayfun(fun, x_range); figure; plot(x_range, f_values, 'b-', 'LineWidth', 2); hold on; plot(x_opt, fval, 'ro', 'MarkerSize', 10, 'LineWidth', 2); title('凸函数 f(x) = x^2 + 2x + 1 的优化'); xlabel('x'); ylabel('f(x)'); grid on; legend('f(x)', '最优解');
- 解释:
- 目标函数: f ( x ) = x 2 + 2 x + 1 = ( x + 1 ) 2 f(x) = x^2 + 2x + 1 = (x + 1)^2 f(x)=x2+2x+1=(x+1)2,凸且最小值为0。
fmincon
:MATLAB优化工具,尽管用于约束问题,此处无约束仍适用。- 选项:
'Display', 'iter'
显示迭代过程,'Algorithm', 'sqp'
使用序列二次规划法。 - 可视化:绘制函数曲线和最优解点,直观验证结果。
- 运行结果:
输出 x ≈ − 1 x \approx -1 x≈−1, f ( x ) ≈ 0 f(x) \approx 0 f(x)≈0,迭代过程显示快速收敛,验证全局最优性。
实例
实例1:稀疏信号恢复(L1正则化最小二乘)
问题描述
求解稀疏信号 x ∈ R n x \in \mathbb{R}^n x∈Rn 满足 y = A x + ϵ y = Ax + \epsilon y=Ax+ϵ,其中 A ∈ R m × n A \in \mathbb{R}^{m \times n} A∈Rm×n( m ≪ n m \ll n m≪n), ϵ \epsilon ϵ 为噪声。目标是最小化:
min x 1 2 ∥ A x − y ∥ 2 2 + λ ∥ x ∥ 1 \min_x \frac{1}{2} \|Ax - y\|_2^2 + \lambda \|x\|_1 minx21∥Ax−y∥22+λ∥x∥1
(L1正则项促进稀疏性)
- 非光滑L1项需用近端梯度法或ADMM求解。
- 需平衡拟合误差与稀疏性(选择 λ \lambda λ)。
MATLAB代码
% 生成稀疏信号
n = 100; m = 30; k = 5; % k-稀疏信号
A = randn(m, n);
x_true = zeros(n, 1); x_true(randperm(n, k)) = randn(k, 1);
y = A * x_true + 0.1 * randn(m, 1);% 使用CVX求解Lasso问题
cvx_beginvariable x(n)minimize( 0.5 * sum_square(A * x - y) + 0.5 * norm(x, 1) ) % lambda=0.5
cvx_end% 可视化
figure;
subplot(2,1,1); stem(x_true, 'b'); title('真实稀疏信号');
subplot(2,1,2); stem(x, 'r'); title('Lasso恢复信号');
实例2:鲁棒投资组合优化(半定规划)
问题描述
在资产收益率不确定下,最小化投资风险:
min w max Σ ∈ U w T Σ w s.t. ∑ w i = 1 , w ≥ 0 \min_w \max_{\Sigma \in \mathcal{U}} w^T \Sigma w \quad \text{s.t.} \quad \sum w_i = 1, w \geq 0 minwmaxΣ∈UwTΣws.t.∑wi=1,w≥0
其中 U = { Σ ⪰ 0 ∣ ∥ Σ − Σ 0 ∥ F ≤ ρ } \mathcal{U} = \{ \Sigma \succeq 0 \mid \|\Sigma - \Sigma_0\|_F \leq \rho \} U={Σ⪰0∣∥Σ−Σ0∥F≤ρ} 为协方差矩阵的不确定集。
MATLAB代码
% 生成数据
n = 5; Sigma0 = randn(n); Sigma0 = Sigma0' * Sigma0; % 真实协方差
rho = 0.1;% 使用YALMIP建模
w = sdpvar(n,1);
Sigma = sdpvar(n,n);
Constraints = [sum(w) == 1, w >= 0, norm(Sigma - Sigma0, 'fro') <= rho, Sigma >= 0];
Objective = max(w' * Sigma * w); % 最坏情况风险
optimize(Constraints, Objective);% 输出最优权重
disp('最优权重:'); disp(value(w));
实例3:多智能体协同控制(分布式优化)
问题描述
N N N 个智能体协同最小化全局目标:
min x 1 , … , x N ∑ i = 1 N f i ( x i ) s.t. x i = x j ( ∀ i , j ) \min_{x_1, \ldots, x_N} \sum_{i=1}^N f_i(x_i) \quad \text{s.t.} \quad x_i = x_j \ (\forall i,j) minx1,…,xN∑i=1Nfi(xi)s.t.xi=xj (∀i,j)
(每个 f i f_i fi 为局部凸函数,约束要求一致性)
- 需分布式算法(如ADMM)处理大规模问题。
- 通信拓扑影响收敛速度。
MATLAB代码
% 定义局部函数(二次函数为例)
N = 10;
f = @(x, i) (x - i)^2; % 第i个智能体的目标% ADMM实现
rho = 1; max_iter = 100;
x = zeros(N,1); z = 0; u = zeros(N,1);for k = 1:max_iter% x-update (并行求解)for i = 1:Nx(i) = (i + rho*(z - u(i))) / (1 + rho);end% z-update (全局平均)z_prev = z;z = mean(x + u);% u-updateu = u + (x - z);% 终止条件if norm(x - z) < 1e-4, break; end
enddisp('一致性状态:'); disp(x);
实例4:带障碍函数的路径规划(内点法)
问题描述
在障碍物环境中规划路径 x ( t ) ∈ R 2 x(t) \in \mathbb{R}^2 x(t)∈R2:
min x ( t ) ∫ 0 T ∥ x ˙ ( t ) ∥ 2 d t s.t. ∥ x ( t ) − o i ∥ ≥ r i ( ∀ t , i ) \min_{x(t)} \int_0^T \|\dot{x}(t)\|^2 dt \quad \text{s.t.} \quad \|x(t) - o_i\| \geq r_i \ (\forall t, i) minx(t)∫0T∥x˙(t)∥2dts.t.∥x(t)−oi∥≥ri (∀t,i)
( o i o_i oi 为障碍物中心, r i r_i ri 为半径)
-
非凸约束需用对数障碍函数近似:
ϕ ( x ) = − ∑ i l o g ( ∥ x − o i ∥ 2 − r i 2 ) ϕ ( x ) = − ∑ i log ( ∥ x − o i ∥ 2 − r i 2 ) ϕ(x)=−∑ilog(∥x−oi∥2−ri2)\phi(x) = -\sum_i \log(\|x - o_i\|^2 - r_i^2) ϕ(x)=−∑ilog(∥x−oi∥2−ri2)ϕ(x)=−i∑log(∥x−oi∥2−ri2) -
离散化后求解大规模QP。
MATLAB代码
% 障碍物设置
obstacles = [1, 1, 0.5; 2, 3, 0.7]; % [x, y, r]% 离散化路径
N = 50; t = linspace(0, 1, N)';
x = sdpvar(N,2); % 路径点% 目标函数(平滑性)
Objective = sum(sum(diff(x).^2));% 障碍约束(对数障碍)
barrier = 0;
for i = 1:size(obstacles,1)dist = sum((x - obstacles(i,1:2)).^2, 2) - obstacles(i,3)^2;barrier = barrier - sum(log(dist));
end% 求解
optimize([], Objective + 0.1 * barrier); % 权重调节
plot(value(x(:,1)), value(x(:,2)), 'r-o'); hold on;
viscircles(obstacles(:,1:2), obstacles(:,3));
实例5:鲁棒支持向量机(SOCP)
问题描述
在数据不确定下训练SVM:
min w , b ∥ w ∥ 2 s.t. y i ( w T ( x i + δ i ) + b ) ≥ 1 ( ∀ ∥ δ i ∥ ≤ ρ ) \min_{w,b} \|w\|_2 \quad \text{s.t.} \quad y_i(w^T (x_i + \delta_i) + b) \geq 1 \ (\forall \|\delta_i\| \leq \rho) minw,b∥w∥2s.t.yi(wT(xi+δi)+b)≥1 (∀∥δi∥≤ρ)
( δ i \delta_i δi 为输入扰动,鲁棒性要求对扰动不敏感)
- 鲁棒约束可转化为二阶锥约束(SOCP)。
- 需处理无穷多约束的等价形式。
MATLAB代码
% 生成线性不可分数据
X = [randn(20,2) + 1; randn(20,2) - 1];
y = [ones(20,1); -ones(20,1)];
rho = 0.1; % 扰动半径% 使用CVX建模鲁棒SVM
cvx_beginvariables w(2) bminimize( norm(w) )subject tofor i = 1:size(X,1)y(i) * (w' * X(i,:)' + b) >= 1 + rho * norm(w); % 鲁棒约束end
cvx_end% 可视化
scatter(X(:,1), X(:,2), [], y);
hold on;
f = @(x) - (w(1)*x + b)/w(2);
fplot(f, [-3,3], 'LineWidth', 2);
相关文章:
凸优化基础
文章目录 目录**第1讲:凸优化基础****第2讲:凸优化建模****第3讲:对偶理论****第4讲:梯度下降法****第5讲:牛顿法与内点法****第6讲:次梯度与近端方法****第7讲:分布式凸优化****第8讲ÿ…...
LeetCode面试热题150中12-18题学习笔记(用Java语言描述)
Day 03 12、 O ( 1 ) O(1) O(1)时间插入、删除元素和获取元素 需求:实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否…...
开源模型集成接口
一、OpenRouter 概述 OpenRouter是一个开源的大模型API路由器,旨在将各种AI模型和服务集成到一个统一的接口中,使用户能够通过简单的配置调用不同大模型的能力。其主要功能包括智能路由用户请求到不同的AI模型,并提供统一的访问接…...
python成功解决AttributeError: can‘t set attribute ‘lines‘
文章目录 报错信息与原因分析解决方法示例代码代码解释总结 报错信息与原因分析 在使用 matplotlib绘图时,若尝试使用 ax.lines []来清除图表中的线条,会遇到AttributeError: can’t set attribute错误。这是因为 ax.lines是一个只读属性,不…...
宿舍管理系统(servlet+jsp)
宿舍管理系统(servletjsp) 宿舍管理系统是一个用于管理学生宿舍信息的平台,支持超级管理员、教师端和学生端三种用户角色登录。系统功能包括宿舍管理员管理、学生管理、宿舍楼管理、缺勤记录、添加宿舍房间、心理咨询留言板、修改密码和退出系统等模块。宿舍管理员…...
Unity UI 从零到精通 (第30天): Canvas、布局与C#交互实战
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
vue项目打包部署到maven仓库
需要的资源文件,都放在根目录下: 1. versionInfo.js const fs require(fs) const path require(path) const mkdirp require(mkdirp) const spawn require(child_process).spawnconst packageObj require(./package.json) const versionNo packa…...
【力扣】day1
文章目录 27.移除元素26. 删除有序数组的重复项 27.移除元素 26. 删除有序数组的重复项 我们仔细看一下这两道题的最后的返回值,为什么第一题返回slow 而第二题返回slow1 最后的返回值该如何返回绝对不是凭感觉,我们自己分析一下第一个slow,从0位置开始, 遇到val值就开始和fas…...
MySQL:B+树索引
InnoDB索引方案 为了使用二分法快速定位具体的目录项,假设所有目录项都可以在物理存储器上连续存储,有以下问题: InnoDB使用页为管理存储空间的基本单位,最多只能保证16KB的连续存储空间,记录数据量多可能需要非常大…...
如何建立可复用的项目管理模板
建立可复用的项目管理模板能够显著提高项目执行效率、减少重复劳动、确保项目管理标准化。在企业中,项目管理往往涉及多个步骤和多个团队,然而每次开始一个新项目时,如果都从头开始设计流程和文档,势必浪费大量的时间和精力。通过…...
Go:goroutine 和通道
goroutine f() // 等待 f() 返回 go f() // 新建一个调用 f() 的 goroutine,不用等待在 Go 语言里,goroutine 是并发执行的活动单元。与顺序执行程序不同,在有多个 goroutine 的并发程序中,不同函数可同时执行。程序启动时&…...
盛水最多的容器问题详解:双指针法与暴力法的对比与实现
文章目录 问题描述方法探讨方法一:暴力法(Brute Force)思路代码实现复杂度分析 方法二:双指针法(Two Pointers)思路正确性证明代码实现复杂度分析 方法对比总结 摘要 盛水最多的容器(Container …...
VMWare 16 PRO 安装 Rocky8 并部署 MySQL8
VMWare 16 PRO 安装 Rocky8 并部署 MySQL8 一.Rocky OS 下载1.官网 二.配置 Rocky1.创建新的虚拟机2.稍后安装系统3.选择系统模板4.设置名字和位置5.设置大小6.自定义硬件设置核心、运存和系统镜像7.完成 三.启动安装1.上下键直接选择安装2.回车安装3.设置分区(默认…...
日常学习开发记录-slider组件
日常学习开发记录-slider组件 从零开始实现一个优雅的Slider滑块组件前言一、基础实现1. 组件结构设计2. 基础样式实现3. 基础交互实现 二、功能增强1. 添加拖动功能2. 支持范围选择3. 添加垂直模式 三、高级特性1. 键盘操作支持2. 禁用状态 五、使用示例六、总结 从零开始实现…...
AIDL 中如何传递 Parcelable 对象
目录 1. 直接在 AIDL 中定义 Parcelable 对象2. 自定义 Parcelable 对象的传递3. 以 Rect 类为例的 Parcelable 实现4. 注意安全性5. 小结1. 直接在 AIDL 中定义 Parcelable 对象 背景说明 从 Android 10(API 级别 29)开始,AIDL 允许直接在 .aidl 文件中定义 Parcelable 对…...
LVGL实战训练——计算器实现
目录 一、简介 二、部件知识 2.1 按钮矩阵部件(lv_btnmatrix) 2.1.1 按钮矩阵部件的组成 2.1.2 按钮文本设置 2.1.3 按钮索引 2.1.4 按钮宽度 2.1.5 按钮属性 2.1.6 按钮互斥 2.1.7 按钮文本重着色 2.1.8 按钮矩阵部件的事件 2.1.9 按钮矩阵部件的 API 函数 2.2…...
代码随想录算法训练营Day30
力扣452.用最少数量的箭引爆气球【medium】 力扣435.无重叠区间【medium】 力扣763.划分字母区间【medium】 力扣56.合并区间【medium】 一、力扣452.用最少数量的箭引爆气球【medium】 题目链接:力扣452.用最少数量的箭引爆气球 视频链接:代码随想录 题…...
AIDL 语言简介
目录 软件包类型注释导入AIDL 的后端AIDL 语言大致上基于 Java 语言。AIDL 文件不仅定义了接口本身,还会定义这个接口中用到的数据类型和常量。 软件包 每个 AIDL 文件都以一个可选软件包开头,该软件包与各个后端中的软件包名称相对应。软件包声明如下所示: package my.pac…...
经典算法 判断一个图中是否有环
判断一个图中是否有环 问题描述 给一个以0 0结尾的整数对列表,除0 0外的每两个整数表示一条连接了这两个节点的边。假设节点编号不超过100000大于0。你只要判断由这些节点和边构成的图中是否存在环。存在输出YES,不存在输出NO。 输入样例1 6 8 5 3 …...
Transformer-PyTorch实战项目——文本分类
Transformer-PyTorch实战项目——文本分类 ———————————————————————————————————————————— 【前言】 这篇文章将带领大家使用Hugging Face里的模型进行微调,并运用在我们自己的新项目——文本分类中。需要大家提前下…...
Linux-服务器负载评估方法
在 Linux 服务器中,top 命令显示的 load average(平均负载)反映了系统在特定时间段内的负载情况。它通常显示为三个数值,分别代表过去 1 分钟、5 分钟和 15 分钟的平均负载。 1. 什么是 Load Average? Load average …...
Transformer编程题目,结合RTX 3060显卡性能和市场主流技术
以下是10道针对4年经验开发者的Transformer编程题目,结合RTX 3060显卡性能和市场主流技术,每题包含模型选择和实现逻辑描述: 题目1:医疗报告结构化提取 模型选择:BioBERT-base 要求: 开发从PDF医疗报告中提…...
Web三漏洞学习(其二:sql注入)
靶场:NSSCTF 、云曦历年考核题 二、sql注入 NSSCTF 【SWPUCTF 2021 新生赛】easy_sql 这题虽然之前做过,但为了学习sql,整理一下就再写一次 打开以后是杰哥的界面 注意到html网页标题的名称是 “参数是wllm” 那就传参数值试一试 首先判…...
VLAN的知识
1.什么是VLAN? VLAN是虚拟局域网,逻辑隔离广播域和网络区域 是一种通过将局域网内的设备逻辑地划分为一个个网络的技术 2.对比逻辑网络分割和物理网络分割? 逻辑网络分割是VLAN,隔离广播域和网络区域 物理网络分割是路由&…...
RFID 赋能部队智能物联网仓储建设:打造信息化高效解决方案
在当今军事现代化进程的宏大背景下,部队后勤保障工作无疑占据着举足轻重的地位,而仓储管理作为其中的核心环节,更是至关重要。传统的仓储管理模式在面对当下物资种类繁杂、数量庞大的现状时,已显得力不从心,效率低下、…...
结构型屏蔽在高频电子设备中的应用与优化
在当今高度电子化的时代,随着电子产品工作频率不断提高,设备内部温度上升,电磁环境日趋复杂,电磁兼容(EMC)问题成为设计和制造过程中必须重点解决的问题。EMC不仅关系到设备自身的稳定运行,更涉…...
【教程】Ubuntu修改ulimit -l为unlimited
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 问题描述 解决方法一 解决方法二 解决方法三 (终极) 问题描述 查系统资源限制 ulimit -l如果返回的是 64 或其他较小值,那么RDM…...
【HDFS】BlockPlacementPolicyRackFaultTolerant#getMaxNode方法的功能及具体实例
方法参数说明: numOfChosen:已经选择的节点数numOfReplicas:还需要选择的副本数方法的返回值是一个长度为2的数组:[调整后的要选出多少个节点(不包括已经选择的), 每个机架最大能选择的节点数] @Overrideprotected int[] getMaxNodesPerRack(int numOfChosen, int numOfR…...
水污染治理(生物膜+机器学习)
文章目录 **1. 水质监测与污染预测****2. 植物-微生物群落优化****3. 系统设计与运行调控****4. 维护与风险预警****5. 社区参与与政策模拟****挑战与解决思路****未来趋势** 前言: 将机器学习(ML)等人工智能技术融入植树生物膜系统ÿ…...
数模小白变大神的日记2025.4.15日
分工 1.论文:mathtype (Latex) 2.建模;相应的建模知识与撰写方法,写摘要 3.编程:matlab、SPSs、(Python) 评价模型 1. 层次分析法 ①层次分析法是一种多目标、多准则的决策问题 ②层次分析法是一种主观加权法 ③层次分析法通过以下步骤实现: 1.构…...
STM32提高篇: 以太网通讯
STM32提高篇: 以太网通讯 一.以太网通讯介绍二.W5500芯片介绍1.W5500芯片特点2.W5500应用目标3.接入框图 三.驱动移植四.tcp通讯五.udp通讯六.http_server 一.以太网通讯介绍 以太网(Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以…...
4-15记录(冒泡排序,快速选择排序)
算法稳定 简单选择排序的实质就是最后一个和第一个比较,小,就换位置,然后继续用最后一个数字和第二个比较,以此类推。 但是算法不稳定,本来下划线的2在后面,但是经过算法后去了前面 快速排序 实现过程&am…...
Ubuntu系统18.04更新驱动解决方法
原始是:ubuntu18.04里面的驱动是470,对应cuda11.4 现在需要更新为525,对应cuda为12.0 实现: 1、打开终端 Ctrl Alt T2、使用 lspci 命令(快速查看显卡型号) lspci | grep -i vga3、终端输入 ubuntu-d…...
Rocky Linux 9.x 基于 kubeadm部署k8s
搭建集群使用docker下载K8s,使用一主两从模式 主机名IP地址k8s- master192.168.1.141k8s- node-1192.168.1.142k8s- node-2192.168.1.143 一:准备工作 VMware Workstation Pro新建三台虚拟机Rocky Linux 9(系统推荐最小化安装) …...
MATLAB程序实现了一个物流配送优化系统,主要功能是通过遗传算法结合四种不同的配送策略,优化快递订单的配送方案
%% 主函数部分 % function main()clear; clc; close all;% 生成或加载算例 filename = D:\快递优化\LogisticsInstance.mat; if ~exist(filename, file)instance = generate_instance();save(filename, -struct, instance); elseinstance = load(filename); end% 遗传算法参数配…...
利用宝塔面板搭建RustDesk服务
一、介绍 1.1官网 https://rustdesk.com/ 1.2github仓库 https://github.com/rustdesk/rustdesk 1.3特点 RustDesk 支持多种操作系统,包括 Windows、macOS、Linux、Android 和 iOS。它甚至提供网页版客户端,可以在浏览器中直接使用。 用户可以通过…...
前端与Java后端交互出现跨域问题的14种解决方案
跨域问题是前端与后端分离开发中的常见挑战,以下是14种完整的解决方案: 1 前端解决方案( 开发环境代理) 1.1 Webpack开发服务器代理 // vue.config.js 或 webpack.config.js module.exports {devServer: {proxy: {/api: {target: http://localhost:8…...
PBKDF2全面指南(SpringBoot实现版)
文章目录 第一部分:PBKDF2基础概念1. 什么是PBKDF2?2. 为什么需要PBKDF2?3. PBKDF2的工作原理4. PBKDF2与其他密码散列函数的比较第二部分:在Java和SpringBoot中使用PBKDF21. Java内置的PBKDF2支持2. SpringBoot中集成PBKDF22.1 添加依赖2.2 配置PBKDF2密码编码器2.3 自定义…...
基于RV1126开发板的rknn-toolkit-lite使用方法
1. rknn-toolkit-lite介绍 rknn-toolkit-lite是用于python算法的推理的组件,当前已经在EASY-EAI-Nano完成适配,用户可以用它进行深度学习算法的纯python开发。而且同时支持已经进行了预编译的模型,短短几行代码即可完成算法的推理,…...
一款轻量级的PHP地址发布页面源码
源码介绍 一款轻量级的PHP链接发布页面源码,适合快速搭建个性化的链接导航网站,支持动态链接管理和多种风格模板切换 1:后台登录地址为/admin/login.php,提供便捷的配置入口。 2:默认用户名是admin,密码为…...
分布式计算领域的前沿工具:Ray、Kubeflow与Spark的对比与协同
在当今机器学习和大数据领域,分布式计算已成为解决大规模计算问题的关键技术。本文将深入探讨三种主流分布式计算框架——Ray、Kubeflow和Spark,分析它们各自的特点、应用场景以及如何结合它们的优势创建更强大的计算平台。 Spark批量清洗快,…...
【专题刷题】双指针(一)
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:1,本人解法 本人屎山代码;2,优质解法 优质代码;3,精益求精,…...
火山引擎旗下防御有哪些
首先,我需要确认用户是不是打错了,比如把“引擎”当成了“云”,或者他们真的想了解火山引擎的防御机制。火山引擎是字节跳动旗下的云服务平台,类似于阿里云或腾讯云,所以用户可能想了解的是其安全防护措施。 接下来&am…...
python程序打包——nuitka使用
目前python打包成exe的工具主要有:PyInstaller Briefcase py2exe py2app Nuitka CX_Freeze等。 不同于C代码,可以直接编译成可执行的exe文件,或者js代码在浏览器中就能执行,python代码必须通过python解释器来运行,…...
编写了一个专门供强化学习玩的贪吃蛇小游戏,可以作为后续学习的playgraound
文章目录 **试玩效果****项目背景****核心设计思路****代码亮点解析****与强化学习算法的对接示例****扩展方向****总结****完整代码**把训练一个会玩小游戏的智能体,作为学习强化学习的一个目标,真的是很有乐趣的一件事。我已经不知为此花费了多少日夜了。如今已是着魔了一般…...
chain_type=“stuff 是什么 ? 其他方式有什么?
chain_type="stuff 是什么 ? 其他方式有什么? 目录 chain_type="stuff 是什么 ? 其他方式有什么?1. `chain_type="stuff"`2. `chain_type="map_reduce"`3. `chain_type="refine"`4. `chain_type="map_rerank"`在 LangCh…...
在IDEA里面建立maven项目(便于java web使用)
具体步骤: 第一次有的电脑你再创建项目的时候右下角会提醒你弹窗:让你下载没有的东西 一定要下载!!可能会很慢 运行结果: 因为他是默认的8080端口所以在运行的时候输入的url如下图: 新建了一个controller代…...
MyBatis 详解
1. 什么是 MyBatis? MyBatis 是一款优秀的 持久层框架,它通过 XML 或注解配置,将 Java 对象(POJO)与数据库操作(SQL)进行灵活映射,简化了 JDBC 的复杂操作。 核心思想:S…...
郑州工程技术学院党委书记甘勇一行莅临埃文科技调研交流
为深化产教融合、推动人工智能领域人才培养与产业需求精准对接,2025年4月9日下午,郑州工程技术学院党委书记甘勇、河南省人工智能产业创新发展联盟执行秘书长孟松涛等一行莅临埃文科技调研交流。 一、聚焦技术前沿 共话AI产业变革 座谈会上,…...
AI应用开发之扣子第一课-夸夸机器人
首先,进入官网:点击跳转至扣子。 1.创建智能体 登录进网站后,点击左上角+图标,创建智能体,输入智能体名称、功能介绍 2.输入智能体提示词 在“人设与回复逻辑”输入以下内容: # 角色 你是一…...