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

线性代数|机器学习-P22逐步最小化一个函数

文章目录

  • 1. 概述
  • 2. 泰勒公式
  • 3. 雅可比矩阵
  • 4. 经典牛顿法
    • 4.1 经典牛顿法理论
    • 4.2 牛顿迭代法解求方程根
    • 4.3 牛顿迭代法解求方程根 Python
  • 5. 梯度下降和经典牛顿法
    • 5.1 线搜索方法
    • 5.2 经典牛顿法
  • 6. 凸优化问题
    • 6.1 约束问题
    • 6.1 凸集组合

Mit麻省理工教授视频如下:逐步最小化一个函数

1. 概述

主要讲的是无约束情况下的最小值问题。涉及到如下:

  • 矩阵求导
  • 泰勒公式,函数到向量的转换
  • 梯度下降
  • 牛顿法梯度下降

2. 泰勒公式

我们之前在高等数学中学过关于f(x)的泰勒展开如下:
定义: lim ⁡ x → a h k ( x ) = 0 \lim\limits_{x\to a}h_k(x)=0 xalimhk(x)=0
f ( x ) = f ( a ) + f ′ ( a ) ( x − a ) + f ′ ′ ( a ) 2 ! ( x − a ) 2 + ⋯ + f ( k ) ( a ) k ! ( x − a ) k + h k ( x ) ( x − a ) k \begin{equation} f(x)=f(a)+f'(a)(x-a)+\frac{f''(a)}{2!}(x-a)^2+\cdots+\frac{f^{(k)}(a)}{k!}(x-a)^k+h_k(x)(x-a)^k \end{equation} f(x)=f(a)+f(a)(xa)+2!f′′(a)(xa)2++k!f(k)(a)(xa)k+hk(x)(xa)k

  • 那么我们只提取二次项, x + Δ x → x ; x → a x+\Delta x \rightarrow x;x\rightarrow a x+Δxx;xa 可得如下:
    f ( x + Δ x ) ≈ f ( x ) + f ′ ( x ) Δ x + f ′ ′ ( x ) 2 ! Δ x 2 \begin{equation} f(x+\Delta x)\approx f(x)+f'(x)\Delta x+\frac{f''(x)}{2!}\Delta x^2 \end{equation} f(x+Δx)f(x)+f(x)Δx+2!f′′(x)Δx2
  • 上面的公式中x为标量,现在我们需要用到向量 x
  • a , b a,b a,b均为1维列向量,S为对称矩阵时,我们可得得到如下:
    a T b = c , x T S x = d → c , d 均为标量 \begin{equation} a^Tb=c,x^TSx=d\rightarrow c,d均为标量 \end{equation} aTb=c,xTSx=dc,d均为标量
  • 定义如下:
    x = [ x 1 x 2 ⋯ x n ] T , f = [ f 1 f 2 ⋯ f n ] T \begin{equation} x=\begin{bmatrix}x_1&x_2&\cdots&x_n\end{bmatrix}^T,f=\begin{bmatrix}f_1&f_2&\cdots&f_n\end{bmatrix}^T \end{equation} x=[x1x2xn]T,f=[f1f2fn]T
    f ′ ( x ) = ∇ F = [ ∂ f ∂ x 1 ∂ f ∂ x 1 ⋯ ∂ f ∂ x n ] T → f ′ ( x ) Δ x = ( Δ x ) T ∇ F ( x ) \begin{equation} f'(x)=\nabla F=\begin{bmatrix}\frac{\partial f}{\partial x_1}&\frac{\partial f}{\partial x_1}&\cdots&\frac{\partial f}{\partial x_n}\end{bmatrix}^T \rightarrow f'(x)\Delta x=(\Delta x)^T \nabla F(x) \end{equation} f(x)=F=[x1fx1fxnf]Tf(x)Δx=(Δx)TF(x)
  • H j k H_{jk} Hjkhessian matrix具有对称性
    f ′ ′ ( x ) = H j k = ∂ 2 F ∂ x j ⋅ ∂ x k → f ′ ′ ( x ) 2 ! Δ x 2 = 1 2 ( Δ x ) T H j k ( Δ x ) \begin{equation} f''(x)=H_{jk}=\frac{\partial^2F}{\partial x_j\cdot \partial x_k}\rightarrow \frac{f''(x)}{2!}\Delta x^2=\frac{1}{2}(\Delta x)^T H_{jk}(\Delta x) \end{equation} f′′(x)=Hjk=xjxk2F2!f′′(x)Δx2=21(Δx)THjk(Δx)
  • 整理上述公式可得:
    F ( x + Δ x ) ≈ F ( x ) + ( Δ x ) T ∇ F ( x ) + 1 2 ( Δ x ) T H j k ( Δ x ) \begin{equation} F(x+\Delta x)\approx F(x)+(\Delta x)^T \nabla F(x)+\frac{1}{2}(\Delta x)^T H_{jk}(\Delta x) \end{equation} F(x+Δx)F(x)+(Δx)TF(x)+21(Δx)THjk(Δx)

