一、QP(Quadratic Programming,二次规划)

定义

给定对称矩阵 $Q\in\mathbb{R}^{n\times n}$、向量 $c\in\mathbb{R}^n$,线性约束 $Ax\le b,\ Ex=d$。 二次规划:

\[\min_{x\in\mathbb{R}^n}\ \tfrac12 x^\top Qx + c^\top x \quad \text{s.t.}\quad Ax\le b,\ Ex=d.\]

若 $Q\succeq 0$(半正定),这是凸QP,解与算法都很稳定。

极简例(单变量、带区间约束)

\[\min_{x}\ \tfrac12 (x-3)^2 \quad \text{s.t.}\quad 0\le x \le 2.\]

解法:先看无约束极小值 $x^\star=3$,但违反约束;把它投影到区间 $[0,2]$ 上,得

\[x^\star=\operatorname{proj}_{[0,2]}(3)=2.\]

要点:很多小型接触子步都等价于“把某个向量投影到一个简单集合(区间/球/锥)上”,而凸QP的KKT条件正是这类“投影=互补”关系的另一种表达。


二、NCP(Nonlinear Complementarity Problem,非线性互补问题)

定义

给定连续映射 $f:\mathbb{R}^n\to\mathbb{R}^n$,求 $x\in\mathbb{R}^n$ 使

\[x\ge 0,\quad f(x)\ge 0,\quad x^\top f(x)=0.\]

读作:“$x$ 与 $f(x)$ 互补”,即每个分量 $x_i f_i(x)=0$。

极简例(1D 单边接触的“玩具模型”)

设地面在 $y=0$,小球“受一个线性弹力”逼近地面。用一个标量互补近似地表述接触:

\[\text{求 } \lambda\ge 0 \text{ 使 } g(\lambda)\ge 0,\ \lambda\, g(\lambda)=0, \qquad g(\lambda)=a - b\lambda,\]

其中 $g$ 是“间隙”(受 $\lambda$ 影响压缩),$a>0,\ b>0$ 为常数。

求解:两种情况

要点:间隙和支持力互补。


三、CCP(Cone Complementarity Problem,锥互补问题)

定义

把 NCP 的“非负正交”推广到一般闭凸锥 $K$。 求 $x$ 使

\[x\in K,\quad F(x)\in K^\*,\quad \langle x,\,F(x)\rangle=0,\]

其中 $K^*$ 为 $K$ 的对偶锥(所有与 $K$ 非负内积的向量集合)。 当 $K=\mathbb{R}^n_+$ 时就退化为 NCP。 在接触-摩擦里,常见的锥是二阶锥(摩擦圆锥)

物理例(库仑摩擦的切向圆盘)

在某接触点,法向冲量(或力)给定为 $\gamma_n\ge 0$,摩擦系数 $\mu$。 切向变量 $\gamma_T\in\mathbb{R}^2$ 必须满足圆盘约束

\[\|\gamma_T\|\le \mu\,\gamma_n \quad (\text{二维切向;三维情形是圆锥/二阶锥}).\]

最大耗散原理给出优化/互补的一阶条件:

\[\gamma_T\in \mathcal{K}_T,\quad v_T + y = 0,\ y\in N_{\mathcal{K}_T}(\gamma_T),\]

等价于“把 $-v_T$ 投影到圆盘 $\mathcal{K}_T={|\gamma_T|\le \mu\gamma_n}$ 上”。 显式解(当 $v_T\ne 0$):

\[\gamma_T^\star = -\,\mu\,\gamma_n\ \frac{v_T}{\|v_T\|}.\]
数字例

给 $v_T=(3,-4)$,$|v_T|=5$;取 $\mu=0.5,\ \gamma_n=10$,则 $\mu\gamma_n=5$。 有

\[\gamma_T^\star = -5\cdot \frac{(3,-4)}{5}=(-3,\,4), \quad \|\gamma_T^\star\|=5=\mu\gamma_n.\]

解释:摩擦切向量反向对齐于切向速度,且恰在半径 $5$ 的圆盘边界上。

要点:这就是 SOCCP(Second-Order Cone Complementarity Problem) 的基本一格,工程上常用投影算子(一次算一次)或加速投影迭代(APGD/FISTA)来求解大规模问题。


四、DVI(Differential Variational Inequality,微分变分不等式)

定义(动力学 + 互补/锥约束)

设状态 $x(t)$、输入/乘子 $u(t)$。DVI 以“微分规律 + 变分不等式”耦合表示系统:

\[\dot x = f(x,t) + G^\top u,\qquad u\in K,\quad F(x,t,u)\in K^\*,\quad \langle u,\ F(x,t,u)\rangle=0.\]

它把非穿透、摩擦、饱和/限幅等“非光滑律”直接融到动态模型里,允许出现速度跳变(冲击)。

教科书例(单刚体+地面接触)

“从 DVI 到离散子问题”的最小例

用固定步长 $\Delta t$ 做时间步进,把力积分成冲量 $\gamma$:

\[M v^{k+1} = M v^{k} + \Delta t\,f^k + J_n^\top \gamma_n + J_T^\top \gamma_T.\]

把 $v^{k+1}$ 代回到“法向相对速度/间隙预测”里,就得到一步的互补/锥互补方程(NCP/CCP/SOCCP);这一步就是你在引擎里每帧要解的代数子问题因此:DVI(连续) → 时间离散 → NCP/CCP(离散代数) → 数值求解(PGS/ADMM/APGD/牛顿/路径法)


五、四者关系 & 选型心法


六、再给一组“可手算”的迷你练习(巩固手感)

  1. QP 练习
\[\min_x \ \tfrac12 x^\top\!\begin{bmatrix}2&0\\0&8\end{bmatrix}x +\begin{bmatrix}-4\\-8\end{bmatrix}^\top x \quad \text{s.t.}\quad x_1\ge 0,\ x_2\ge 0.\]

先解无约束最优 $x=(2,1)$,已满足约束 → 即为最优。若把右边线性项改为 $(-1,-1)^\top$,再解一次并比较。

  1. NCP 练习(两个接触点耦合的玩具): 找 $(x_1,x_2)\ge 0$ 使 $f(x)=Ax+b\ge 0$、$x^\top f(x)=0$,其中
\[A=\begin{bmatrix}2 & -1\\ -1 & 2\end{bmatrix},\quad b=\begin{bmatrix}-1\\2\end{bmatrix}.\]

枚举“活跃集”(哪个分量为 0、哪个解等式)即可解出闭式解。

  1. CCP/二阶锥投影: 给 $\mu=0.6,\ \gamma_n=5,\ v_T=(4,3)$。求 $\gamma_T^\star$。 解:$|v_T|=5,\ \mu\gamma_n=3$ ⇒ $\gamma_T^\star=-3\cdot \frac{(4,3)}{5}=(-12/5,\ -9/5)$。

  2. DVI→一步离散(单法向):

\[m(v^{k+1}-v^k)= -mg\Delta t + \gamma_n,\qquad 0\le \gamma_n \perp \phi^k + \Delta t\,v^{k+1}\ge 0.\]

代入 $v^{k+1}$ 得单变量互补方程,设 $m=1,g=10,\Delta t=0.01,\ \phi^k=0$ 手算 $\gamma_n$ 与 $v^{k+1}$。