机器人中的数值优化(九)——拟牛顿方法(下)、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+ykTskykykT−skTBkskBkskskTBk.
采用 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+1−xk,Δ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正定都是(严格)正定的。
![](https://img-blog.csdnimg.cn/f082966b44c14fc08502d2a155d2eb68.png#pic_center)
下图中的例子对牛顿法和采用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的综合效果更好。
![](https://img-blog.csdnimg.cn/7ae42e6aeff144a494d55668a3046764.png#pic_center)
–
上述采用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,ϵ=10−6Hkotherwise
但是BFGS本身的特性导致其发散的情况一般都在优化的初期,一般发生在前10步或者前50步,BFGS自身的优良稳定性使其在靠近局部极小值的附件时几乎一定会满足上述cautious update(Li and Fukushima 2001)条件,所以不需要加上以上条件就可以让BFGS较好的收敛,所以在工程上即使不加以上条件也是挺稳定的,一些优化库中也没有加以上条件,当然加上会使算法更稳定。
![](https://img-blog.csdnimg.cn/1da21751dbc94858b2889b978764d479.png#pic_center)
下面的例子中对上述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} sk−m+1和 y k − m + 1 y_{k-m+1} yk−m+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} sk−m+1、 y k − m + 1 y_{k-m+1} yk−m+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} 10−4,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+1BFGS−Hk+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(skTyksk−ykTHkykHkyk)
这表明 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} G∈Rn×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 Gk−1的近似矩阵 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∥α−1sk−1−yk−1∥22
或
α 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α>0min∥sk−1−αyk−1∥22,
其中 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} sk−1=xk−xk−1,yk−1=gk−gk−1,解上述两个极小值问题,把对解分别记作 α 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=sk−1Tyk−1sk−1Tsk−1,αkBB2=yk−1Tyk−1sk−1Tyk−1.
对于上述二次极小值问题, 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} sk−1=xk−xk−1=−αk−1gk−1,yk−1=gk−gk−1=−αk−1Ggk−1.
因此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=gk−1TGgk−1gk−1Tgk−1,
α 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=gk−1TG2gk−1gk−1TGgk−1.
步长 α 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=αk−1SD,αkBB2=αk−1MG.
这两个式子表明,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、机器人中的数值优化
相关文章:
![](https://img-blog.csdnimg.cn/749c2b4b1a8f4502b4b5687bac560b91.png#pic_center)
机器人中的数值优化(九)——拟牛顿方法(下)、BB方法
本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…...
![](https://www.ngui.cc/images/no-images.jpg)
java 从resource下载excel打不开
GetMapping("/download/template")public void template(HttpServletResponse response) throws IOException {ServletOutputStream outputStream response.getOutputStream();InputStream inputStream null;try {//从resource获取excel文件流inputStream getClas…...
![](https://img-blog.csdnimg.cn/21ea2e77127a409f896910243d3d4c12.png)
NS2安装及入门实例——(ns2.35 / Ubuntu20.04)
文章目录 一、ns2安装1、更新系统源2、准备工作3、下载安装包4、安装5、问题① 问题1② 问题2③ 问题3 6、安装成功7、环境配置 二、nam安装1、安装2、问题 三、实例 一、ns2安装 1、更新系统源 sudo apt-get update sudo apt-get upgrade2、准备工作 sudo apt-get install …...
![](https://www.ngui.cc/images/no-images.jpg)
平面设计的三大基本元素 优漫动游
平面设计需要美术基础,有美术基础的新人往往能更快完成平面设计岗的转行,在专业培训机构内讲师授课时也会从平面设计的基础——三大基本元素开始。今天就跟大家具体介绍一下平面设计的三大基本元素,让大家知道到底都有哪些。 平面设计的三…...
![](https://www.ngui.cc/images/no-images.jpg)
【电子取证篇】汽车取证检验标准
【电子取证篇】汽车取证检验标准 汽车取证鉴定可能涉及的测试/测量方法—【蘇小沐】 GA/T 976-2012《电子数据法庭科学鉴定通用方法》; GA/T 1998-2022《汽车车载电子数据提取技术规范》; GA/T 1999.2-2022《道路交通事故车辆速度鉴定方法 第2部分&…...
![](https://www.ngui.cc/images/no-images.jpg)
【元宇宙】游戏应用商城对元宇宙的影响
游戏行业不仅是创意设计原则的信息源,还是构建“下一代互联网”的基础技术。它也是元宇宙的经济活动先例。 究竟为什么会认为应用商城设置的30%佣金将导致元宇宙“无法实现”呢?有三个核心原因。首先,应用商城阻止了企业对元宇宙的投资&…...
![](https://www.ngui.cc/images/no-images.jpg)
win10-docker-mysql镜像安装运行基础
win10-docker-mysql镜像安装运行基础 文章目录 win10-docker-mysql镜像安装运行基础一、搜索可用镜像1.1 查询mysql镜像1.2 确定镜像版本号 二、运行mysql容器2.1 进入mysql2.2 测试mysql是否正常 三、将mysql数据存储目录映射到宿主机做持久化 一、搜索可用镜像 1.1 查询mysq…...
![](https://img-blog.csdnimg.cn/77101a13caec470c8df564e6981fa4df.png)
VirtualBox7+Ubuntu22集群规划
1. 目的: 新入手了一台小主机(8核 / Intel(R) Xeon(R) W-10885M CPU 2.40GHz 2.40 GHz, 16vCpu / 64G RAM / 系统类型 64 位操作系统, 基于 x64 的处理器),原装了一套Win11专业版,打算用VirtualBox 虚拟一个集群。 2. …...
![](https://img-blog.csdnimg.cn/4f7074be7d314ceba24ac6e2886d8f94.png#pic_center)
标绘一张图系统
一、概况 智慧武装三维电子沙盘是一种结合了智能技术和虚拟现实技术的沙盘模拟系统。它通过使用三维投影技术和交互式触控技术,将实际战场的地形、建筑物、人员等元素以虚拟的形式呈现在沙盘上。 智慧武装三维电子沙盘可以实时获取各种战场数据,并通过智…...
![](https://www.ngui.cc/images/no-images.jpg)
菜鸟教程《Python 3 教程》笔记(17):输入和输出
菜鸟教程《Python 3 教程》笔记(17) 17 输入和输出17.1 读取键盘输入17.2 读和写文件17.3 文件对象的方法17.3.1 read()、readline()、readlines() 17.3.2 tell()17.3.3 seek()17.4 pickle 模块(没看懂) 笔记带有个人侧重点&#…...
![](https://img-blog.csdnimg.cn/img_convert/f95cbbf418c1569e75175f80d75d9bb3.jpeg)
【动态规划】面试题 08.01. 三步问题
Halo,这里是Ppeua。平时主要更新C,数据结构算法,Linux与ROS…感兴趣就关注我bua! 文章目录 0. 题目解析1. 算法原理1.1 状态表示1.2 状态转移方程1.3初始化1.4 填表顺序1.5 返回值 2.算法代码 🐧 本篇是整个动态规划的…...
![](https://img-blog.csdnimg.cn/img_convert/95f13f2b2f90e7fbeefc40a91778e73b.jpeg)
mac常见问题(三) macbook键盘溅上水怎么办?
多朋友在使用mac的时候难免会发生一些小意外,例如说本期要为大家说的macbook键盘溅上水或者其他的液体怎么办?不清楚的同学赶快get这项技能吧! 如果你不小心给你的MacBook键盘上溅了水或者其他液体,你需要超级快的把表面的液体清理…...
![](https://www.ngui.cc/images/no-images.jpg)
安全测试目录内容合集
基础知识 安全测试基础知识 安全测试-django防御安全策略 HTTP工作原理 靶场DVWA 安全测试网站-DWVA下载安装启动 DVWA-Command Injection DVWA-5.File upload 文件上传漏洞 DVWA-9.Weak Session IDs DVWA-XSS (Stored) DVWA-10.XSS (DOM)...
![](https://img-blog.csdnimg.cn/0d05f81e0c1b463d8bba7f30d806e28e.png#pic_center)
数据结构和算法(1):开始
算法概述 所谓算法,即特定计算模型下,旨在解决特定问题的指令序列 输入 待处理的信息(问题) 输出 经处理的信息(答案) 正确性 的确可以解决指定的问题 确定性 任一算法都可以描述为一个由基本操作组成的序…...
![](https://img-blog.csdnimg.cn/cee4289693334075859d06a31c06dcd4.jpeg)
线下沙龙 | 从营销扩张到高效回款,游戏公司如何通过全链路运营实现高质量出海!
游戏出海,是近些年来中国产业的风暴出口,在2020至2023年期间保持着绝对的领航地位。公开数据显示,过去4年里,游戏在各类App出海份额中总体保持稳定,高达 64.9%。 但毕竟海外是陌生的市场,我们见过太多折戟沉…...
![](https://img-blog.csdnimg.cn/img_convert/bf8792720d0275b9ab029015d090cffc.png)
使用Jekyll + GitHub Pages搭建个人博客
本文将介绍如何使用Jekyll搭建个人博客,并部署在GitHub Pages上。 1.简介 Jekyll是一个强大的静态网站生成器,可以将Markdown、HTML、Liquid模板等文件转换为静态网站。Jekyll支持模板引擎、主题、插件、集成GitHub Pages等特性,可以帮助用…...
![](https://img-blog.csdnimg.cn/a59c34aa22cb470ca91b7cd62aae2358.png)
⽹络与HTTP 笔试题精讲1
OSI七层与TCP/IP 这个就是OSI参考模型,⽽实际我们现在的互联⽹世界是就是这个理论模型的落地叫做TCP/IP协议 TCP的三次握⼿与四次挥⼿ 客户端想要发送数据给服务端,在发送实际的数据之前,需要先在两端之间建⽴连接,数据发完以后也需要将该连接关闭。建⽴连接的过程就是我们…...
![](https://img-blog.csdnimg.cn/a27cdb5b530641a69a9e167dd62b0f2b.png)
亲测有效:虚拟机安装gcc,报错Could not retrieve mirrorlist http://mirrorlist.centos.org
(网卡配置资料) 原因: 网络问题 报错详情: One of the configured repositories failed (未知),and yum doesnt have enough cached data to continue. At this point the onlysafe thing yum can do is fail. There are a few …...
![](https://img-blog.csdnimg.cn/30feada52fb149c8ad5ed1d566e17d44.png#pic_center)
机器人中的数值优化(十二)——带约束优化问题简介、LP线性规划
本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…...
![](https://img-blog.csdnimg.cn/c2cc1940ff6148b19ef810d4e76e3e4d.png)
如何解决使用 ISPC 构建编译项目代码的时候出现_ISPCAlloc、_ISPCLaunch、_ISPCSync的连接器错误
一般在编译 ISPC 代码到时候,构建方法如下: $ ispc add.ispc -o add.o -h add.h $ g main.cpp add.o 但是在一些情况下连接器会报以下错误: $ g main.cpp add.o Undefined symbols for architecture x86_64:"_ISPCAlloc", refer…...
![](https://img-blog.csdnimg.cn/af68c1ab860f4f9fa7cd6f7f406c8260.png)
Hadoop 集群一直处于安全模式,强制退出后出现数据丢失警告。解决方法
文章目录 安全模式相关命令分析集群为什么一直处于安全模式解决方法 安全模式相关命令 # 查看安全模式状态 hdfs dfsadmin -safemode get# 进入安全模式 hdfs dfsadmin -safemode enter# 离开安全模式 hdfs dfsadmin -safemode leave# 强制退出安全模式 hdfs dfsadmin -safemo…...
![](https://img-blog.csdnimg.cn/6a79fc7d3a7543bf828d2dcb3db1a3e2.png)
四旋翼飞行器基本模型(MatlabSimulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
![](https://www.ngui.cc/images/no-images.jpg)
P1116 车厢重组(冒泡排序)
题目描述 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180 180 180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序…...
![](https://img-blog.csdnimg.cn/img_convert/7a0970219a00056a2463ca44c9ad212b.png)
Android逆向学习(番外一)smali2java部分文件无法反编译的bug与修复方法
Android逆向学习(番外一)smali2java部分文件无法反编译的bug与修复方法 一、前言 昨天我和往常一样准备着android逆向(四)的博客,结果发现smali2java对某些文件无法进行逆向,我不知道windows会不会产生这…...
![](https://img-blog.csdnimg.cn/2d219e739abc4f48961a3163f3224e0d.png)
go语言基本操作---三
变量的内存和变量的地址 指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言对指针的支持介于java语言和C/C语言之间,它即没有想Java语言那样取消了代码对指针的直接操作的能力,也避免了C/C语言中由…...
![](https://img-blog.csdnimg.cn/4ebfdb66e309443e8ac2332963945071.png#pic_center)
ArcGIS Enterprise + ArcGIS Pro 常用服务类型发布
发布前设置 门户连接 首先Pro需要先连接portal 添加portal门户地址,注意只到WA一级地址,并登录: 登录完成后,右键,设置为活动门户: 1. 发布动态地图服务 关联数据文件夹: 拖拽数据到地图…...
![](https://img-blog.csdnimg.cn/img_convert/bac19964fa206f568e49d8ef2bb8210f.webp?x-oss-process=image/format,png)
优思学院|亲和图案例:寻找六西格玛的项目
什么是亲和图? 亲和图(Affinity Diagram)主要功能在於分类归纳,协助在一堆杂乱无章的资料之中,有系统的归纳出几个大类,以利后续作业。通常先利用头脑风暴(Brainstorming)方式得到大…...
![](https://www.ngui.cc/images/no-images.jpg)
tomcat 的缓存机制
HTTP缓存:Tomcat支持HTTP缓存机制,可以通过设置响应头中的Cache-Control、Expires和ETag等字段来控制缓存策略。这些字段告诉浏览器是否可以缓存响应以及缓存的有效期等信息。 Servlet缓存:Tomcat还提供了Servlet缓存机制,它可以…...
![](https://www.ngui.cc/images/no-images.jpg)
laravel 压缩文件与解压文件
一、引入第三方类 composer require chumper/zipper二、第三方类配置 providers>[Chumper\Zipper\ZipperServiceProvider::class ]aliases > [Zipper > Chumper\Zipper\Zipper::class ]三、压缩解压缩实例 <?php namespace App\Http\Controllers\Upload; use A…...
![](https://www.ngui.cc/images/no-images.jpg)
kind搭建k8s集群用于测试
安装kind 需要先安装go kind基于go开发 #第一种安装方式#修改go源加快下载速度 go env -w GOPROXYhttps://goproxy.cn,direct #直接下载安装kind最新版本 go install sigs.k8s.io/kindlatest #进入GOPATH目录找到bin目录下kind执行程序 移动到环境变量里 mv ./kind /usr/local…...
![](/images/no-images.jpg)
做网站学完html/网络营销方案策划书
格雷编码 题目描述:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。 格雷编码序…...
![](/images/no-images.jpg)
做网站 怎么做留言/百度新闻最新消息
package cn.TCP;import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;/*** 模拟多个客户端登陆 双向* 1.指定端口 使用ServerSocket创建服务器* 2.阻塞式等待连接accept* 3.…...
wordpress管理员信息在哪/武汉网络关键词排名
什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是spring boot其实不…...
![](/images/no-images.jpg)
查询网站建设/seo人员是什么意思
从股票市场崩溃到1932年(大萧条时期最惨的一年),经济一直在螺旋式下降,而这个下降趋 势又因为采取了某些措施的缘故而更加速了。按老规矩说,这些措施本该使经济复兴的,可 是事实恰好相反。为了保障投资者的利益,物价是…...
![](https://img-blog.csdnimg.cn/20200224182200465.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Fsb3ZlbHlwZWFjaA==,size_16,color_FFFFFF,t_70)
做移门配件的网站/管理课程培训
如果是二进制的话就直接用01来表示,天平秤的砝码有没有被使用过。 但是这是三的倍数,变相使用三进制。012都可存在,故没有直接的办法去判断能否使用。因为根据题意可知道不能重复使用。 思路: 代码: package 题解;im…...
![](https://img-blog.csdnimg.cn/img_convert/fa8cdd0282e3e7c7d5bd77986fd1c145.png)
济南网站建设 泉诺/网站搭建详细教程
参考 C训练 (csdn.net) 目录 04HTTP 常用请求头 用户凭证Cookie Session 习题 06HTTPS 为什么使用HTTPS 2、SSL 3、TLS 4、证书与证书链 习题 07OSI七层模型 习题 08IP基础 1、IP分类 2、小知识 3、 网络类型 习题 09IPv6 10网络拓扑 习题 11域名解析 习…...