3. 雅可比矩阵

假设有一个m维度向量函数 f ( x ) = [ f 1 ( x ) f 2 ( x ) ⋯ f m ( x ) ] T f(x)=\begin{bmatrix}f_1(x)&f_2(x)&\cdots f_m(x)\end{bmatrix}^T f(x)=[f1(x)f2(x)fm(x)]T[列向量],其中
x = [ x 1 x 2 ⋯ x n ] T x=\begin{bmatrix}x_1&x_2&\cdots&x_n\end{bmatrix}^T x=[x1x2xn]T是一个n维输入向量,雅可比矩阵J是一个 m × n m\times n m×n的矩阵,其元素由函数的偏导数组成:雅可比矩阵第i行第j列表示的是 f i ( x ) f_i(x) fi(x) x i x_i xi的偏导
J i j = ∂ f i ( x ) ∂ x j \begin{equation} J_{ij}=\frac{\partial f_i(x)}{\partial x_j} \end{equation} Jij=xjfi(x)

  • 本质上就是函数值 f i ( x ) f_i(x) fi(x) x i x_i xi的每个元素求导:

  • 第一步假设 f i ( x ) f_i(x) fi(x)是常数, ∂ f i ( x ) ∂ X \frac{\partial f_i(x)}{\partial X} Xfi(x)为分子布局,遵循标量不变,向量拉伸原则

  • XY拉伸术,分子布局,X横向拉,Y纵向拉,可得如下:
    ∂ f i ( x ) ∂ X = [ ∂ f i ( x ) ∂ x 1 ∂ f i ( x ) ∂ x 2 ⋯ ∂ f i ( x ) ∂ x n ] \begin{equation} \frac{\partial f_i(x)}{\partial X}= \begin{bmatrix} \frac{\partial f_i(x)}{\partial x_1}& \frac{\partial f_i(x)}{\partial x_2}& \cdots& \frac{\partial f_i(x)}{\partial x_n} \end{bmatrix} \end{equation} Xfi(x)=[x1fi(x)x2fi(x)xnfi(x)]

  • 第二步假设 f ( x ) f(x) f(x)为向量, ∂ f ( x ) ∂ X \frac{\partial f(x)}{\partial X} Xf(x)为分子布局,遵循标量不变,向量拉伸原则

  • XY拉伸术,分子布局,X横向拉,Y 纵向拉,可得如下:
    J = [ ∂ f 1 ( x ) ∂ x 1 ∂ f 1 ( x ) ∂ x 2 ⋯ ∂ f 1 ( x ) ∂ x n ∂ f 2 ( x ) ∂ x 1 ∂ f 2 ( x ) ∂ x 2 ⋯ ∂ f 2 ( x ) ∂ x n ⋮ ⋮ ⋯ ⋮ ∂ f m ( x ) ∂ x 1 ∂ f m ( x ) ∂ x 2 ⋯ ∂ f m ( x ) ∂ x n ] \begin{equation} \mathrm{J}= \begin{bmatrix} \frac{\partial f_1(x)}{\partial x_1}&\frac{\partial f_1(x)}{\partial x_2}&\cdots&\frac{\partial f_1(x)}{\partial x_n}\\\\ \frac{\partial f_2(x)}{\partial x_1}&\frac{\partial f_2(x)}{\partial x_2}&\cdots&\frac{\partial f_2(x)}{\partial x_n} \\\\ \vdots&\vdots&\cdots&\vdots\\\\\ \frac{\partial f_m(x)}{\partial x_1}&\frac{\partial f_m(x)}{\partial x_2}&\cdots& \frac{\partial f_m(x)}{\partial x_n} \end{bmatrix} \end{equation} J= x1f1(x)x1f2(x) x1fm(x)x2f1(x)x2f2(x)x2fm(x)xnf1(x)xnf2(x)xnfm(x)

  • 泰勒公式1阶展开可得:
    f ( x + Δ x ) = f ( x ) + f ′ ( x ) Δ x \begin{equation} f(x+\Delta x)=f(x)+f'(x)\Delta x \end{equation} f(x+Δx)=f(x)+f(x)Δx

  • 转换成雅可比矩阵可得:
    f ( x + Δ x ) = f ( x ) + J j k Δ x ; J j k = ∂ f j ( x ) ∂ x k \begin{equation} f(x+\Delta x)=f(x)+\mathrm{J}_{jk}\Delta x;\mathrm{J}_{jk}=\frac{\partial f_j(x)}{\partial x_k} \end{equation} f(x+Δx)=f(x)+JjkΔx;Jjk=xkfj(x)

