控制障碍函数CBF详解(附带案例实现)

控制障碍函数CBF详解(附带案例实现)

文章目录

  • 控制障碍函数CBF详解(附带案例实现)
    • 1. Control Affine System
    • 2. Lyapunov Theory, Nagumo's Theory, Invariance Principle
    • 3. Control Lyapunov Function (CLF) and CLF-QP
    • 4. Control Barrier Function (CBF) and CBF-CLF-QP
    • 5. A Toy Example
      • 5.1 Derivation
      • 5.2 Simulation
    • Reference

1. Control Affine System

一个控制仿射系统的典型形式是

x ˙ = F ( x , u ) \dot{x} = F(x,u) x˙=F(x,u)

其中, x ∈ R n x\in \mathbb{R}^n xRn是系统的状态, u ∈ R m u\in\mathbb{R}^m uRm是系统的控制输入, F F F是Lipschitz连续的,这样就能保证给定一个初始状态 x ( t 0 ) = x 0 x(t_0)=x_0 x(t0)=x0的时候,动态系统的轨迹 x ( t ) x(t) x(t)存在且唯一。

我们通常处理的是非线性系统,那么我们可以将非线性的仿射系统写成如下的形式

x ˙ = f ( x ) + g ( x ) u \dot{x} = f(x) + g(x) u x˙=f(x)+g(x)u

其中 f : R n → R n f:\mathbb{R}^n \to \mathbb{R}^n f:RnRn是系统的漂移向量场,它描述了系统在没有控制输入时的动态行为, g : R n → R n × m g:\mathbb{R}^n\to\mathbb{R}^{n\times m} g:RnRn×m,是系统的控制向量场,它描述了系统的控制输入 u u u是如何影响系统的。

2. Lyapunov Theory, Nagumo’s Theory, Invariance Principle

Lyapunov Theory

对于系统 x ˙ = f ( x ) \dot{x}=f(x) x˙=f(x)而言, x ∈ R n x\in \mathbb{R}^n xRn是系统的状态, f : R n → R n f:\mathbb{R}^n \to \mathbb{R}^n f:RnRn是一个系统状态的映射函数。如果

∃ V ( x ) s.t.  V ( x e ) = 0 , V ( x ) > 0  for  x ≠ x e , V ˙ ( x ) = ∂ V ∂ x f ( x ) < 0  for  x ≠ x e \exists V(x) \\ \text{s.t. } V(x_e) = 0, V(x)>0 \text{ for } x \ne x_e, \\ \dot{V}(x) = \frac{\partial V}{\partial x} f(x) < 0 \text{ for } x\ne x_e V(x)s.t. V(xe)=0,V(x)>0 for x=xe,V˙(x)=xVf(x)<0 for x=xe

那么系统则是稳定的。并且状态 x x x所构成的集合,可以被称为是一个不变集(Invariance set)。

不变集合: 集合 C \mathcal{C} C被称为不变的,如果系统从 C \mathcal{C} C内的任意一点开始演化,那么系统的轨迹始终停留在 C \mathcal{C} C内。

Nagumo’s Theory

对于系统 x ˙ = f ( x ) \dot{x} = f(x) x˙=f(x)而言, x ∈ R n x\in \mathbb{R}^n xRn是系统的状态, C = { x ∣ h ( x ) ≥ 0 } \mathcal{C}=\{x|h(x)\ge0\} C={xh(x)0}是映射 h : R n → R h:\mathbb{R}^n \to \mathbb{R} h:RnR的一个上水平集,如果

h ˙ ( x ) ≥ 0 ∀ x ∈ ∂ C \dot{h}(x) \ge 0 \\ \forall x\in\partial\mathcal{C} h˙(x)0xC

那么 C \mathcal{C} C是一个不变集。符号的具体含义如下:

C = { x ∈ D ⊂ R n : h ( x ) ≥ 0 } , ∂ C = { x ∈ D ⊂ R n : h ( x ) = 0 } , Int ( C ) = { x ∈ D ⊂ R n : h ( x ) > 0 } , \begin{align*} \mathcal{C} & = \{ x\in D\sub \mathbb{R}^n: h(x) \ge 0 \}, \\ \partial\mathcal{C} & = \{ x\in D\sub \mathbb{R}^n: h(x) = 0 \}, \\ \text{Int}(\mathcal{C}) & = \{ x\in D\sub \mathbb{R}^n: h(x) > 0 \}, \end{align*} CCInt(C)={xDRn:h(x)0},={xDRn:h(x)=0},={xDRn:h(x)>0},

