机器人中的数值优化(九)——拟牛顿方法(下)、BB方法

   本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例



   (3)BFGS公式

   ① 严格凸函数的BFGS方法

   BFGS公式或者说 BFGS方法是 Broyden、Fletcher、Gold-farb和Shanno分别独立提出来的。

   B k + 1 B F G S = B k + y k y k T y k T s k − B k s k s k T B k s k T B k s k . B_{k+1}^{\mathrm{BFGS}}=B_k+\frac{y_ky_k^{\mathrm{T}}}{y_k^{\mathrm{T}}s_k}-\frac{B_k s_k s_k^{\mathrm{T}}B_k}{s_k^{\mathrm{T}}B_k s_k}. Bk+1BFGS=Bk+ykTskykykTskTBkskBkskskTBk.

   采用 BFGS公式来修正矩阵的拟 Newton方法称为 BFGS方法。假定 B k + 1 B F G S B_{k+1}^{\mathrm{BFGS}} Bk+1BFGS B k B F G S B_{k}^{\mathrm{BFGS}} BkBFGS都可逆。根据Shermann-Morrison-Woodbury公式,由上式可导出 H k H_k Hk的修正公式

   H k + 1 B F G S = H k + ( 1 + y k T H k y k y k T s k ) s k s k T y k T s k − ( s k y k T H k + H k y k s k T y k T s k ) . H_{k+1}^{\mathrm{BFGS}}=H_k+\left(1+\dfrac{y_k^{\mathrm{T}}H_k y_k}{y_k^{\mathrm{T}}s_k}\right)\dfrac{s_k s_k^{\mathrm{T}}}{y_k^{\mathrm{T}}s_k}-\left(\dfrac{s_k y_k^{\mathrm{T}}H_k+H_k y_k s_k^{\mathrm{T}}}{y_k^{\mathrm{T}}s_k}\right). Hk+1BFGS=Hk+(1+ykTskykTHkyk)ykTskskskT(ykTskskykTHk+HkykskT).


   通过观察可知,分别将DFP方法的 H k + 1 D F P H_{k+1}^{\mathrm{DFP}} Hk+1DFP公式和 B k + 1 D F P B_{k+1}^{\mathrm{DFP}} Bk+1DFP公式中的 B k B_k Bk H k H_k Hk对换, s k s_k sk y k y_k yk对换就可以得到 BFGS方法的 B k + 1 B F G S B_{k+1}^{\mathrm{BFGS}} Bk+1BFGS H k + 1 B F G S H_{k+1}^{\mathrm{BFGS}} Hk+1BFGS公式。因而 BFGS方法与DFP方法是互为对偶的方法,而 SR1方法为自对偶的方法。


   上式也可写成如下形式:

   H k + 1 B F G S = ( I − Δ x Δ g T Δ g T Δ x ) H k ( I − Δ g Δ x T Δ g T Δ x ) + Δ x Δ x T Δ g T Δ x H_{k+1}^{\mathrm{BFGS}}=\left(I-\dfrac{\Delta x\Delta g^T}{\Delta g^T\Delta x}\right)H_k\left(I-\dfrac{\Delta g\Delta x^T}{\Delta g^T\Delta x}\right)+\dfrac{\Delta x\Delta x^T}{\Delta g^T\Delta x} Hk+1BFGS=(IΔgTΔxΔxΔgT)Hk(IΔgTΔxΔgΔxT)+ΔgTΔxΔxΔxT

   其中, H 0 = I , Δ x = x k + 1 − x k , Δ g = ∇ f ( x k + 1 ) − ∇ f ( x k ) \begin{aligned}H_0=I,\Delta x=x^{k+1}-x^k,\Delta g=\nabla f\bigl(x^{k+1}\bigr)-\nabla f\bigl(x^k\bigr)\end{aligned} H0=I,Δx=xk+1xk,Δg=f(xk+1)f(xk)

   H 0 H_0 H0初始化为单位阵是正定的,若 Δ g T Δ x > 0 \Delta g^T\Delta x>0 ΔgTΔx>0,则当 H i H_i Hi正定时,由上式得到的 H i + 1 H_{i+1} Hi+1也正定。即当 Δ g T Δ x > 0 \Delta g^T\Delta x>0 ΔgTΔx>0时可以保证,迭代中的 H i H_i Hi正定都是(严格)正定的。


   下图中的例子对牛顿法和采用BFGS方法的拟牛顿法进行了比较,虽然牛顿法的迭代速度更快,但其复杂度高为 n 3 n^3 n3,图中例子的维度为100,迭代次数为12,可用12x 10 0 3 100^3 1003=12000000来评价,同理BFGS可用150x 10 0 2 100^2 1002=1500000来评价,因此可以认为在下面的例子中BFGS的综合效果更好。


   上述采用Armijo搜索准则,利用BFGS方法的拟牛顿法仅适合于严格凸函数,它存在以下的缺陷:

   ①严格梯度单调性在一般情况下不成立

   ②曲率信息远未达到最优,在较远的地方可能有负曲率

   ③迭代代价为二次型,计算复杂度为 n 2 n^2 n2

   ④对非凸函数的适用性尚待验证

   ⑤对非光滑函数的适用性尚待验证