4. 经典牛顿法

4.1 经典牛顿法理论

我们已经知道了函数的二阶泰勒展开表示如下:
F ( x + Δ x ) ≈ F ( x ) + ( Δ x ) T ∇ F ( x ) + 1 2 ( Δ x ) T H j k ( Δ x ) \begin{equation} F(x+\Delta x)\approx F(x)+(\Delta x)^T \nabla F(x)+\frac{1}{2}(\Delta x)^T H_{jk}(\Delta x) \end{equation} F(x+Δx)F(x)+(Δx)TF(x)+21(Δx)THjk(Δx)

  • 一般如果在 x ∗ x^* x处取得最小值,那么其导数为0;现在我们求导可得:
    d F ( x ) d Δ x = 0 ; ( Δ x ) T ∇ F ( x ) d Δ x = ∇ F ( x ) ; d 1 2 ( Δ x ) T H j k ( Δ x ) d Δ x = H j k Δ x ; \begin{equation} \frac{\mathrm{d}F(x)}{\mathrm{d}\Delta x}=0;\frac{(\Delta x)^T \nabla F(x)}{\mathrm{d}\Delta x}=\nabla F(x);\frac{\mathrm{d}\frac{1}{2}(\Delta x)^T H_{jk}(\Delta x)}{\mathrm{d}\Delta x}=H_{jk}\Delta x; \end{equation} dΔxdF(x)=0;dΔx(Δx)TF(x)=F(x);dΔxd21(Δx)THjk(Δx)=HjkΔx;
    d F ( x + Δ x ) d Δ x = 0 + ∇ F ( x ) + H j k Δ x = 0 \begin{equation} \frac{\mathrm{d}F(x+\Delta x)}{\mathrm{d}\Delta x}=0+\nabla F(x)+H_{jk}\Delta x=0 \end{equation} dΔxdF(x+Δx)=0+F(x)+HjkΔx=0
  • H j k = J j k H_{jk}=\mathrm{J}_{jk} Hjk=Jjk可逆时, Δ x = x k + 1 − x k \Delta x=x_{k+1}-x_k Δx=xk+1xk可得:
    − [ H j k ] − 1 ∇ F ( x ) = x k + 1 − x k → x k + 1 = x k − [ J j k ] − 1 ∇ F ( x ) \begin{equation} -[H_{jk}]^{-1}\nabla F(x)=x_{k+1}-x_k\rightarrow x_{k+1}=x_k-[\mathrm{J}_{jk}]^{-1}\nabla F(x) \end{equation} [Hjk]1F(x)=xk+1xkxk+1=xk[Jjk]1F(x)
  • 我们定义 ∇ F ( x ) = f ( x k ) \nabla F(x)=f(x_k) F(x)=f(xk), J j k = J x k \mathrm{J}_{jk}=\mathrm{J}_{x_k} Jjk=Jxk
    x k + 1 = x k − [ J x k ] − 1 f ( x k ) \begin{equation} x_{k+1}=x_k-[\mathrm{J}_{x_k}]^{-1}f(x_k) \end{equation} xk+1=xk[Jxk]1f(xk)