集合 C \mathcal{C} C是安全集, ∂ C \partial\mathcal{C} C是安全集的边界, Int ( C ) \text{Int}(\mathcal{C}) Int(C)是安全集的内部点。

3. Control Lyapunov Function (CLF) and CLF-QP

Control Lyapunov Function

V ( x ) : R n → R V(x):\mathbb{R}^n \to \mathbb{R} V(x):RnR是一个连续可微的函数,如果这里存在一个常量 c > 0 c>0 c>0使得

1)  Ω c : = { x ∈ R n : V ( x ) ≤ c } ,  a sublevel set of  V ( x )  is bounded 2)  V ( x ) > 0 , ∀ s ∈ R n \ { x e } , V ( x e ) = 0 3)  inf ⁡ u ∈ U V ˙ ( x , u ) < 0 , ∀ x ∈ Ω c \ { x e } \begin{align*} & \text{1) }\Omega_c := \{ x\in\mathbb{R}^n: V(x) \le c\}, \text{ a sublevel set of } V(x) \text{ is bounded} \\ & \text{2) }V(x) > 0, \forall s \in\mathbb{R}^n \backslash \{x_e\}, V(x_e) = 0 \\ & \text{3) }\inf_{u\in U} \dot{V}(x,u) < 0, \forall x \in \Omega_c \backslash \{x_e\} \end{align*} 1) Ωc:={xRn:V(x)c}, a sublevel set of V(x) is bounded2) V(x)>0,sRn\{xe},V(xe)=03) uUinfV˙(x,u)<0,xΩc\{xe}

1)存在一个子集,使得 V ( x ) ≤ c V(x)\le c V(x)c是有界的

2)Lyapunov函数不在原点时大于零,在原点时等于零

3)对于控制量和系统状态来说,总使得 V ( x ) V(x) V(x)的导数 V ˙ ( x ) \dot{V}(x) V˙(x)小于零。

其中, V ( x ) V(x) V(x)可以被称为局部控制李雅普诺夫函数, Ω c \Omega_c Ωc是一个引力区(Region of Attraction, ROA), Ω c \Omega_c Ωc中的每一个点都会收敛到 x e x_e xe,整个轨迹就如下图所示,会一直保持在这个区域内,并且最终收敛到 x e x_e xe,这其实就是一种渐进稳定。

Image

我们可以将导数显示地写出来

V ˙ ( x ) = ∇ V ( x ) x ˙ = ∇ V ( x ) f ( x ) + ∇ V ( x ) g ( x ) u = L f V ( x ) + L g V ( x ) u \begin{align*} \dot{V}(x) & = \nabla V(x) \dot{x} \\ & = \nabla V(x)f(x) + \nabla V(x)g(x)u \\ & = L_fV(x) + L_g V(x) u \end{align*} V˙(x)=V(x)x˙=V(x)f(x)+V(x)g(x)u=LfV(x)+LgV(x)u

其中 L p q ( x ) = ∇ q ( x ) ⋅ p ( x ) L_p q(x) = \nabla q(x) \cdot p(x) Lpq(x)=q(x)p(x)是李导数算子,使得公式更加简洁。

为了使收敛更加迅速,我们需要考虑收敛的时间限制,指数收敛是一种快速的方式,所以我们希望最终的结果能够按照指数的方式进行收敛。

我们可以增加一个判断条件,设 V ( x ) : R n → R V(x):\mathbb{R}^n \to \mathbb{R} V(x):RnR是连续可微、正定、有界的函数,如果 ∃ λ > 0 \exists \lambda>0 λ>0使得

4)  inf ⁡ u ∈ U V ˙ ( x , u ) + λ V ( x ) ≤ 0 \text{4) }\inf_{u\in U} \dot{V}(x,u) + \lambda V(x) \le 0 4) uUinfV˙(x,u)+λV(x)0

或者写成

inf ⁡ u ∈ U [ L f V ( x ) + L g V ( x ) u ] + λ V ( x ) ≤ 0 \inf_{u\in U} [L_f V(x) + L_gV(x)u] + \lambda V(x) \le 0 uUinf[LfV(x)+LgV(x)u]+λV(x)0

