【Unity学习笔记】第十九 · 物理引擎约束求解解惑(LCP,最优,拉格朗日乘数法,SI,PGS,基于冲量法)

news2024/9/25 3:24:21

转载请注明出处: https://blog.csdn.net/weixin_44013533/article/details/140309494

作者:CSDN@|Ringleader|


在学习物理引擎过程中,有几大问题一直困扰着我:

  1. 约束求解到底是LCP还是带约束最优问题?
  2. 约束求解过程中拉格朗日乘数法和带约束优化中的拉格朗日乘数法是一个东西吗?
  3. 基于力的约束求解、基于冲量、基于位置的约束求解区别?
  4. SI和PGS的区别?GS与PGS区别?

最优问题

在这里插入图片描述
上图给出了约束的两种形式,碰撞约束(不等式约束)和关节约束(等式约束)。解决约束的方式都是沿着碰撞法线或者连杆方向施加力或者冲量,使之满足约束。

现在的问题是,满足约束的方式有很多,为什么一定要沿着约束函数梯度方向?除非你认为沿着梯度方向解决约束最快或者说引入能量最小!

这意味着你默认这就是最优问题!

那么可能的最优目标是什么呢?如果从解决约束移动距离最小来看目标函数 f ( x ) f(x) f(x)就是 Δ x Δx Δx,如果是从引入能量最小来看目标函数 f ( x ) f(x) f(x)就是 1 2 m Δ v 2 \frac{1}{2}m Δv^2 21mΔv2,写成 Δ x Δx Δx形式就是 1 2 h 2 m Δ x 2 \frac{1}{2h^2}mΔx^2 2h21mΔx2 h h h为时间步长),写成矩阵的二次型形式就是 1 2 h 2 Δ x T M Δ x \frac{1}{2h^2}Δx^TMΔx 2h21ΔxTMΔx。(注:本文不讨论旋转

因为有基于冲量和基于位置解决约束思路,我这里统一用能量最小约化目标。

那么约束求解就变成了带约束的二次规划问题了(先讨论等式约束),即:
m i n i m i z e f ( Δ x ) = 1 2 h 2 Δ x T M Δ x s . t . C i ( x + Δ x ) = 0 , i ∈ N minimize \quad f(Δx)=\frac{1}{2h^2}Δx^TMΔx \\ s.t. \quad C_i(x+Δx) = 0,i∈N minimizef(Δx)=2h21ΔxTMΔxs.t.Ci(x+Δx)=0,iN

或者
m i n i m i z e f ( Δ v ) = 1 2 Δ v T M Δ v s . t . C i ( v + Δ v ) = 0 , i ∈ N minimize \quad f(Δv)=\frac{1}{2}Δv^TMΔv \\ s.t. \quad C_i(v+Δv) = 0,i∈N minimizef(Δv)=21ΔvTMΔvs.t.Ci(v+Δv)=0,iN

基于位置的约束求解

线性化处理约束
C i ( x + Δ x ) ≈ C i ( x ) + ∇ C i ( x ) Δ x C_i(x+Δx)≈C_i(x)+ ∇C_i(x)Δx Ci(x+Δx)Ci(x)+Ci(x)Δx

那么 C i ( x ) + ∇ C i ( x ) Δ x = 0 C_i(x)+ ∇C_i(x)Δx=0 Ci(x)+Ci(x)Δx=0,即 ∇ C i ( x ) Δ x = − C i ( x ) ∇C_i(x)Δx=-C_i(x) Ci(x)Δx=Ci(x)

联立所有约束,
J = [ ∇ C 1 ( x ) , ∇ C 2 ( x ) , . . . , ∇ C n ( x ) ] T J = [∇C_1(x),∇C_2(x),...,∇C_n(x)]^T J=[C1(x),C2(x),...,Cn(x)]T
b = [ − C 1 ( x ) , − C 2 ( x ) , . . . , − C n ( x ) ] T b = [-C_1(x),-C_2(x),...,-C_n(x)]^T b=[C1(x),C2(x),...,Cn(x)]T,

那么原二次规划问题就变为:

m i n i m i z e f ( Δ x ) = 1 2 h 2 Δ x T M Δ x s . t . J Δ x = b minimize \quad f(Δx)= \frac{1}{2h^2}Δx^TMΔx \\ s.t. \quad JΔx=b minimizef(Δx)=2h21ΔxTMΔxs.t.JΔx=b

使用拉格朗日乘数法求解,将带约束问题变为无约束问题:

拉格朗日函数: L ( Δ x , λ ) = 1 2 h 2 Δ x T M Δ x + λ T ( J Δ x − b ) L(Δx,λ)=\frac{1}{2h^2}Δx^TMΔx+λ^T(JΔx-b) L(Δx,λ)=2h21ΔxTMΔx+λT(JΔxb)


{ ∂ L ∂ Δ x = 1 h 2 M Δ x + J T λ = 0 ( 1 ) ∂ L ∂ λ = J Δ x − b = 0 ( 2 ) \begin{cases} \frac{\partial \mathcal{L}}{\partial \Delta x} = \frac{1}{h^2} M \Delta x + J^Tλ = 0 \quad\quad(1) \\ \frac{\partial \mathcal{L}}{\partial \lambda} = J \Delta x - b = 0 \quad\quad\quad\quad\quad(2) \\ \end{cases} {ΔxL=h21MΔx+JTλ=0(1)λL=JΔxb=0(2)

将第一项 Δ x = − h 2 M − 1 J T λ Δx=-h^2M^{-1}J^Tλ Δx=h2M1JTλ 带入第二项,得: − h 2 J M − 1 J T λ = b -h^2JM^{-1}J^Tλ=b h2JM1JTλ=b,令 A = − h 2 J M − 1 J T A=-h^2JM^{-1}J^T A=h2JM1JT
则解线性方程组 A λ = b Aλ=b Aλ=b 就可以得到λ,然后 Δ x = − h 2 M − 1 J T λ Δx=-h^2M^{-1}J^Tλ Δx=h2M1JTλ就可求解。

如果A是可逆的,我们可以通过求逆来求解;如果不可逆,我们可以使用数值方法来求解,如高斯赛德尔、雅可比法、牛顿法等。

基于冲量的约束求解

m i n i m i z e f ( Δ v ) = 1 2 Δ v T M Δ v s . t . C i ( v + Δ v ) = 0 , i ∈ N minimize \quad f(Δv)=\frac{1}{2}Δv^TMΔv \\ s.t. \quad C_i(v+Δv) = 0,i∈N minimizef(Δv)=21ΔvTMΔvs.t.Ci(v+Δv)=0,iN

同样,线性化约束 C i ( v + Δ v ) ≈ C i ( v ) + ∇ C i ( v ) Δ v = 0 C_i(v+Δv)≈C_i(v)+∇C_i(v)Δv=0 Ci(v+Δv)Ci(v)+Ci(v)Δv=0,原问题转为:
m i n i m i z e f ( Δ v ) = 1 2 Δ v T M Δ v s . t . J Δ v = b minimize \quad f(Δv)=\frac{1}{2}Δv^TMΔv \\ s.t. \quad JΔv=b \\ minimizef(Δv)=21ΔvTMΔvs.t.JΔv=b
其中 J = [ C 1 ( v ) , C 2 ( v ) , . . . , C n ( v ) ] T J=[C_1(v),C_2(v),...,C_n(v)]^T J=[C1(v),C2(v),...,Cn(v)]T b = [ − C 1 ( v ) , − C 2 ( v ) , . . . , − C n ( v ) ] T b=[-C_1(v),-C_2(v),...,-C_n(v)]^T b=[C1(v),C2(v),...,Cn(v)]T n n n为约束个数。

利用拉格朗日乘数法, L ( Δ v , λ ) = 1 2 Δ v T M Δ v + λ T ( J Δ v − b ) L(Δv,λ)=\frac{1}{2}Δv^TMΔv + λ^T(JΔv-b) L(Δv,λ)=21ΔvTMΔv+λT(JΔvb)

{ ∂ L ∂ Δ v = M Δ v + J T λ = 0 ( 3 ) ∂ L ∂ λ = J Δ v − b = 0 ( 4 ) \begin{cases} \frac{\partial \mathcal{L}}{\partial \Delta v} = M \Delta v + J^Tλ = 0 \quad\quad(3) \\ \frac{\partial \mathcal{L}}{\partial \lambda} = J \Delta v - b = 0 \quad\quad\quad\quad(4) \\ \end{cases} {ΔvL=MΔv+JTλ=0(3)λL=JΔvb=0(4)
− J M − 1 J T λ = b -JM^{-1}J^Tλ=b JM1JTλ=b,求解线性方程组可得λ和Δv。

不等式约束情况

以基于冲量的约束求解为例,
m i n i m i z e f ( Δ v ) = 1 2 Δ v T M Δ v s . t . J Δ v ≤ b minimize \quad f(Δv)=\frac{1}{2}Δv^TMΔv \\ s.t. \quad JΔv≤b \\ minimizef(Δv)=21ΔvTMΔvs.t.JΔvb
运用KKT条件下的拉格朗日乘数法,

L ( Δ v , λ ) = 1 2 Δ v T M Δ v + λ T ( J Δ v − b ) L(Δv,λ)=\frac{1}{2}Δv^TMΔv + λ^T(JΔv-b) L(Δv,λ)=21ΔvTMΔv+λT(JΔvb)
满足:
K K T 条件 { ∂ L ∂ Δ v = M Δ v + J T λ = 0 ( 5 ) J Δ v − b ≤ 0 ( 6 ) λ ≥ 0 ( 7 ) λ T ( J Δ v − b ) = 0 ( 8 ) KKT条件\begin{cases} \frac{\partial \mathcal{L}}{\partial \Delta v} = M \Delta v + J^Tλ = 0 \quad\quad(5)\\ JΔv-b≤0 \quad\quad\quad\quad\quad\quad\quad(6)\\ λ≥0 \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad(7)\\ λ^T(JΔv-b)=0 \quad\quad\quad\quad\quad(8) \end{cases} KKT条件 ΔvL=MΔv+JTλ=0(5)JΔvb0(6)λ0(7)λT(JΔvb)=0(8)
第(8)项的条件称作互补松弛条件

分两种情况,第一种就是λ=0,即f(x)本身极值就在约束内,类似于碰撞约束中已经分离的情况,此时Δv=0,无需施加冲量;
第二种就是λ>0,因为松弛互补约束,必须 J Δ v − b = 0 JΔv-b=0 JΔvb=0,这和等式约束相同。

所以对于不等式约束,同样可以使用类似等式约束的拉格朗日乘数法,但需要对λ值进行钳值,保证λ≥0即可(约束≤0则λ≥0,约束≥0则λ≤0)。

对于其中的数学解释,可以参考下面文章:

寻找“最好”(4)——不等约束和KKT条件
Karush-Kuhn-Tucker (KKT)条件

物理上的理解可以参考《基于物理的建模与动画10.3节》碰撞约束的例子,其中 a − a^- a是碰撞前的加速度, a + a^+ a+是碰撞后的加速度。地面反作用力 f f f a + a^+ a+就有类似的互补性,如果 f = J λ f=Jλ f=Jλ就要求λ≥0,让对象至少不会往地面方向钻。
在这里插入图片描述

线性互补问题

从上面的分析可以看出,约束求解就是最优问题,很多文章虽然没有明确指出,但默认使用了上面的结论,也就是沿约束梯度方向,可以使约束求解引入的动能最小。

但为啥很多书籍和文章又称约束解决本质上是线性互补问题呢。
从前面不等约束求解使用KKT条件,其中的互补松弛条件能看出一些端倪。

我们先看一看在不使用优化思想下是怎么求解约束的。

约束力法

根据 C ˙ = J q ˙ = 0 \dot{C}=J\dot{q}=0 C˙=Jq˙=0,以及约束力于速度正交(理想约束下约束力不做功)→ F c T q ˙ = 0 F_c^T\dot{q}=0 FcTq˙=0,得到 F c F_c Fc J J J平行,所以 F c = J T λ F_c=J^Tλ Fc=JTλ
其中 F c = J T λ = ∇ C 1 λ 1 + ∇ C 2 λ 2 + … + ∇ C m λ m F_c=J^Tλ=∇C_1λ_1+∇C_2λ_2+…+∇C_mλ_m Fc=JTλ=C1λ1+C2λ2++Cmλm,m是梯度的维度。

同时根据 C ¨ = 0 \ddot{C}=0 C¨=0得到:

C ¨ = J ˙ q ˙ + J q ¨ = J ˙ q ˙ + J M − 1 ( F e x t + F c ) = J ˙ q ˙ + J M − 1 ( F e x t + J T λ ) = 0 \ddot{C}=\dot{J}\dot{q}+J\ddot{q} = \dot{J}\dot{q}+JM^{-1}(F_{ext}+F_c) = \dot{J}\dot{q}+JM^{-1}(F_{ext}+J^Tλ) =0 C¨=J˙q˙+Jq¨=J˙q˙+JM1(Fext+Fc)=J˙q˙+JM1(Fext+JTλ)=0

则, J M − 1 J T λ = − J ˙ q ˙ − J M − 1 F e x t JM^{-1}J^Tλ=- \dot{J}\dot{q}-JM^{-1}F_{ext} JM1JTλ=J˙q˙JM1Fext

只有λ是未知的,由此解这个线性方程组就能得到约束力 F c F_c Fc。那么对应速度和位置通过积分就能获得。

这就是约束力法解约束的思路。

但这个只是无摩擦力的理想约束下,且为等式约束得出的公式,其他复杂情况是否能用类似拉格朗日乘数法暂未可知。

而且基于力的方式求解可能不适合接触约束,因为两个物体的碰撞时,互相之间的力变化很快,而且有一个很大的峰值;而且存在摩檫力约束时,循环求解时可能导致一个无穷大的值。(这段话出自游戏物理引擎(四) 约束)
在这里插入图片描述

基于冲量法

类似的。
施加额外冲量 I = M Δ V = ∫ t t + Δ t F d t I=MΔV=\int_{t}^{t+Δt} Fdt I=MΔV=tt+ΔtFdt,半隐式欧拉法的话,力认为是恒定的,那么

M Δ V = F Δ t = J T λ Δ t MΔV=FΔt=J^TλΔt MΔV=FΔt=JTλΔt Δ V = M − 1 J T λ Δ t ΔV=M^{-1}J^TλΔt ΔV=M1JTλΔt

根据 C ˙ = J q ˙ = J V = 0 \dot{C}=J\dot{q}=JV=0 C˙=Jq˙=JV=0,其中 V = V= V=

C ˙ = J ( V i n i t + Δ V ) = J ( V i n i t + M − 1 J T λ Δ t ) = 0 \dot{C}=J(V_{init}+ΔV)=J(V_{init}+M^{-1}J^TλΔt)=0 C˙=J(Vinit+ΔV)=J(Vinit+M1JTλΔt)=0 推导出

J M − 1 J T λ Δ t = − J V i n i t JM^{-1}J^TλΔt=-JV_{init} JM1JTλΔt=JVinit

解这个线性方程组就能得到λ和Δv了,对应Δx也能得到。

如果只是通过上面解得出Δv,仅仅保证速度不会违反约束,而要保证位置同样不会违反约束,可以在速度约束加上Baumgarte 项,即 J V + b = 0 JV+b=0 JV+b=0,其中 b = − β e Δ t ( 0 < β < 1 ) b=-β\frac{e}{Δt} (0<β<1) b=βΔte(0<β<1),e代表误差项,例如碰撞约束中就是穿透深度,β代表约束违反修正速度。

基于位置法

C ( x + Δ x ) ≈ C ( x ) + ∇ C ( x ) Δ x = 0 C(x+Δx)≈C(x)+∇C(x)Δx=0 C(x+Δx)C(x)+C(x)Δx=0,那么 J Δ x = − C ( x ) JΔx=-C(x) JΔx=C(x),其中 J = ∇ C ( x ) J=∇C(x) J=C(x)
如果使用半隐式欧拉法, Δ x = v ′ Δ t = ( v i n i t + a Δ t ) Δ t = ( v i n i t + M − 1 J T λ Δ t ) Δ t Δx = v^{'}Δt=(v_{init}+aΔt)Δt=(v_{init}+M^{-1}J^TλΔt)Δt Δx=vΔt=(vinit+aΔt)Δt=(vinit+M1JTλΔt)Δt,

带入上面得到: J v i n i t Δ t + J M − 1 J T λ Δ t 2 = − C ( x ) Jv_{init}Δt+JM^{-1}J^TλΔt^2=-C(x) JvinitΔt+JM1JTλΔt2=C(x),则

J M − 1 J T λ Δ t 2 = − J v i n i t Δ t − C ( x ) JM^{-1}J^TλΔt^2=-Jv_{init}Δt-C(x) JM1JTλΔt2=JvinitΔtC(x),解这个线性方程组就能得到λ,然后Δx亦可得到。

赵航在基于约束的物理说 v i n i t = 0 v_{init}=0 vinit=0,我不知道是不是PBD不考虑速度还是怎么造成的,暂不做深究,思想都差不多。

比较约束求解中最优法和普通物理分析法

分别使用最优和不适用最优的方式,都独立给出了约束求解的方法。
比较一下,例如基于冲量的方法。
最优法 { ∂ L ∂ Δ v = M Δ v + J T λ = 0 ∂ L ∂ λ = J Δ v − b = 0 最优法\begin{cases} \frac{\partial \mathcal{L}}{\partial \Delta v} = M \Delta v + J^Tλ = 0 \\ \frac{\partial \mathcal{L}}{\partial \lambda} = J \Delta v - b = 0\\ \end{cases} 最优法{ΔvL=MΔv+JTλ=0λL=JΔvb=0

物理分析法 { M Δ V = F Δ t = J T λ Δ t C ˙ = J ( V i n i t + Δ V ) = 0 物理分析法\begin{cases} MΔV=FΔt=J^TλΔt \\ \dot{C}=J(V_{init}+ΔV)=0 \end{cases} 物理分析法{MΔV=FΔt=JTλΔtC˙=J(Vinit+ΔV)=0
在不考虑 b b b 项差异情况下,差别仅在λ,可以发现最优方式中的λ会暗含Δt项;

而基于位置的
{ 最优法 h 2 J M − 1 J T λ = C ( x ) 物理分析法 J M − 1 J T λ Δ t 2 = − J v i n i t Δ t − C ( x ) \begin{cases} 最优法\quad h^2JM^{-1}J^Tλ= C(x)\\ 物理分析法\quad JM^{-1}J^TλΔt^2=-Jv_{init}Δt-C(x) \end{cases} {最优法h2JM1JTλ=C(x)物理分析法JM1JTλΔt2=JvinitΔtC(x)
可以看到更是非常接近。(不知道是不是推导的问题,感觉两个λ符号相反?问题不大,思路对的就行)

可以看出,用最优方法和物理分析法,得到的结果是类似的,但数学最优方式推导简洁优美,而且很容易处理不等约束,拉格朗日乘数法数学意义明确。

相反,普通物理推导方式,对于拉格朗日乘数法使用的正确性含糊其辞,且推导方式较复杂。

所以这波啊,是数学完胜!!!

问题解答

通过上面的研究,问题基本明晰,约束求解本质上就是最优问题,拉格朗日乘数法的使用,就是求解这种带约束的优化问题,而所谓的线性互补问题,就是KKT条件中的互补松弛条件,两种方法使用的拉格朗日乘数法思路都一致,可能在λ的取值上存在差异。

基于力、基于冲量、基于位置求解思路上都很相近,主要区别就是算 C C C C ˙ \dot{C} C˙还是 C ¨ \ddot{C} C¨,然后用 λ λ λ替换里面的Δx、Δv或者Fc,最后求解含唯一未知数 λ λ λ的线性方程组即可。

SI、PGS本文没涉及,但已知结论就是它俩思想上一致,前者分别逐个求解单个λ,后者对每个λ矩阵中的一行也就是 λ i λ_i λi求解,数学上效果是一致的,可能在收敛性上存在差异。

而PGS比GS多一个限制λ范围大于等于0,也就是能够求解非等式约束罢了。

完毕!

参考目录

  1. Position Based Dynamics与二次规划
  2. 基于约束的物理
  3. PhysX原理与实现:一般约束
  4. 物理引擎之约束求解(一)——线性互补问题
  5. Video Game Physics Tutorial - Part III: Constrained Rigid Body Simulation
  6. Game Physics Series 周明倫
  7. Karush-Kuhn-Tucker (KKT)条件

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

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

相关文章

.NET MAUI开源架构_1.学习资源分享

最近需要开发Android的App&#xff0c;想预研下使用.NET开源架构.NET MAUI来开发App程序。因此网上搜索了下相关资料&#xff0c;现在把我查询的结果记录下&#xff0c;方便后面学习。 1.官方文档 1.1MAUI官方学习网站 .NET Multi-Platform App UI 文档 - .NET MAUI | Micro…

paddlepaddle2.6,paddleorc2.8,cuda12,cudnn,nccl,python10环境

1.安装英伟达显卡驱动 首先需要到NAVIDIA官网去查自己的电脑是不是支持GPU运算。 网址是&#xff1a;CUDA GPUs | NVIDIA Developer。打开后的界面大致如下&#xff0c;只要里边有对应的型号就可以用GPU运算&#xff0c;并且每一款设备都列出来相关的计算能力&#xff08;Compu…

《Python零基础入门》——关于PyCharm使用技巧及python基本概念

从本次文章开始&#xff0c;我们将学习一门新的编程语言——Python。作为最热门的编程语言&#xff0c;Python相对比较清晰、简单。 python主要的编译工具就是pycharm&#xff0c;关于pycharm的安装及python配置环境&#xff0c;大家可自行参考网络上的教程&#xff0c;本文不…

深入Linux:权限管理与常用命令详解

文章目录 ❤️Linux常用指令&#x1fa77;zip/unzip指令&#x1fa77;tar指令&#x1fa77;bc指令&#x1fa77;uname指令&#x1fa77;shutdown指令 ❤️shell命令以及原理❤️什么是 Shell 命令❤️Linux权限管理的概念❤️Linux权限管理&#x1fa77;文件访问者的分类&#…

Windows之nslookup命令

一、命令简介 nslookup 是一个网络管理命令行工具&#xff0c;用于查询 DNS 记录。它可以用来查找域名对应的 IP 地址&#xff0c;或反向查找 IP 地址对应的域名。查询结果中非权威应答&#xff08;Non-authoritative answer&#xff09;意味着answer来自于其它服务器的缓存&am…

小众好玩的赛车游戏:环道巨星 CIRCUIT SUPERSTARS中文安装包

《环道巨星》&#xff08;Circuit Superstars&#xff09;是一款由赛车迷亲手为其他赛车迷打造的俯视角赛车游戏。荟集史上各类赛车运动&#xff0c;旨在提供刺激好玩的驾驶体验&#xff1b;而游戏自带的高技术难度将促使玩家长时间磨砺技巧&#xff0c;以达成完美的一圈。 游戏…

pdf只要前几页,pdf中只要前几页怎么处理

在处理pdf文件时&#xff0c;我们有时只需要其中的一页或几页&#xff0c;而不是整个文档。那么&#xff0c;如何快速且高效地从pdf中提取单独的一页呢&#xff1f;本文将为你揭示几种简单易行的方法&#xff0c;让你轻松实现这一目标。 使用 “轻云处理pdf官网” 打开 “轻云…

牛客小白月赛98 (个人题解)(补全)

前言&#xff1a; 昨天晚上自己一个人打的小白月赛&#xff08;因为准备数学期末已经写烦了&#xff09;&#xff0c;题目难度感觉越来越简单了&#xff08;不在像以前一样根本写不了一点&#xff0c;现在看题解已经能看懂一点了&#xff09;&#xff0c;能感受到自己在不断进步…

基于PyTorch深度学习实践技术应用

近年来&#xff0c;Python语言由于其开源、简单等特点&#xff0c;受到了广大程序开发者的偏爱&#xff0c;丰富的函数库使得其在各行各业中得到了广泛的应用。伴随着新一轮人工智能&#xff08;尤其是深度学习&#xff09;的快速发展&#xff0c;许多深度学习框架应运而生&…

Apple intelligence 秋季发布:苹果正式进军AI行业!

Apple intelligence 秋季发布&#xff1a;苹果正式进军AI行业&#xff01; 前言 Apple Intelligence WWDC 2024大会上,苹果发布了一个惊喜——个人智能系统Apple Intelligence。它不仅让iPhone、iPad和Mac变得更个性化、更强大、更智能,也标志着苹果正式加入了人工智能的大联盟…

爸爸上下班c++

题目描述 佳佳爸爸每天上午a时b分上班&#xff0c;每天下午c时d分下班&#xff0c;&#xff08;采用的是12小时制&#xff09;&#xff0c;请问佳佳爸爸上班的时间是多少分钟&#xff0c;多少秒&#xff1f; 输入 一行4个整数&#xff0c;分别代表a,b,c,d,整数与整数之间以空…

[Vulnhub] Tr0ll3 aircrack-ng+lynx

信息收集 IP AddressOpening Ports192.168.101.147TCP:22 $ ssh start192.168.101.147 用户:Start startTr0ll3:~$ find / -type f -perm 0777 2>/tmp/1 startTr0ll3:~$ cat /var/log/.dist-manage/wytshadow.cap | nc 192.168.101.128 10035 WIFI握手包 aircrack-ng 破…

一文了解MySQL的表级锁

文章目录 ☃️概述☃️表级锁❄️❄️介绍❄️❄️表锁❄️❄️元数据锁❄️❄️意向锁⛷️⛷️⛷️ 介绍 ☃️概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0…

Vue快速入门安装与配置(最新版、超详细、图文结合)

一.Node.js安装 1.node.js下载 进入node.js官网下载&#xff0c;选择自己需要的版本&#xff0c;最好下载长期支持版&#xff0c;最新版可能不太稳定。 Node.js 中文网 2.node.js安装 下载完成后&#xff0c;开始双击打开安装包安装node.js。 勾选协议&#xff0c;然后nex…

尚硅谷js

原型模式 原型对象就是相当于java的static,所有实例对象可以直接用静态的属性或者方法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript&q…

MAC通过SSH连接VirtualBox中的虚拟机

1、虚拟机网络连接方式使用桥接方式-桥接网卡 2、重启虚拟机&#xff0c;查看虚拟机ip地址是否跟Mac宿主机在同一网段 3、SSH工具&#xff08;推荐Tabby&#xff09;输入IP、用户名和密码就能连接虚拟机了

计算机的错误计算(二十九)

摘要 &#xff08;1&#xff09;讨论近似值的错误数字个数。有时&#xff0c;遇到数字9或0, 不太好确认近似值的错误数字个数。&#xff08;2&#xff09;并进一步解释确认计算机的错误计算&#xff08;二十八&#xff09;中一个函数值的错误数字个数。 理论上&#xff0c;我…

【错题集-编程题】四个选项(DFS + 剪枝 + 哈希表)

牛客对应题目链接&#xff1a;四个选项 (nowcoder.com) 一、分析题目 用递归枚举出所有的情况&#xff0c;注意剪枝&#xff1a; 填写某个数时&#xff0c;要看看还有没有剩余次数。填写某个数时&#xff0c;要看看符不符合若干题的选项必须相同。 二、代码 // 值得学习的代码…

【HZHY-AI300G智能盒试用连载体验】文档资料

感谢电子发烧友和北京合众恒跃科技有限公司提供的的产品试用机会。 HZHY-AI300G工业级国产化智盒&#xff0c;采用RK3588工业级芯片组适应-40℃-85℃工业级宽温网关。 以前测试过其他厂家的RK3568产品&#xff0c;对瑞芯微的工具也比较了解。 在合众恒跃的网站上可以看到基本…

《基于 LatentFactor + Redis + ES 实现动态药房分配方法》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 近期刚转战 CSDN&#xff0c;会严格把控文章质量&#xff0c;绝不滥竽充数&#xff0c;欢迎多多交流。&am…