4.2 牛顿迭代法解求方程根

  • 已知: f ( x ) = x 2 − 9 = 0 f(x)=x^2-9=0 f(x)=x29=0,用牛顿迭代的方法求解方程的根
  • 根据迭代公式可得: f ′ ( x ) = J x k = 2 x , f ( x k ) = x k 2 − 9 f'(x)=\mathrm{J}_{x_k}=2x,f(x_k)=x_k^2-9 f(x)=Jxk=2x,f(xk)=xk29
    x k + 1 = x k − [ J x k ] − 1 f ( x k ) → x k + 1 = x k − f ( x k ) J x k \begin{equation} x_{k+1}=x_k-[\mathrm{J}_{x_k}]^{-1}f(x_k)\rightarrow x_{k+1}=x_k-\frac{f(x_k)}{\mathrm{J}_{x_k}} \end{equation} xk+1=xk[Jxk]1f(xk)xk+1=xkJxkf(xk)
  • 整理可得:
    x k + 1 = x k − x k 2 − 9 2 x k = 1 2 x k + 9 2 x k \begin{equation} x_{k+1}=x_k-\frac{x_k^2-9}{2x_k}=\frac{1}{2}x_k+\frac{9}{2x_k} \end{equation} xk+1=xk2xkxk29=21xk+2xk9
  • 收敛依据:
    判断新的近似值 x k + 1 x_{k+1} xk+1与当前值 x k x_k xk之间的差距是否小于某个值 ϵ = 1 0 − 10 \epsilon=10^{-10} ϵ=1010,如果小于该值则认为收敛,否则继续迭代。
  • 我们先设置初始值 x 0 = 2 x_0=2 x0=2可得 x 1 x_1 x1
    x 1 = 1 2 x 0 + 9 2 x 0 = 3.25 ; \begin{equation} x_{1}=\frac{1}{2}x_0+\frac{9}{2x_0}=3.25; \end{equation} x1=21x0+2x09=3.25;
  • 继续迭代得 x 2 x_2 x2
    x 2 = 1 2 x 1 + 9 2 x 1 = 3.0096153846153846 ; \begin{equation} x_{2}=\frac{1}{2}x_1+\frac{9}{2x_1}=3.0096153846153846; \end{equation} x2=21x1+2x19=3.0096153846153846;
  • 继续迭代得 x 3 x_3 x3
    x 3 = 1 2 x 2 + 9 2 x 2 = 3.000015360039322 ; \begin{equation} x_{3}=\frac{1}{2}x_2+\frac{9}{2x_2}=3.000015360039322; \end{equation} x3=21x2+2x29=3.000015360039322
  • 继续迭代得 x 4 x_4 x4
    x 4 = 1 2 x 3 + 9 2 x 3 = 3.0000000000393214 ; \begin{equation} x_{4}=\frac{1}{2}x_3+\frac{9}{2x_3}=3.0000000000393214; \end{equation} x4=21x3+2x39=3.0000000000393214
  • 可得 x 2 − 9 = 0 x^2-9=0 x29=0的解为 x 1 ∗ = 3 x_1^*=3 x1=3,同理初始化为 x 0 = − 2 x_0=-2 x0=2 可得 x 2 ∗ = − 3 x_2^*=-3 x2=3

4.3 牛顿迭代法解求方程根 Python

  • 代码: Python代码如下:
def newton_raphson(f, f_prime, x0, tol=1e-10, max_iter=100):x = x0for i in range(max_iter):fx = f(x)fpx = f_prime(x)# Newton-Raphson iterationx_new = x - fx / fpxprint(f"Iteration {i + 1}: x = {x_new}")if abs(x_new - x) < tol:return x_newx = x_newraise ValueError("Newton-Raphson method did not converge")# Define the function and its first derivative
f = lambda x: x ** 2 - 9
f_prime = lambda x: 2 * x# Initial guesses
initial_guesses = [2, -2]# Find the roots
for x0 in initial_guesses:root = newton_raphson(f, f_prime, x0)print(f"The root starting from {x0} is: {root}")
  • 运行结果:
Iteration 1: x = 3.25
Iteration 2: x = 3.0096153846153846
Iteration 3: x = 3.000015360039322
Iteration 4: x = 3.0000000000393214
Iteration 5: x = 3.0
The root starting from 2 is: 3.0
Iteration 1: x = -3.25
Iteration 2: x = -3.0096153846153846
Iteration 3: x = -3.000015360039322
Iteration 4: x = -3.0000000000393214
Iteration 5: x = -3.0
The root starting from -2 is: -3.0