那么 V ( x ) V(x) V(x)就是指数稳定的控制李雅普诺夫函数(exponentially stabilizing CLF,ES-CLF),其中 λ \lambda λ V ( x ( t ) ) V(x(t)) V(x(t))上界的衰减率。

Image

Control Lyapunov Function Quadratic Program

Image

CLF约束对于 u u u是线性的,因此用最小范数控制器,二次规划的目标位最小化控制量,受限制为,满足李雅普诺夫函数收敛的上界以及控制量 u u u在解集内。由于这个优化为一个凸优化问题,因此其实时性是可以被保证的,CLF约束通常用松弛变量来保证问题的可行性,如果没有松弛变量,控制器将指数稳定到系统原点 x e x_e xe

4. Control Barrier Function (CBF) and CBF-CLF-QP

B ( x ) : R n → R B(x):\mathbb{R}^n \to \mathbb{R} B(x):RnR是连续、可微的函数, C = { x ∣ B ( x ) ≥ 0 } \mathcal{C}=\{x|B(x)\ge 0\} C={xB(x)0}是该函数的零上水平集,并且 ∇ B ( x ) ≠ 0 , ∀ x ∈ ∂ C \nabla B(x)\ne 0,\forall x\in\partial\mathcal{C} B(x)=0,xC,如果 ∃ γ \exists \gamma γ使得 ∀ x ∈ C \forall x\in\mathcal{C} xC

sup ⁡ u ∈ U [ L f B ( x ) + L g B ( x ) u ] + γ B ( x ) ≥ 0 \sup_{u \in U}[L_fB(x) + L_g B(x)u] + \gamma B(x) \ge 0 uUsup[LfB(x)+LgB(x)u]+γB(x)0

那么 B ( x ) B(x) B(x)就被称作Control Barrier Function

Image

因此这个二次规划问题就变成了

Image

5. A Toy Example

我们考虑一个简单的例子,在这个例子中有两辆车辆,分别是lead vehicleego vehicle,如下图所示

Image

下面我们先推导一下,然后再进行仿真验证。

5.1 Derivation

设计我们的状态量为: x = [ p , v , z ] T ∈ R 3 x = [p, v, z]^T \in \mathbb{R}^3 x=[p,v,z]TR3,系统的微分方程为:

{ p ˙ = v v ˙ = u − F r ( v ) m , F r ( v ) = f 0 + f 1 v + f 2 v 2 z ˙ = v 0 − v \left\{ \begin{align*} \dot{p} & = v \\ \dot{v} & = \frac{u - F_r(v)}{m}, \quad F_r(v) = f_0 + f_1 v + f_2 v^2 \\ \dot{z} & = v_0 - v \end{align*} \right. p˙v˙z˙=v=muFr(v),Fr(v)=f0+f1v+f2v2=v0v

其中F_r(v)是摩擦力,将微分方程写成矩阵的形式

x ˙ = [ p ˙ v ˙ z ˙ ] = [ v − 1 m F r ( v ) v 0 − v ] + [ 0 1 m 0 ] u \dot{x} = \begin{bmatrix} \dot{p} \\ \dot{v} \\ \dot{z} \\ \end{bmatrix} = \begin{bmatrix} v \\ -\frac{1}{m} F_r(v) \\ v_0 - v \end{bmatrix} + \begin{bmatrix} 0 \\ \frac{1}{m} \\ 0 \end{bmatrix} u x˙= p˙v˙z˙ = vm1Fr(v)v0v + 0m10 u

为了保障系统的安全性,给系统的输入做如下的限制

− m c d g ≤ u ≤ m c a g -mc_dg \le u \le mc_ag mcdgumcag

ego vehicle的目标速度为

v → v d v \to v_d vvd

最小安全距离必须满足时间前瞻量的限制 T h T_h Th

z ≥ T h v z \ge T_h v zThv

系统的平衡点 x e = [ ⋅ , v d , ⋅ ] T x_e = [\cdot, v_d, \cdot]^T xe=[,vd,]T设计Lyapunov Function V ( x ) V(x) V(x)

V ( x ) = ( v − v d ) 2 V ˙ ( x ) = ∇ V ( x ) x ˙ \begin{align*} V(x) & = (v - v_d)^2 \\ \dot{V}(x) & = \nabla V(x) \dot{x} \\ \end{align*} V(x)V˙(x)=(vvd)2=V(x)x˙

其中

∇ V ( x ) = [ 0 , 2 ( v − v d ) , 0 ] x ˙ = [ v − 1 m F r ( v ) v 0 − v ] + [ 0 1 m 0 ] u \nabla V(x) = [0, 2(v-v_d), 0] \\ \dot{x} = \begin{bmatrix} v \\ -\frac{1}{m} F_r(v) \\ v_0 - v \end{bmatrix} + \begin{bmatrix} 0 \\ \frac{1}{m} \\ 0 \end{bmatrix}u V(x)=[0,2(vvd),0]x˙= vm1Fr(v)v0v + 0m10 u

然后我们可以获得

L f V ( x ) = − 2 m F r ( v ) ( v − v d ) L g V ( x ) = 2 m ( v − v d ) L_f V(x) = -\frac{2}{m} F_r(v)(v-v_d) \\ L_g V(x) = \frac{2}{m} (v-v_d) LfV(x)=m2Fr(v)(vvd)LgV(x)=m2(vvd)

所以CLF的约束 inf ⁡ u ∈ U [ L f V ( x ) + L g V ( x ) u ] + λ V ( x ) ≤ 0 \inf_{u\in U} \quad[L_f V(x) + L_g V(x)u] + \lambda V(x) \le 0 infuU[LfV(x)+LgV(x)u]+λV(x)0可以表示为

inf ⁡ u ∈ U ( v − v d ) [ 2 m ( u − F r ) + λ ( v − v d ) ] ≤ 0 \inf_{u\in U} \quad(v-v_d) [\frac{2}{m} (u-F_r) + \lambda (v-v_d)] \le 0 uUinf(vvd)[m2(uFr)+λ(vvd)]0

保障安全性的目标是 z ≥ T h V z\ge T_h V zThV,则设计CBF

B ( x ) = z − T h V B(x) = z - T_h V B(x)=zThV

则有

∇ B ( x ) = [ 0 , − T h , 1 ] L f B ( x ) = T h m F r + ( v 0 − v ) , L g B ( x ) = − T h m \nabla B(x) = [0, -T_h, 1] \\ L_f B(x) = \frac{T_h}{m} F_r + (v_0 - v), \quad L_g B(x) = -\frac{T_h}{m} B(x)=[0,Th,1]LfB(x)=mThFr+(v0v),LgB(x)=mTh

所以CBF的约束 sup ⁡ u ∈ U [ L f B ( x ) + L g B ( x ) u ] + γ B ( x ) ≥ 0 \sup_{u\in U} \quad [L_f B(x) + L_g B(x)u] + \gamma B(x) \ge 0 supuU[LfB(x)+LgB(x)u]+γB(x)0 可以表示为

T h m ( F r − u ) + ( v 0 − v ) + γ ( z − T h v ) ≥ 0 \frac{T_h}{m}(F_r - u) + (v_0 - v) + \gamma (z - T_h v) \ge 0 mTh(Fru)+(v0v)+γ(zThv)0

忽略 F r F_r Fr,当 u = − m c d g u=-mc_dg u=mcdg的时候,CBF的约束可以表示为

T h c d g + v 0 + γ z − ( 1 + T h γ ) v T_h c_d g + v_0 + \gamma z - (1+T_h \gamma)v Thcdg+v0+γz(1+Thγ)v

v v v足够大的时候,可能会导致CBF的约束小于0,所以我们需要重新设计CBF

B ( x ) = z − T h v − 1 2 ( v − v 0 ) 2 c d g B(x) = z - T_hv - \textcolor{blue}{\frac{1}{2} \frac{(v-v_0)^2}{c_dg}} B(x)=zThv21cdg(vv0)2

则有

B ˙ ( x , u ) = 1 m ( T h + v − v 0 c d g ) ( F r ( v ) − u ) + ( v 0 − v ) \dot{B}(x,u) = \frac{1}{m} (T_h + \textcolor{blue}{\frac{v-v_0}{c_dg}})(F_r(v) - u) + (v_0 - v) B˙(x,u)=m1(Th+cdgvv0)(Fr(v)u)+(v0v)

u = − m c d g u=-mc_dg u=mcdg的时候, B ˙ ( x , u ) = 1 m T h F r + T h c d g > 0 \dot{B}(x,u) = \frac{1}{m}T_h F_r + T_h c_dg > 0 B˙(x,u)=m1ThFr+Thcdg>0,所以此CBF是一个可行的CBF,那么我们最终获得的CLF-CBF-QP为

arg ⁡ min ⁡ u T H u s.t. ( v − v d ) [ 2 m ( u − F r ) + λ ( v − v d ) ] ≤ 0 1 m ( T h + ( v − v 0 ) c d g ) ( F r − u ) + ( v 0 − v ) + γ ( z − T h v ) ≥ 0 − m c d g ≤ u ≤ m c a g \begin{align*} \arg\min & \quad u^T Hu \\ \text{s.t.} & \quad (v-v_d)[\frac{2}{m}(u-F_r) + \lambda(v-v_d)] \le 0 \\ & \quad \frac{1}{m}(T_h + \frac{(v-v_0)}{c_d g})(F_r - u) + (v_0 - v) + \gamma (z - T_h v) \ge 0 \\ & \quad -m c_d g \le u \le m c_a g \end{align*} argmins.t.uTHu(vvd)[m2(uFr)+λ(vvd)]0m1(Th+cdg(vv0))(Fru)+(v0v)+γ(zThv)0mcdgumcag

5.2 Simulation

使用python来编写脚本代码,使用cvxopt凸优化的库来进行求解,具体可以参考cvxopt的wiki官网。

import numpy as np
import matplotlib.pyplot as plt
from cvxopt import matrix, solvers

# Simulation parameters
dt = 0.02
T = 30
length = int(np.ceil(T / dt))

# System initialization
p = np.zeros((length + 1, 1))
v = np.zeros((length + 1, 1))
z = np.zeros((length + 1, 1))
u = np.zeros((length, 1))

sys = {
    'm': 1650,
    'g': 9.81,
    'v0': 14,
    'vd': 24,
    'f0': 0.1,
    'f1': 5,
    'f2': 0.25,
    'ca': 0.3,
    'cd': 0.3,
    'T': 1.8,
    'clf_rate': 5,
    'cbf_rate': 5,
    'weight_input': 2 / 1650**2,
    'weight_slack': 2e-2
}

sys['u_max'] = sys['ca'] * sys['m'] * sys['g']
sys['u_min'] = -sys['cd'] * sys['m'] * sys['g']

# Initial conditions
p[0] = 0
v[0] = 10
z[0] = 100

# Simulation loop
for i in range(length):
    current_p = p[i, 0]
    current_v = v[i, 0]
    current_z = z[i, 0]
    x = np.array([current_p, current_v, current_z])
    
    F_r = sys['f0'] + sys['f1'] * current_v + sys['f2'] * current_v**2
    f = np.array([current_v, -F_r / sys['m'], sys['v0'] - current_v])
    g = np.array([0, 1 / sys['m'], 0])

    V = (current_v - sys['vd'])**2
    dV = np.array([0, 2 * (current_v - sys['vd']), 0])
    LfV = np.dot(dV, f)
    LgV = np.dot(dV, g)
    B = current_z - sys['T'] * current_v - 0.5 * (current_v - sys['v0'])**2 / (sys['cd'] * sys['g'])
    dB = np.array([0, -sys['T'] - (current_v - sys['v0']) / (sys['cd'] * sys['g']), 0])
    LfB = np.dot(dB, f)
    LgB = np.dot(dB, g)

    # Quadratic program
    H_ = np.array([[sys['weight_input'], 0],
                   [0, sys['weight_slack']]])
    f_ = np.array([-sys['weight_input'] * F_r, 0])
    
    A_ = np.array([[LgV, -1], 
                   [-LgB, 0],
                   [1, 0],
                   [-1, 0]])
    b_ = np.array([-LfV - sys['clf_rate'] * V, 
                   LfB + sys['cbf_rate'] * B,
                   sys['u_max'],
                   -sys['u_min']])
    
    # Convert to cvxopt format
    P = matrix(H_)
    q = matrix(f_)
    G = matrix(A_)
    h = matrix(b_)

    # Solve QP problem using cvxopt
    sol = solvers.qp(P, q, G, h)
    u_opt = sol['x'][0] # Second term is the slack variable

    dx = f + g * u_opt
    x_n = x + dx * dt

    # Save data
    u[i, 0] = u_opt
    if i < length:
        p[i + 1, 0] = x_n[0]
        v[i + 1, 0] = x_n[1]
        z[i + 1, 0] = x_n[2]

# Plotting
time = np.arange(0, T + dt, dt)

plt.figure(figsize=(10, 8))
plt.subplot(4, 1, 1)
plt.plot(time, p)
plt.ylabel('p')

plt.subplot(4, 1, 2)
plt.plot(time, v)
plt.ylabel('v')

plt.subplot(4, 1, 3)
plt.plot(time, z)
plt.ylabel('z')

plt.subplot(4, 1, 4)
plt.plot(time[:-1], u)
plt.ylabel('u')

plt.xlabel('Time (s)')
plt.tight_layout()
plt.show()

最后的结果如下

Image

Reference

[1]Jason Choi – Introduction to Control Lyapunov Functions and Control Barrier Functions
[2]CBF-CLF-Helper

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/667966.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx实战:LUA脚本_环境配置安装

目录 一、什么是LUA脚本 二、Nginx中的LUA脚本 1、主要特点 2、用途 三、如何在nginx中使用LUA脚本 1、原生nginx 2、OpenResty 3、nginx lua配置验证 一、什么是LUA脚本 Nginx Lua 脚本是 Nginx 与 Lua 语言集成的结果&#xff0c;它允许你使用 Lua 语言编写Nginx 模块…

521源码-源码下载-个人网盘源码2024最新web网盘系统源码一键安装版源码分享

主要功能&#xff1a; 1.支持用户管理系统。支持用户注册功能&#xff08;后台可关闭&#xff09;&#xff0c;管理可为每个用户分配一定数额的存储空间&#xff0c;还可以限制单个上传文件大小。 2.支持管理员查看每个会员的文件上传、分享情况&#xff0c;可对用户文件进行删…

YOLOv8 多种任务网络结构详细解析 | 目标检测、实例分割、人体关键点检测、图像分类

前言 本文仅根据模型的预测过程&#xff0c;即从输入图像到输出结果&#xff08;图像预处理、模型推理、后处理&#xff09;&#xff0c;来展现不同任务下的网络结构&#xff0c;OBB 任务暂不包含。 Backbone 1. yolov8m 2. yolov8m-p2 3. yolov8m-p6 4. 细节 图中 CBS Con…

2024 HN CTF WebMisc 部分 wp

Web ez_tp 判断是thinkphp 3.2 参考官方手册:https://www.kancloud.cn/manual/thinkphp/1697 判断路由模式 URL_CASE_INSENSITIVE > true, // 默认false 表示URL区分大小写 true则表示不区分大小写URL_MODEL > 1, // URL访问模式,可选参数0、1、…

【Linux-buildroot,】

Linux-buildroot, ■ buildroot■ 1、简介■ 2、下载■ 2、编译■ 问题一&#xff1a;buildroot 编译的时候会先从网上下载所需的软件源码&#xff0c;下载cmake-3.8.2.tar.gz或下载很慢的情况 ■ buildroot-构建根文件系统■ 1、配置 buildroot■ 2、■ 3、 ■ buildroot-构建…

velero实现备份还原

Velero 是一个开源的 Kubernetes 集群备份和恢复工具&#xff0c;它允许用户轻松安全地备份和恢复他们的 Kubernetes 资源和持久化卷。Velero 由 Kubernetes 的原生 API 驱动&#xff0c;并且与云服务提供商紧密集成&#xff0c;以支持不同的存储解决方案。 helm values文件地…

驾校无线监控系统:实现智能化、数字化与网络化的新篇章

随着科技的飞速发展&#xff0c;无线监控系统在各行各业的应用日益广泛。在驾校领域&#xff0c;无线监控系统的引入不仅提升了学员的学习体验&#xff0c;还显著提高了驾校的管理效率和综合水平。本文将详细探讨驾校无线监控系统的功能、优势及其在提升驾校管理水平方面的具体…

如何看待时间序列与机器学习?

GPT-4o 时间序列与机器学习的关联在于&#xff0c;时间序列数据是一种重要的结构化数据形式&#xff0c;而机器学习则是一种强大的工具&#xff0c;用于从数据中提取有用的模式和信息。在很多实际应用中&#xff0c;时间序列与机器学习可以结合起来&#xff0c;发挥重要作用。…

考研回顾纪录--科软考研失败并调剂兰州大学软件工程专业复试经历

1.背景 本人工作一年后决定考研&#xff0c;遂于2023年4月底离职。5月到家后开始学习。本科东北大学软件工程专业&#xff0c;绩点3.2/5&#xff0c;按照百分制计算是82分。本科纯属混子&#xff0c;只有一个四级551&#xff0c;一个数学竞赛省二等奖&#xff0c;大创学校立项…

Pytorch-Lighting使用教程(MNIST为例)

一、pytorch-lighting简介 1.1 pytorch-lighting是什么 pytorch-lighting&#xff08;简称pl&#xff09;&#xff0c;基于 PyTorch 的框架。它的核心思想是&#xff0c;将学术代码&#xff08;模型定义、前向 / 反向、优化器、验证等&#xff09;与工程代码&#xff08;for-…

Java大厂面试题第2季

一、本课程前提要求和说明 面试题1&#xff1a; 面试题2&#xff1a; 面试题3&#xff1a; 面试题4&#xff1a; 面试题5&#xff1a; 高频最多的常见笔试面试题目 ArrayList HashMap 底层是什么东东 JVM/GC 多线程与高并发 java集合类

移动系统编程-Ionic 页面(Ionic Pages)

Ionic 页面 Ionic 应用程序和大多数移动应用程序使用页面来利用小显示区域。Ionic 源代码结构中&#xff0c;每个页面都在一个单独的目录中&#xff0c;以便将页面的所有信息集中在一起。例如&#xff0c;tabs 启动应用程序在 app 目录中的目录结构如下。请看是否能看到与 Angu…

米博无布洗地机:颠覆清洁体验,引领家庭清洁风尚

在科技日新月异的今天&#xff0c;家庭清洁方式也正在经历着一场翻天覆地的变化。 传统洗地机的诸多痛点 传统的洗地机虽然在一定程度上解放了人们的双手&#xff0c;然而其存在的诸多问题与痛点也随着时间流逝而逐渐凸显&#xff0c;成为了越来越多消费者心中的困扰。 传统洗地…

css网格背景样式

空白内容效果图 在百度页面测试效果 ER图效果 注意&#xff1a;要给div一个宽高 <template><div class"grid-bg"></div> </template><style scoped> .grid-bg {width: 100%;height: 100%;background: url(data:image/svgxml;base…

深入浅出Java多线程

系列文章目录 文章目录 系列文章目录前言一、多线程基础概念介绍线程的状态转换图线程的调度一些常见问题 二、Java 中线程的常用方法介绍Java语言对线程的支持Thread常用的方法三、线程初体验&#xff08;编码示例&#xff09; 前言 前些天发现了一个巨牛的人工智能学习网站&…

LeeCode热题100(爬楼梯)

爬楼梯这个题我断断续续看了不下5遍&#xff0c;哪次看都是懵逼的&#xff0c;就会说是满足动态规划&#xff0c;满足斐波那契数列&#xff0c;也不说为什么。 本文一定让你明白怎么分析这个题的规律&#xff08;利用数学的递推思想来分析&#xff09;&#xff0c;看不懂来打我…

SleepFM:利用对比学习预训练的多模态“睡眠”基础模型

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在阅读过程中有些知识点存在盲区&#xff0c;可以回到如何优雅的谈论大模型重新阅读。另外斯坦福2024人工智能报告解读为通识性读物。若对于如果…

Go微服务: 封装nacos-sdk-go的v2版本与应用

概述 基于前文&#xff1a;https://active.blog.csdn.net/article/details/139213323我们基于此SDK提供的API封装一个公共方法来用于生产环境 封装 nacos-sdk-go 我们封装一个 nacos.go 文件, 这个是通用的工具库 package commonimport ("fmt""github.com/nac…

如何查看谁连接到了你的Wi-Fi网络?这里提供几种方法或工具

序言 你知道谁连接到你路由器的Wi-Fi网络吗?查看从路由器或计算机连接到Wi-Fi网络的设备列表,找出答案。 请记住,现在很多设备都可以连接到了你的Wi-Fi,该名单包括笔记本电脑、智能手机、平板电脑、智能电视、机顶盒、游戏机、Wi-Fi打印机等。 使用GlassWire Pro查看连接…

蒙自源六一童趣献礼:纯真餐单,唤醒你的童年味蕾

当岁月的车轮滚滚向前&#xff0c;我们总会怀念那些逝去的时光&#xff0c;尤其是那段纯真无瑕的童年。当六一儿童节来临&#xff0c;心底的那份童趣与回忆总会被轻轻触动。从5月25日起&#xff0c;蒙自源旗下各大门店为所有小朋友&#xff0c;以及那些心怀童真的大人们&#x…