在这里插入图片描述

   ② 可能非凸函数的BFGS方法

   上文中提到当 Δ g T Δ x > 0 \Delta g^T\Delta x>0 ΔgTΔx>0时可以保证,迭代中的 H i H_i Hi正定都是(严格)正定的,当线搜索满足Wolfe准则时,必有 Δ g T Δ x > 0 \Delta g^T\Delta x>0 ΔgTΔx>0成立,所以当线搜索满足Wolfe准则时,迭代中的 H i H_i Hi正定都是(严格)正定的,即可以保证迭代方向是下降方向。

在这里插入图片描述
   针对非凸函数,Wolfe条件不能保证BFGS的收敛性,即不能保证一定收敛到最优解,若下述cautious update(Li and Fukushima 2001)条件满足,则可保证

   H k + 1 = { ( I − Δ x Δ g T Δ g T Δ x ) H k ( I − Δ g Δ x T Δ g T Δ x ) + Δ x Δ x T Δ g T Δ x if Δ g T Δ x > ϵ ∣ ∣ g k ∣ ∣ Δ x T Δ x , ϵ = 1 0 − 6 H k otherwise H_{k+1}=\begin{cases}\left(I-\dfrac{\Delta x\Delta g^T}{\Delta g^T\Delta x}\right)H_k\left(I-\dfrac{\Delta g\Delta x^T}{\Delta g^T\Delta x}\right)+\dfrac{\Delta x\Delta x^T}{\Delta g^T\Delta x}\quad\text{if}\Delta g^T\Delta x>\epsilon||g_k||\Delta x^T\Delta x,\epsilon=10^{-6}\\ H_k\quad\text{otherwise}\end{cases} Hk+1= (IΔgTΔxΔxΔgT)Hk(IΔgTΔxΔgΔxT)+ΔgTΔxΔxΔxTifΔgTΔx>ϵ∣∣gk∣∣ΔxTΔx,ϵ=106Hkotherwise

   但是BFGS本身的特性导致其发散的情况一般都在优化的初期,一般发生在前10步或者前50步,BFGS自身的优良稳定性使其在靠近局部极小值的附件时几乎一定会满足上述cautious update(Li and Fukushima 2001)条件,所以不需要加上以上条件就可以让BFGS较好的收敛,所以在工程上即使不加以上条件也是挺稳定的,一些优化库中也没有加以上条件,当然加上会使算法更稳定。


   下面的例子中对上述BFGS方法与牛顿法进行了比较,结果表明上述BFGS方法是一种很有效的拟牛顿算法

在这里插入图片描述


   ③ L-BFGS方法

   我们拿BFGS去迭代更新,它始终会保留所有历史的 Δ x \Delta x Δx Δ g \Delta g Δg的信息,但这样并不是必要的,迭代次数足够长以后得到的H阵是一个稠密的阵,不能将复杂度从O( n 2 n^2 n2)降到O( n n n),并不是所有的历史数据都有用,所以可以设置一个限制,丢弃掉太老的信息,使其仅使用最近m次的 Δ x \Delta x Δx Δ g \Delta g Δg信息。

在这里插入图片描述

   因此,我们可以维护一个历史的滑动窗口,长度为m+1个x和m+1个g,即m对 Δ x \Delta x Δx Δ g \Delta g Δg,为方便描述就像前文那样将 Δ x \Delta x Δx Δ g \Delta g Δg分别用 s k s_k sk y k y_k yk表示,即储存从 s k − m + 1 s_{k-m+1} skm+1 y k − m + 1 y_{k-m+1} ykm+1 s k s_{k} sk y k y_{k} yk的m组数据,在计算当前 H k H_k Hk时,先初始化 H 0 H_0 H0为单位阵 I I I,然后从滑动窗口初始处 s k − m + 1 s_{k-m+1} skm+1 y k − m + 1 y_{k-m+1} ykm+1开始利用这m组数据进行m次迭代,得到窗口结束处 s k s_k sk y k y_k yk H m H_m Hm,即当前要求的 H k H_k Hk

   如果每次都从窗口里额外的跑一遍BFGS,本来从 H k H_k Hk H k + 1 H_{k+1} Hk+1需要迭代一次,现在需要迭代m次,时间复杂度会从O( n 2 n^2 n2)升为O( m n 2 mn^2 mn2),如下面的左图所示,然而这并不是必要的,我们采用巧妙的结构实现以上方法,如下面右图所示,而将时间复杂度降为O( m n mn mn),m是一个有限常数,因此,可以认为时间复杂度近似于O( n n n)。

在这里插入图片描述


   下面的例子对牛顿法,BFGS,L-BFGS进行了比较,L-BFGS的收敛速度近似于BFGS,但时间复杂度降为O( m n mn mn),且更加灵活,一般取m<n/2。 所以,L-BFGS几乎是高效光滑非凸优化的首选。

在这里插入图片描述


   ④ 非凸非平滑函数的BFGS方法

   如果函数是非光滑的呢?即存在以下问题

   梯度可能不存在、负次级梯度不下降、曲率可能非常大

   L-BFGS算法能不能用于非光滑函数?

在这里插入图片描述

   非凸非光滑函数的求解速度较慢,我们只期待经过有限次迭代后,可以得到解,而不会报错。

   如果直接将L-BFGS算法用于非光滑情况,强Wolfe准则会出现问题,因为,其梯度是不连续的,可能没有在0附近的梯度,使得解为空集,如下面的右图所示

在这里插入图片描述

   但是,如果使用一般的Wolfe准则,则不会有以上问题,如下图所示:


在这里插入图片描述

   针对非光滑的情况,一般不使用二次或三次拟合的方法去求合适的步长,因为,拟合效果并不理想,不能很快的收敛,我们可以采用如下的Lewis & Overton线搜索策略:

   (注:c1常取 1 0 − 4 10^{-4} 104,c2常取 0.9 0.9 0.9
在这里插入图片描述

   即初始化步长区间为【0,正无穷】,试探性初始化步长为a=1,若不满足Wolfe准则的第一个条件S(a),如假此时a位于下图中的①处,则将步长区间缩小为【0,a】,并将 a修改为区间【0,a】的中值处,进行下一次循环,直至两个条件都满足,返回步长a。若满足Wolfe准则的第一个条件,而不满足Wolfe准则的第二个条件C(a),如假设此时a位于下图中的②处,则将步长区间的下限L更改为a,并将步长扩大为2L,进行下一次循环,直至两个条件都满足,返回步长a。

   将上述搜索步长的策略用于BFGS和L-BFGS算法的效果如下所示,只要 x 0 x_0 x0处的导数存在使用Lewis & Overton线搜索策略的BFGS和L-BFGS算法几乎不可能遇到梯度不可导的点,所以他就可以正确的工作,正确的拟合。

在这里插入图片描述

   当函数的条件数很大时,BFGS和L-BFGS算法依然可以较好的收敛,如下所示:

在这里插入图片描述


   ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

   现在来汇总一下,怎样完成一个鲁棒性好,稳定性好,计算复杂度较低的拟牛顿算法:采用Lewis & Overton线搜索策略求取合适的步长,LBFGS采用滑动窗口有限内存版本的更新方式,且检查是否满足cautious update条件

在这里插入图片描述


在这里插入图片描述


   (4)Broyden族公式

   根据 H k + 1 D F P H_{k+1}^{\mathrm{DFP}} Hk+1DFP公式和 H k + 1 B F G S H_{k+1}^{\mathrm{BFGS}} Hk+1BFGS公式,可以构造出一族拟Newton方法的修正公式,我们称之为Broyden族公式

   H k + 1 φ = ( 1 − φ ) H k + 1 D F P + φ H k + 1 B F G S , H_{k+1}^{\varphi}=(1-\varphi)H_{k+1}^{\mathrm{DFP}}+\varphi H_{k+1}^{\mathrm{BFGS}}, Hk+1φ=(1φ)Hk+1DFP+φHk+1BFGS,

   其中ψ ≥ 0. DFP公式与 BFGS 公式均是 Broyden族公式的特殊情形,分别对应于ψ= 0与ψ = 1.通常将用Broyden族公式来修正矩阵的拟Newton方法称为 Broyden族方法.这一族方法有许多共同的性质,故可以作为一个整体进行讨论.

   我们还可以把上式写如下的形式:

   H k + 1 φ = H k + 1 D F P + φ ( H k + 1 B F G S − H k + 1 D F P ) = H k + 1 D F P + φ v k v k T , \begin{array}{c}H_{k+1}^{\varphi}=H_{k+1}^{\mathrm{DFP}}+\varphi\big(H_{k+1}^{\mathrm{BFGS}}-H_{k+1}^{\mathrm{DFP}}\big)\\ =H_{k+1}^{\mathrm{DFP}}+\varphi v_k v_k^{\mathrm{T}},\end{array} Hk+1φ=Hk+1DFP+φ(Hk+1BFGSHk+1DFP)=Hk+1DFP+φvkvkT,

   其中:

   v k = ( y k T H k y k ) 1 / 2 ( s k s k T y k − H k y k y k T H k y k ) v_{k}=(y_{k}^{\mathrm{T}}H_{k}y_{k})^{1/2}\bigg(\frac{s_{k}}{s_{k}^{\mathrm{T}}y_{k}}-\frac{H_{k}y_{k}}{y_{k}^{\mathrm{T}}H_{k}y_{k}}\bigg) vk=(ykTHkyk)1/2(skTykskykTHkykHkyk)

   这表明 Broyden族公式的所有矩阵 H k + 1 φ H_{k+1}^{\varphi} Hk+1φ的差别仅在于秩1矩阵 φ v k v k T \varphi v_k v_k^{\mathrm{T}} φvkvkT



   十一、BB方法

   最速下降方法与 BB方法都是负梯度方法,它们的不同仅在于步长的选取方式.最速下降方法是一种古老的方法.许多年来,最速下降方法由于收敛速度太慢而无法受到人们的重视。1988年,Barzilai和 Borwein提出了一种新的负梯度方法,即BB方法. BB方法诞生后,人们对负梯度方法产生了浓厚的兴趣,尽管该方法尚有许多理论问题没有解决,然而依然是一种有效的负梯度方法。

   我们仅考虑用BB方法求解正定二次函数求极小值的问题,如下式所示,对一般的最优化问题,由于BB方法需要使用非单调线搜索的技巧,这里暂不进行讨论。

   min ⁡ f ( x ) = 1 2 x T G x + b T x , \min f(x)=\dfrac{1}{2}x^{\mathrm T}Gx+b^{\mathrm T}x, minf(x)=21xTGx+bTx,

   其中 G ∈ R n × n G∈R^{n×n} GRn×n对称正定,考虑如下负梯度迭代:

   x k + 1 = x k − α k g k , x_{k+1}=x_k-\alpha_k g_k, xk+1=xkαkgk,

   其中 g k = G x k + b g_k=Gx_k+b gk=Gxk+b,如何选取合适的 α k α_k αk呢?

   BB方法选取 α k α_k αk的基本思想源于拟 Newton方法,它是将 Hesse矩阵 G k G_k Gk和Hesse逆矩阵 G k − 1 G^{-1}_k Gk1的近似矩阵 B k B_k Bk H k H_k Hk。分别取为 α − 1 I α^{-1}I α1I α I αI αI,使得拟Newton条件在2范数意义下取极小,即要求 α k α_k αk

   α k = arg ⁡ min ⁡ α > 0 ∥ α − 1 s k − 1 − y k − 1 ∥ 2 2 \alpha_k=\arg\min\limits_{\alpha>0}\|\alpha^{-1}s_{k-1}-y_{k-1}\|_2^2 αk=argα>0minα1sk1yk122

  
   α k = arg ⁡ min ⁡ α > 0 ∥ s k − 1 − α y k − 1 ∥ 2 2 , \alpha_k=\arg\min\limits_{\alpha>0}\|s_{k-1}-\alpha y_{k-1}\|_2^2, αk=argα>0minsk1αyk122,

   其中 s k − 1 = x k − x k − 1 , y k − 1 = g k − g k − 1 s_{k-1}=x_{k}-x_{k-1},y_{k-1}= g_{k}-g_{k-1} sk1=xkxk1,yk1=gkgk1,解上述两个极小值问题,把对解分别记作 α k B B 1 α^{BB1}_k αkBB1 α k B B 2 α^{BB2}_k αkBB2,并将其对应的方法分别记作BB1方法和BB2方法

   α k B B 1 = s k − 1 T s k − 1 s k − 1 T y k − 1 , α k B B 2 = s k − 1 T y k − 1 y k − 1 T y k − 1 . \alpha_k^{\mathrm{BB1}}=\frac{s_{k-1}^\mathrm{T}s_{k-1}}{s_{k-1}^\mathrm{T}y_{k-1}},\quad\alpha_k^{\mathrm{BB2}}=\frac{s_{k-1}^\mathrm{T}y_{k-1}}{y_{k-1}^\mathrm{T}y_{k-1}}. αkBB1=sk1Tyk1sk1Tsk1,αkBB2=yk1Tyk1sk1Tyk1.


   对于上述二次极小值问题, g k = G x k + b g_k=Gx_k+b gk=Gxk+b,则:

   s k − 1 = x k − x k − 1 = − α k − 1 g k − 1 , y k − 1 = g k − g k − 1 = − α k − 1 G g k − 1 . \begin{array}{c}s_{k-1}=x_k-x_{k-1}=-\alpha_{k-1}g_{k-1},\\ \\ y_{k-1}=g_k-g_{k-1}=-\alpha_{k-1}Gg_{k-1}.\end{array} sk1=xkxk1=αk1gk1,yk1=gkgk1=αk1Ggk1.

   因此BB方法的两个步长公式可分别化为

   α k B B 1 = g k − 1 T g k − 1 g k − 1 T G g k − 1 , \alpha_k^{\mathrm{BB1}}=\frac{g_{k-1}^{\mathrm{T}}g_{k-1}}{g_{k-1}^{\mathrm{T}}G g_{k-1}}, αkBB1=gk1TGgk1gk1Tgk1,
   α k B B 2 = g k − 1 T G g k − 1 g k − 1 T G 2 g k − 1 . \alpha_k^{\mathrm{BB2}}=\frac{g_{k-1}^{\mathrm{T}}G g_{k-1}}{g_{k-1}^{\mathrm{T}}G^2g_{k-1}}. αkBB2=gk1TG2gk1gk1TGgk1.


   步长 α k B B 1 α^{BB1}_k αkBB1 α k B B 2 α^{BB2}_k αkBB2与最速下降法(SD)、最小梯度法(MG)的步长的联系如下:

   α k S D = arg ⁡ min ⁡ α > 0 f ( x k − α g k ) = g k T g k g k T G g k ; \alpha_k^{\mathrm{SD}}=\arg\min\limits_{\alpha>0}f(x_k-\alpha g_k)=\dfrac{g_k^{\mathrm{T}}g_k}{g_k^{\mathrm{T}}G g_k}; αkSD=argα>0minf(xkαgk)=gkTGgkgkTgk;
   α k M G = arg ⁡ min ⁡ α > 0 ∣ ∣ g ( x k − α g k ) ∣ ∣ 2 2 = g k T G g k g k T G 2 g k . \alpha_k^{\mathrm{MG}}=\arg\min\limits_{\alpha>0}||g(x_k-\alpha g_k)||_2^2=\dfrac{g_k^{\mathrm{T}}G g_k}{g_k^{\mathrm{T}}G^2g_k}. αkMG=argα>0min∣∣g(xkαgk)22=gkTG2gkgkTGgk.

   通过观察可以有如下结论:

   α k B B 1 = α k − 1 S D , α k B B 2 = α k − 1 M G . \alpha_k^{\mathrm{BB1}}=\alpha_{k-1}^{\mathrm{SD}},\quad\alpha_k^{\mathrm{BB2}}=\alpha_{k-1}^{\mathrm{MG}}. αkBB1=αk1SD,αkBB2=αk1MG.

   这两个式子表明,BB1方法和 BB2方法的当前步长分别是 SD方法和MG方法的前一步步长.虽然BB方法仅将SD方法或MG方法的步长延后一步使用,但是在实际计算中,BB方法的数值表现通常明显好于SD方法和 MG方法

   另一方面,SD方法或者MG方法产生的向量序列{ − g k -g_k gk}可能出现在两个方向之间来回震荡的情况,而BB方法的下降方向可能不是有规则的.这说明,选取合适的步长,可以避免规则下降方向的出现,我们已经得到了BB方法在收敛性方面的一些结果,然而令人遗憾的是,至今未能从理论上解释BB方法为什么能够明显地超越SD方法和MG方法.

   不过,对一般的非线性函数,BB方法产生的迭代序列可能发散.为了保证算法的全局收敛性,Raydan[提出了将 BB方法与 GLL非单调线搜索结合起来的方法。



   参考资料:

   1、数值最优化方法(高立 编著)

   2、机器人中的数值优化


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某物联网数智化园区行业基于 KubeSphere 的云原生实践

公司简介 作为物联网 数智化园区一体化解决方案提供商&#xff0c;我们致力于为大中型园区、停车场提供软硬件平台&#xff0c;帮助园区运营者实现数字化、智能化运营。 在使用 K8s 之前我们使用传统的方式部署上线&#xff0c;使用 spug&#xff08;一款轻量级无 Agent 的自…

网络版五子棋C++实现

目录 1.项目介绍 2.开发环境 3.核心技术 4.环境搭建 5.WebSocketpp介绍 5.1WebSocketpp是什么 5.2为什么使用WebSocketpp 5.3原理解析&#xff1a; 5.4WebSocketpp主要特性 6.WebSocketpp使用 7.JsonCpp使用 8.MySQL API 9.项目模块设计以及流程图 10.封装日志宏…

NewStarCTF 2022 web方向题解 wp

----------WEEK1---------- BUU NewStarCTF 公开赛赛道 WEEK1 [NotPHP] 先看题目&#xff0c;要传参加绕过。 分析一下代码&#xff1a;首先get一个datadata://test/plain,Wel…。然后key1和2用数组可以绕过。num2077a可以绕过弱类型。eval()中的php语句被#注释了&#xff0c…

并发编程的故事——JUC

JUC 文章目录 JUC一、Semaphore二、CountDownLatch三、线程安全类 一、Semaphore 为什么需要用到Semaphore? 限流 Semaphore的场景&#xff1f; 秒杀商品的时候&#xff0c;不能够让那些没有秒杀成功的线程进入&#xff0c;只有占了坑位的才可以使用&#xff0c;这里可以用re…

【Hello Algorithm】二叉树相关算法

本篇博客介绍&#xff1a;介绍二叉树的相关算法 二叉树相关算法 二叉树结构遍历二叉树递归序二叉树的交集非递归方式实现二叉树遍历二叉树的层序遍历 二叉树难题二叉树的序列化和反序列化lc431求二叉树最宽的层二叉树的后继节点谷歌面试题 二叉树结构 如果对于二叉树的结构还有…

Linux命令执行完成提醒

有些命令任务执行时间较长&#xff0c;可以让其执行完成时发出声音来提示。 如下&#xff1a; ls && echo -e "\a" 前一条命令成功执行后&#xff0c;会发出声音。 如果当前不在Iterm2窗口里&#xff0c;还会弹窗提示。

2023新版医保目录明细(药品查询)

查询医保目录的主要目的是为了了解医保政策对于特定医疗服务、药品和医疗器械的覆盖范围和支付标准。大众可以通过查看医保目录可以确定哪些药品可以被医保支付以及报销的比例和限额&#xff1b;医药从业者可通过查看医保目录可以即使了解医保政策的变化&#xff0c;便于做出相…

15种下载文件的方法文件下载方法汇总超大文件下载

15种下载文件的方法&文件下载方法汇总&超大文件下载 15种下载文件的方法Pentesters经常将文件上传到受感染的盒子以帮助进行权限提升&#xff0c;或者保持在计算机上的存在。本博客将介绍将文件从您的计算机移动到受感染系统的15种不同方法。对于那些在盒子上存在且需要…

基于jeecg-boot的flowable流程审批时增加下一个审批人设置

更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/nbcio-boot 前端代码&#xff1a;https://gitee.com/nbacheng/nbcio-vue.git 在线演示&#xff08;包括H5&#xff09; &#xff1a; http://122.227.135.243:9888 因为有时…

[ROS]虚拟机ubuntu18.04系统里面运行usb_cam

首先安装usb_cam sudo apt-get install ros-melodic-usb-cam 运行&#xff1a; roscore roslaunch usb_cam usb_cam-test.launch 如果一运行报错&#xff0c;首先确认是否存在/dev/video0 可以使用ls /dev/video*查看&#xff0c;如果没有就是没有连接摄像头&#xff0c;…

区块链实验室(20) - FISCO控制台连接到指定的节点

在FISCO技术文档中&#xff0c;控制台默认采用config.toml作为配置文件&#xff0c;并指定了连接的节点地址和商品&#xff0c;如下所示。 [network] peers["127.0.0.1:20200", "127.0.0.1:20201"] # The peer list to connect在该案例中&#xff0c;控…

Vulnhub内网渗透DC-7靶场通关

个人博客: xzajyjs.cn DC系列共9个靶场&#xff0c;本次来试玩一下一个 DC-7&#xff0c;下载地址。 下载下来后是 .ova 格式&#xff0c;建议使用vitualbox进行搭建&#xff0c;vmware可能存在兼容性问题。靶场推荐使用NAT(共享)模式&#xff0c;桥接模式可能会造成目标过多不…

使用QT操作Excel 表格的常用方法

VBA 简介 Microsoft Office软件通常使用VBA来扩展Windows的应用程序功能&#xff0c;Visual Basic for Applications&#xff08;VBA&#xff09;是一种Visual Basic的一种宏语言。 在VBA的参考手册中就可以看到具体函数、属性的用法&#xff0c;Qt操作Excel主要通过 QAxObj…

Verilog零基础入门(边看边练与测试仿真)-笔记

文章目录 第一讲第二讲第三讲第四讲第五讲 第一讲 1、testbench 没有端口&#xff0c;所以没括号 2、testbench 输入端 之后要变动 所以定义为reg 3、#10 &#xff1a;过10个时间单位 &#xff1b;’timescale 1ns/10ps 即 1ns 的时间单位 10ps的时间精度 4、reg 型变量赋值的…

鼠标悬停阴影的效果被旁边div挡住的解决办法

出现的问题 需求要求鼠标悬停某个图片上有阴影效果&#xff0c;但阴影被旁边相邻的div挡住了&#xff0c;如图所示 解决方案 给悬停的这块div增加2个css属性 $(this).css(position, relative); $(this).css(z-index, 200);新的效果如图所示 一直写后端&#xff0c;前端的…

opencv案例06-基于opencv图像匹配的消防通道障碍物检测与深度yolo检测的对比

基于图像匹配的消防通道障碍物检测 技术背景 消防通道是指在各种险情发生时&#xff0c;用于消防人员实施营救和被困人员疏散的通道。消防法规定任何单位和个人不得占用、堵塞、封闭消防通道。事实上&#xff0c;由于消防通道通常缺乏管理&#xff0c;导致各种垃圾&#xff0…

Linux命令之用户管理(详解)

Linux命令之用户管理 常用基础命令修改root密码切换用户身份改变当前目录查看命令的用法查看命令之ls 用户管理用户的创建adduser创建useradd创建两种方式的区别 用户删除用户密码重置查看当前所有用户 在介绍Linux用户管理相关的命令之前&#xff0c;我们先介绍一些Linux的一些…

【Linux】高级IO和多路转接 | select/poll/epoll

多路转接和高级IO 咳咳&#xff0c;写的时候出了点问题&#xff0c;标点符号全乱了&#xff08;批量替换了几次&#xff09;&#xff0c;干脆就把全文的逗号和句号都改成英文的了&#xff08;不然代码块里面的代码都是中文标点就跑不动了&#xff09; 1.高级IO 1.1 五种IO模型…

对负载均衡的全面理解

title: 对负载均衡的全面理解 date: 2021-07-10 21:41:24 tags: TCP/IP 对负载均衡服务(LBS)大名入行不多久就一直听闻&#xff0c;后来的工作中&#xff0c;也了解到 软件负载均衡器&#xff0c;如被合入Linux内核的章文嵩的LVS&#xff0c;还有以应用程序形式出现的HAProxy、…

音视频技术开发周刊 | 309

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 腾讯云音视频及边缘平台专场邀你一起见证“连接”的力量 9月7日&#xff0c;腾讯全球数字生态大会之腾讯云音视频及边缘平台专场即将开启&#xff01;本次专场将重点分享腾…