5. 梯度下降和经典牛顿法

对于无约束问题的梯度下降,我们一般有两种方法:

5.1 线搜索方法

运用泰勒一阶信息,迭代方向为负梯度方向:

  • 迭代方程:
    x k + 1 = x k + α k p k \begin{equation} x_{k+1}=x_k +\alpha_k p_k \end{equation} xk+1=xk+αkpk
  • 方向 p k p_k pk:负梯度方向 − ∇ F -\nabla F F
  • 步长: α k = s k \alpha_k=s_k αk=sk,深度学习中叫学习率
  • 更新后的方程如下:
    x k + 1 = x k − s k ∇ F \begin{equation} x_{k+1}=x_k -s_k \nabla F \end{equation} xk+1=xkskF

5.2 经典牛顿法

运用泰勒二阶信息,迭代方向为牛顿方向:迭代步长为 α 1 = 1 \alpha_1=1 α1=1

  • 迭代方程为,hessian matrix-> H j k H_{jk} Hjk可逆:
    x k + 1 = x k − [ H j k ] − 1 ∇ F ( x ) \begin{equation} x_{k+1}=x_k-[H_{jk}]^{-1}\nabla F(x) \end{equation} xk+1=xk[Hjk]1F(x)
  • 经典牛顿法为二次性收敛,速度非常快,具体分析请参考如下博客
    [优化算法]经典牛顿法

6. 凸优化问题

6.1 约束问题

我们定义凸函数为 f ( x ) f(x) f(x),凸集为 K \mathrm{K} K,我们的目的是为了求得凸函数 f ( x ) f(x) f(x)的最小值
min ⁡ x ∈ K f ( x ) , K : A x = b \begin{equation} \min\limits_{x\in K} f(x), \mathrm{K}:Ax=b \end{equation} xKminf(x)K:Ax=b

  • f ( x ) f(x) f(x)表示的是所有在碗内部上的和碗内表面上的点
  • 求的是在碗内表面的上的最小值,碗的形状就是约束条件 A x = b Ax=b Ax=b
    在这里插入图片描述

6.1 凸集组合

  • 如果 x 1 , x 2 x_1,x_2 x1,x2均在凸集里面,则由 x 1 , x 2 x_1,x_2 x1,x2组成的直线L在凸集里面
    在这里插入图片描述
  • 如果 x 1 , x 2 x_1,x_2 x1,x2分别在不同的凸集里面,则由 x 1 , x 2 x_1,x_2 x1,x2组成的直线L不在凸集里面
    在这里插入图片描述
  • 小结:合并图集里面组合的直线不在凸集里面。
  • 如果 x 1 , x 2 x_1,x_2 x1,x2都在不同的凸集里面的交集里面,则由 x 1 , x 2 x_1,x_2 x1,x2组成的直线L在凸集中
    在这里插入图片描述
  • 假设我们有两个凸函数 F 1 ( x ) , F 2 ( x ) F_1(x),F_2(x) F1(x),F2(x),我们定义如下:
    min ⁡ ( x ) = min ⁡ [ F 1 ( x ) , F 2 ( x ) ] ; max ⁡ ( x ) = max ⁡ [ F 1 ( x ) , F 2 ( x ) ] ; \begin{equation} \min(x)=\min[F_1(x),F_2(x)];\max(x)=\max[F_1(x),F_2(x)]; \end{equation} min(x)=min[F1(x),F2(x)];max(x)=max[F1(x),F2(x)];
  • 如果两个凸集相交,那么相交的凸集最大值,最小值如下:
    min ⁡ ( x ) = min ⁡ [ F 1 ( x ) , F 2 ( x ) ] − > 非凸; max ⁡ ( x ) = max ⁡ [ F 1 ( x ) , F 2 ( x ) ] − > 凸 ; \begin{equation} \min(x)=\min[F_1(x),F_2(x)]-> 非凸;\max(x)=\max[F_1(x),F_2(x)]->凸; \end{equation} min(x)=min[F1(x),F2(x)]>非凸;max(x)=max[F1(x),F2(x)]>;
  • 凸函数判断
    d 2 f ( x ) d x 2 ≥ 0 \begin{equation} \frac{\mathrm{d}^2f(x)}{\mathrm{d}x^2}\ge 0 \end{equation} dx2d2f(x)0

相关文章:

线性代数|机器学习-P22逐步最小化一个函数

文章目录 1. 概述2. 泰勒公式3. 雅可比矩阵4. 经典牛顿法4.1 经典牛顿法理论4.2 牛顿迭代法解求方程根4.3 牛顿迭代法解求方程根 Python 5. 梯度下降和经典牛顿法5.1 线搜索方法5.2 经典牛顿法 6. 凸优化问题6.1 约束问题6.1 凸集组合 Mit麻省理工教授视频如下&#xff1a;逐步…...

SpringCloudAlibaba Nacos配置中心与服务发现

目录 1.配置 1.1配置的特点 只读 伴随应用的整个生命周期 多种加载方式 配置需要治理 1.2配置中心 2.Nacos简介 2.1特性 服务发现与服务健康检查 动态配置管理 动态DNS服务 服务和元数据管理 3.服务发现 1.配置 应用程序在启动和运行的时候往往需要读取一些配置信…...

.NET 一款获取内网共享机器的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…...

备考美国数学竞赛AMC8和AMC10:吃透1850道真题和知识点(持续)

距离接下来的AMC8、AMC10美国数学竞赛还有几个月的时间&#xff0c;实践证明&#xff0c;做真题&#xff0c;吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。 通过做真题&#xff0c;可以帮助孩子找到真实竞赛的感觉&#xff0c;而且更加贴近比赛的内容&#xff0c;…...

旅游景区度假村展示型网站如何建设渠道品牌

景区、度假村、境外旅游几乎每天的人流量都非常高&#xff0c;还包括本地附近游等&#xff0c;对景区及度假村等固定高流量场所&#xff0c;品牌和客户赋能都是需要完善的&#xff0c;尤其是信息展示方面&#xff0c;旅游客户了解前往及查看信息等。 通过雨科平台建设景区度假…...

Python酷库之旅-第三方库Pandas(021)

目录 一、用法精讲 52、pandas.from_dummies函数 52-1、语法 52-2、参数 52-3、功能 52-4、返回值 52-5、说明 52-6、用法 52-6-1、数据准备 52-6-2、代码示例 52-6-3、结果输出 53、pandas.factorize函数 53-1、语法 53-2、参数 53-3、功能 53-4、返回值 53-…...

jvm 06 补充 OOM 和具体工具使用

1.OOM 是什么 OOM&#xff0c;全称“Out Of Memory”&#xff0c;翻译成中文就是“内存用完了”&#xff0c;来源于java.lang.OutOfMemoryError。看下关于的官方说明&#xff1a; Thrown when the Java Virtual Machine cannot allocate an object because it is out of memor…...

使用机器学习 最近邻算法(Nearest Neighbors)进行点云分析 (scikit-learn Open3D numpy)

使用 NearestNeighbors 进行点云分析 在数据分析和机器学习领域&#xff0c;最近邻算法&#xff08;Nearest Neighbors&#xff09;是一种常用的非参数方法。它广泛应用于分类、回归和聚类分析等任务。下面将介绍如何使用 scikit-learn 库中的 NearestNeighbors 类来进行点云数…...

安装jenkins最新版本初始化配置及使用JDK1.8构建项目详细讲解

导读 1.安装1.1.相关网址1.2.准备环境1.3.下载安装 2. 配置jenkins2.1.安装插件2.2.配置全局工具2.3.系统配置 3. 使用3.1.配置job3.2.构建 提示&#xff1a;如果只想看如何使用jdk1.8构建项目&#xff0c;直接看3.1即可。 1.安装 1.1.相关网址 Jenkins官网&#xff1a;https…...

微软子公司Xandr遭隐私诉讼,或面临巨额罚款

近日&#xff0c;欧洲隐私权倡导组织noyb对微软子公司Xandr提起了诉讼&#xff0c;指控其透明度不足&#xff0c;侵犯了欧盟公民的数据访问权。据指控&#xff0c;Xandr的行为涉嫌违反《通用数据保护条例》&#xff08;GFPR&#xff09;&#xff0c;因其处理信息并创建用于微目…...

【VRP】基于常春藤算法IVY求解带时间窗的车辆路径问题TWVRP,最短距离附Matlab代码

% VRP - 基于IVY算法的TWVRP最短距离求解 % 数据准备 % 假设有一组客户点的坐标和对应的时间窗信息 % 假设数据已经存储在 coordinates、timeWindows 和 demands 变量中 % 参数设置 numCustomers size(coordinates, 1); % 客户点数量 vehicleCapacity 100; % 车辆容量 numV…...

常用软件的docker compose安装

简介 Docker Compose 是 Docker 的一个工具&#xff0c;用于定义和管理多容器 Docker 应用。通过使用一个单独的 YAML 文件&#xff0c;您可以定义应用所需的所有服务&#xff0c;然后使用一个简单的命令来启动和运行这些服务。Docker Compose 非常适合于微服务架构或任何需要…...

Excel第28享:如何新建一个Excel表格

一、背景需求 小姑电话说&#xff1a;要新建一个表格&#xff0c;并实现将几个单元格进行合并的需求。 二、解决方案 1、在电脑桌面上空白地方&#xff0c;点击鼠标右键&#xff0c;在下拉的功能框中选择“XLS工作表”或“XLSX工作表”都可以&#xff0c;如下图所示。 之后&…...

计算机网络知识汇总

OSI七层模型 七层模型一般指开放系统互连参考模型&#xff0c;开放系统互连参考模型 &#xff08;Open System Interconnect 简称OSI&#xff09;&#xff0c;OSI参考模型是具有7个层次的框架&#xff0c;自底向上的7个层次分别是物理层、数据链路层、网络层、传输层、会话层、…...

数据结构——考研笔记(二)线性表的定义和线性表之顺序表

文章目录 二、线性表2.1 定义、基本操作2.1.1 知识总览2.1.2 线性表的定义2.1.3 线性表的基本操作2.1.4 知识回顾与重要考点 2.2 顺序表2.2.1 知识总览2.2.2 顺序表的定义2.2.3 顺序表的实现——静态分配2.2.4 顺序表的实现——动态分配2.2.5 知识回顾与重要考点2.2.6 顺序表的…...

quota使用

一、检查系统是否支持 grep CONFIG_QUOTA /boot/config* CONFIG_QUOTAy CONFIG_QUOTA_NETLINK_INTERFACEy # CONFIG_QUOTA_DEBUG is not set CONFIG_QUOTA_TREEy CONFIG_QUOTACTLy CONFIG_QUOTACTL_COMPATy二、安装 yum install -y quota三、配置 3.1 创建磁盘 格式一定要 …...

解决fidder小黑怪倒出JMeter文件缺失域名、请求头

解决fidder小黑怪倒出JMeter文件缺失域名、请求头 1、目录结构&#xff1a; 2、代码 coding:utf-8 Software:PyCharm Time:2024/7/10 14:02 Author:Dr.zxyimport zipfile import os import xml.etree.ElementTree as ET import re#定义信息头 headers_to_extract [Host, Conn…...

智慧城市的神经网络:Transformer模型在智能城市构建中的应用

智慧城市的神经网络&#xff1a;Transformer模型在智能城市构建中的应用 随着城市化的快速发展&#xff0c;智能城市的概念应运而生&#xff0c;旨在通过先进的信息技术提升城市管理效率和居民生活质量。Transformer模型&#xff0c;作为人工智能领域的一颗新星&#xff0c;其…...

产品经理-研发流程-敏捷开发-迭代-需求评审及产品规划(15)

敏捷开发是以用户的需求进化为核心&#xff0c;采用迭代、循序渐进的方法进行软件开发。 通俗来说&#xff0c;敏捷开发是一个软件开发流程&#xff0c;是一个采用了迭代方法的开发流程 简单来说&#xff0c;迭代就是把一个大产品拆分出一些最小的实现单位。完成不同的迭代就最…...

Ansible 安装及使用说明

方案1. 直接下载 源码包到本地后安装 ansible 下载地址&#xff1a;https://releases.ansible.com/ansible/ ansible社区: https://github.com/ansible/ansible 下载地址&#xff1a;GitHub - ansible/ansible at v2.9.0 方案2. 以腾讯的yum源说明&#xff1a;腾讯云文档…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...