Files
essay-mineplanning/explanation_lines_841_843.md
T
2026-08-24 17:26:17 +08:00

17 KiB

main.tex 第 841--843 行详解

本文档解释 eq:joint_psi_discrete 为什么能同时影响两条路径、有限支撑核为什么会产生稀疏 Hessian,以及第 843 行所谓“块对角结构”到底是什么意思。

1. 先把决策变量拆开

联合优化变量写成


\mathbf z=
\begin{bmatrix}
\mathbf z_{\mathrm{park}}\\
\mathbf z_{\mathrm{exit}}
\end{bmatrix}.

其中,\mathbf z_{\mathrm{park}} 包含泊入路径的全部配置点状态、区间控制量和弧长步长,\mathbf z_{\mathrm{exit}} 同理。每条路径的变量维数为


n_{\mathrm{park}}=5M_{\mathrm{park}},
\qquad
n_{\mathrm{exit}}=5M_{\mathrm{exit}},

所以 $\mathbf z\in\mathbb R^{n_z}$,其中


n_z=n_{\mathrm{park}}+n_{\mathrm{exit}}.

这里的 5M_\bullet 来自 M_\bullet 个四维状态、M_\bullet-1 个控制量以及一个弧长步长。

i 个泊入路径位置是


\mathbf p_i^{\mathrm{park}}
=
\begin{bmatrix}x_i^{\mathrm{park}}\\y_i^{\mathrm{park}}\end{bmatrix},

它只是 \mathbf z_{\mathrm{park}} 中第 i 个状态的位置分量,并不是额外的决策变量。定义状态到位置的选择矩阵


\mathbf S_p=
\begin{bmatrix}
1&0&0&0\\
0&1&0&0
\end{bmatrix}.

再定义作用于整个联合变量 \mathbf z 的常数选择矩阵


\mathbf E_i^{\mathrm{park}}\in\mathbb R^{2\times n_z},
\qquad
\mathbf E_j^{\mathrm{exit}}\in\mathbb R^{2\times n_z}.

\mathbf E_i^{\mathrm{park}} 在泊入路径第 i 个四维状态对应的列上放置 $\mathbf S_p$,其余元素均为零;\mathbf E_j^{\mathrm{exit}} 在驶离路径第 j 个四维状态对应的列上放置 $\mathbf S_p$,其余元素均为零。因此


\boxed{
\mathbf p_i^{\mathrm{park}}
=\mathbf E_i^{\mathrm{park}}\mathbf z,
\qquad
\mathbf p_j^{\mathrm{exit}}
=\mathbf E_j^{\mathrm{exit}}\mathbf z.}

若用从 1 开始的元素下标表示,则 \mathbf E_i^{\mathrm{park}} 选取 \mathbf z 的第 $4(i-1)+1$、4(i-1)+2 个元素;\mathbf E_j^{\mathrm{exit}} 选取第


n_{\mathrm{park}}+4(j-1)+1,
\qquad
n_{\mathrm{park}}+4(j-1)+2

个元素。

因此,只要目标函数同时包含 \mathbf p_i^{\mathrm{park}} 和 $\mathbf p_j^{\mathrm{exit}}$,它就是整个 \mathbf z 的函数。

2. 将交互项显式写成 \mathbf z 的函数

为简化记号,定义点对选择矩阵


\mathbf D_{ij}
=\mathbf E_i^{\mathrm{park}}-\mathbf E_j^{\mathrm{exit}}
\in\mathbb R^{2\times n_z}.

于是两个配置点的相对位置和距离分别为


\mathbf r_{ij}(\mathbf z)
=\mathbf p_i^{\mathrm{park}}-\mathbf p_j^{\mathrm{exit}}
=\mathbf D_{ij}\mathbf z,

d_{ij}(\mathbf z)
=\|\mathbf D_{ij}\mathbf z\|.

正文实现将两个弧长步长冻结为粗解给出的常数。记


c_0=\frac{w_\varPsi}{v_0}
\Delta s_{\mathrm{park}}^{(0)}
\Delta s_{\mathrm{exit}}^{(0)},

其中上标 (0) 表示粗解值。离散交互项便可以显式写成


\boxed{
J_\varPsi(\mathbf z)
=c_0\sum_{i=1}^{M_{\mathrm{park}}}
\sum_{j=1}^{M_{\mathrm{exit}}}
K\!\left(
\|\mathbf D_{ij}\mathbf z\|;
\rho_\varPsi,m_\varPsi
\right).}

把核函数的分段定义代入后,还可以完全展开为


J_\varPsi(\mathbf z)
=c_0\sum_{i=1}^{M_{\mathrm{park}}}
\sum_{j=1}^{M_{\mathrm{exit}}}
\begin{cases}
\displaystyle
\left(
1-\frac{\|\mathbf D_{ij}\mathbf z\|}{\rho_\varPsi}
\right)^{m_\varPsi},
& \|\mathbf D_{ij}\mathbf z\|<\rho_\varPsi,\\[8pt]
0,
& \|\mathbf D_{ij}\mathbf z\|\geq\rho_\varPsi.
\end{cases}

至此,表达式右侧只剩下决策变量 $\mathbf z$、常数选择矩阵 \mathbf D_{ij} 以及固定参数,不再把 \mathbf p_i^{\mathrm{park}}\mathbf p_j^{\mathrm{exit}} 当成独立符号。这里使用 \mathbf D_{ij} 而不使用 $\mathbf A_{ij}$,是为了避免和正文凸走廊约束中的 \mathbf A_k 混淆。

对于每个点对 $(i,j)$,定义


\mathbf r_{ij}(\mathbf z)
=\mathbf D_{ij}\mathbf z,
\qquad
d_{ij}(\mathbf z)=\|\mathbf D_{ij}\mathbf z\|.

0<d_{ij}(\mathbf z)<\rho_\varPsi 时,核函数为


K(d_{ij}(\mathbf z))=
\left(1-\frac{d_{ij}(\mathbf z)}{\rho_\varPsi}\right)^{m_\varPsi},

它随距离增大而减小。因此,最小化 J_\varPsi 会倾向于增大两条路径之间的距离。

3. 为什么两条路径会“同时被推开”

对一个有效点对 $(i,j)$,有


K'(d)
=-\frac{m_\varPsi}{\rho_\varPsi}
\left(1-\frac{d}{\rho_\varPsi}\right)^{m_\varPsi-1}.

3.1 先求距离对位置的导数


\mathbf p_i^{\mathrm{park}}
=\begin{bmatrix}x_i\\y_i\end{bmatrix},
\qquad
\mathbf p_j^{\mathrm{exit}}
=\begin{bmatrix}\bar x_j\\\bar y_j\end{bmatrix}.

则相对位置为


\mathbf r_{ij}
=\mathbf p_i^{\mathrm{park}}-\mathbf p_j^{\mathrm{exit}}
=\begin{bmatrix}
x_i-\bar x_j\\
y_i-\bar y_j
\end{bmatrix},

距离为


d_{ij}=\|\mathbf r_{ij}\|
=\sqrt{(x_i-\bar x_j)^2+(y_i-\bar y_j)^2}.

对泊入点的两个坐标分别求偏导:


\frac{\partial d_{ij}}{\partial x_i}
=\frac{x_i-\bar x_j}{d_{ij}},
\qquad
\frac{\partial d_{ij}}{\partial y_i}
=\frac{y_i-\bar y_j}{d_{ij}}.

将两个分量写成列向量,就是


\nabla_{\mathbf p_i^{\mathrm{park}}}d_{ij}
=
\begin{bmatrix}
\partial d_{ij}/\partial x_i\\
\partial d_{ij}/\partial y_i
\end{bmatrix}
=\frac{1}{d_{ij}}
\begin{bmatrix}
x_i-\bar x_j\\
y_i-\bar y_j
\end{bmatrix}
=\frac{\mathbf r_{ij}}{d_{ij}}.

几何上,\mathbf r_{ij}/d_{ij} 是从驶离点指向泊入点的单位方向向量:泊入点沿这个方向移动会增大两点距离,沿相反方向移动会减小距离。

3.2 再使用链式法则

核函数不是直接以 \mathbf p_i^{\mathrm{park}} 为自变量,而是通过标量距离 d_{ij} 依赖位置:


\mathbf p_i^{\mathrm{park}}
\longrightarrow
d_{ij}
\longrightarrow
K(d_{ij}).

因此多元链式法则给出


\frac{\partial K(d_{ij})}
{\partial \mathbf p_i^{\mathrm{park}}}
=\frac{\mathrm dK}{\mathrm dd}(d_{ij})
\nabla_{\mathbf p_i^{\mathrm{park}}}d_{ij}
=K'(d_{ij})\frac{\mathbf r_{ij}}{d_{ij}}.

这就是文档中的目标公式。它由两部分相乘得到:


\underbrace{K'(d_{ij})}_{\text{距离增大时核代价的变化率}}
\quad\times\quad
\underbrace{\frac{\mathbf r_{ij}}{d_{ij}}}_{\text{距离对泊入位置的方向导数}}.


\frac{\partial K(d_{ij})}
{\partial \mathbf p_j^{\mathrm{exit}}}
=-K'(d_{ij})\frac{\mathbf r_{ij}}{d_{ij}}.

驶离点前面的负号来自相对位置向量的定义。对每一对泊入点和驶离点,定义


\mathbf r_{ij}
=\mathbf p_i^{\mathrm{park}}-\mathbf p_j^{\mathrm{exit}}.

为了看清这个偏导,令两个二维位置分别写成


\mathbf p_i^{\mathrm{park}}
=\begin{bmatrix}x_i\\y_i\end{bmatrix},
\qquad
\mathbf p_j^{\mathrm{exit}}
=\begin{bmatrix}\bar x_j\\\bar y_j\end{bmatrix}.

于是


\mathbf r_{ij}
=\begin{bmatrix}
x_i-\bar x_j\\
y_i-\bar y_j
\end{bmatrix}.

这里的“对向量求偏导”严格来说是 Jacobian 矩阵,因此逐分量计算可得


\begin{aligned}
\frac{\partial \mathbf r_{ij}}
{\partial \mathbf p_j^{\mathrm{exit}}}
&=
\begin{bmatrix}
\dfrac{\partial(x_i-\bar x_j)}{\partial \bar x_j}
&\dfrac{\partial(x_i-\bar x_j)}{\partial \bar y_j}\\[6pt]
\dfrac{\partial(y_i-\bar y_j)}{\partial \bar x_j}
&\dfrac{\partial(y_i-\bar y_j)}{\partial \bar y_j}
\end{bmatrix}\\[4pt]
&=
\begin{bmatrix}-1&0\\0&-1\end{bmatrix}
=-\mathbf I_2.
\end{aligned}

其中 \mathbf I_2 是二维单位矩阵。这个结果也可以用增量来理解:若驶离点发生一个小位移 $\Delta\mathbf p_j^{\mathrm{exit}}$,而泊入点保持不变,则


\Delta\mathbf r_{ij}
=\Delta\mathbf p_i^{\mathrm{park}}
-\Delta\mathbf p_j^{\mathrm{exit}}
=-\Delta\mathbf p_j^{\mathrm{exit}}.

由于这里固定泊入点,$\Delta\mathbf p_i^{\mathrm{park}}=\mathbf 0$。也就是说,驶离点沿某个方向移动时,从驶离点指向泊入点的相对向量沿相反方向变化,这正是 Jacobian 中出现负号的原因。将它代入链式法则,就得到


\frac{\partial K(d_{ij})}
{\partial \mathbf p_j^{\mathrm{exit}}}
=-K'(d_{ij})\frac{\mathbf r_{ij}}{d_{ij}}.

上述距离梯度推导要求 $d_{ij}>0$;当两个点精确重合时,\|\mathbf r_{ij}\| 在零点没有唯一梯度,需要使用平滑距离或在实现中单独处理该点对。

直接对联合变量 \mathbf z 求导,则一个有效点对的梯度为


\nabla_{\mathbf z}
K\!\left(\|\mathbf D_{ij}\mathbf z\|\right)
=K'(d_{ij})
\frac{\mathbf D_{ij}^{\mathsf T}\mathbf D_{ij}\mathbf z}{d_{ij}}.

定义当前有限支撑域内的有效点对集合


\mathcal I(\mathbf z)=
\left\{(i,j)\ \middle|\
0<\|\mathbf D_{ij}\mathbf z\|<\rho_\varPsi
\right\},

便得到完整交互项关于联合决策变量的梯度:


\boxed{
\nabla_{\mathbf z}J_\varPsi(\mathbf z)
=c_0\sum_{(i,j)\in\mathcal I(\mathbf z)}
K'\!\left(\|\mathbf D_{ij}\mathbf z\|\right)
\frac{\mathbf D_{ij}^{\mathsf T}\mathbf D_{ij}\mathbf z}
{\|\mathbf D_{ij}\mathbf z\|}.}

由于


\mathbf D_{ij}
=\mathbf E_i^{\mathrm{park}}-\mathbf E_j^{\mathrm{exit}},

\mathbf D_{ij}^{\mathsf T} 会把同一个二维点对梯度以相反符号写回 \mathbf z_{\mathrm{park}}\mathbf z_{\mathrm{exit}} 对应的位置分量。这就是 J_\varPsi(\mathbf z) 在一次联合求解中同时更新两条路径的代数原因。

两个梯度大小相等、方向相反。因为 $K'(d)<0$,梯度下降时:

  • 泊入点 \mathbf p_i^{\mathrm{park}} 沿远离驶离点的方向移动;
  • 驶离点 \mathbf p_j^{\mathrm{exit}} 沿远离泊入点的方向移动。

这就是第 841 行所说的“两条路径可在同一次求解中相互推离”。它并不是先固定一条路径再移动另一条,而是同一个目标函数对两组决策变量同时提供梯度。

需要注意,梯度形式是对称的,不代表最终位移一定相等。两条路径还分别受到引导场、长度、平滑性和走廊约束的作用;哪条路径更容易移动,取决于这些项共同形成的“刚度”。

4. Hessian 的“跨路径耦合块”是什么

将联合变量按两条路径分块后,目标函数 Hessian 的结构可以概念性地写成


\nabla^2_{\mathbf z\mathbf z}J=
\begin{bmatrix}
H_{\mathrm{pp}} & H_{\mathrm{pe}}\\
H_{\mathrm{ep}} & H_{\mathrm{ee}}
\end{bmatrix}.

这里:

  • H_{\mathrm{pp}} 描述泊入变量之间的二阶关系;
  • H_{\mathrm{ee}} 描述驶离变量之间的二阶关系;
  • H_{\mathrm{pe}}H_{\mathrm{ep}} 描述泊入变量与驶离变量之间的二阶关系,称为跨路径耦合块。

若目标函数可以完全分离为


J(\mathbf z)=J_{\mathrm{park}}(\mathbf z_{\mathrm{park}})
+J_{\mathrm{exit}}(\mathbf z_{\mathrm{exit}}),

那么


H_{\mathrm{pe}}=H_{\mathrm{ep}}=0,

整个 Hessian 按两条路径呈块对角结构。加入 J_\varPsi 后,一个核项同时依赖 \mathbf p_i^{\mathrm{park}} 和 $\mathbf p_j^{\mathrm{exit}}$,所以相应的跨路径二阶导数一般不为零。

对于单个点对,可以把它的 Hessian 贡献写成


\begin{bmatrix}
G_{ij} & -G_{ij}\\
-G_{ij} & G_{ij}
\end{bmatrix},

其中 G_{ij} 是关于二维相对位置 \mathbf r_{ij}2\times2 二阶导数矩阵。非对角位置的 -G_{ij} 正是该点对造成的跨路径耦合。

5. 为什么有限支撑核会让跨路径块稀疏

核函数满足


K(d)=0,\qquad d\geq\rho_\varPsi.

在严格满足 d_{ij}>\rho_\varPsi 的区域内,K(d_{ij}) 是常数零,因此它的梯度和 Hessian 也都是零。于是:

  • 若点对 (i,j) 的距离小于 $\rho_\varPsi$,它在跨路径块中产生非零项;
  • 若点对 (i,j) 的距离大于 $\rho_\varPsi$,它不产生任何导数项。

例如,两条路径各有 4 个点,理论上共有 4\times4=16 个点对。假设只有


(1,1),\ (2,2),\ (2,3),\ (3,3),\ (4,4)

这 5 对点的距离小于作用半径,那么跨路径块中只有与这 5 对点有关的位置非零,其余 11 对均为零。这就是第 841 行所说的“并非稠密的 M_{\mathrm{park}}\times M_{\mathrm{exit}} 块”。

这里的 M_{\mathrm{park}}\times M_{\mathrm{exit}} 是按“配置点对”描述的概念尺寸。由于每个位置点有 x,y 两个分量,实际位置 Hessian 的跨路径块尺寸是


2M_{\mathrm{park}}\times2M_{\mathrm{exit}},

每个有效点对通常对应一个 2\times2 小块。

6. “其余部分均为块对角结构”是什么意思

第 843 行的“块对角”是按两条路径分成两个大块而言,并不是说单条路径内部的矩阵是对角矩阵。

6.1 单条路径内部仍然存在耦合

配置约束


\mathbf x_{k+1}=\mathbf x_k+
\frac{\Delta s}{2}
\left[\mathbf f(\mathbf x_k,\sigma_k)
+\mathbf f(\mathbf x_{k+1},\sigma_k)\right]

同时依赖 $\mathbf x_k$、\mathbf x_{k+1} 和 $\sigma_k$。所以,单条路径内部相邻配置点之间存在耦合,其 Jacobian/Hessian 通常是带状矩阵,而不是对角矩阵。

6.2 但这些约束不连接两条路径

泊入路径的配置约束只包含 $\mathbf z_{\mathrm{park}}$,驶离路径的配置约束只包含 $\mathbf z_{\mathrm{exit}}$。因此按两条路径分块后,约束 Jacobian 具有如下形式:


J_{\mathrm{independent}}=
\begin{bmatrix}
B_{\mathrm{park}}&0\\
0&B_{\mathrm{exit}}
\end{bmatrix}.

其中 $B_{\mathrm{park}}$、B_{\mathrm{exit}} 内部可以是带状的,并不要求是对角的。

同样地:

  • 曲率与曲率变化率上界只约束各自路径;
  • 泊入走廊约束只作用于泊入路径;
  • 驶离走廊约束只作用于驶离路径;
  • $J_\ell$、J_UJ_\kappa 都可以分别写成泊入部分与驶离部分之和。

所以,在不考虑 J_\varPsi 时,两条路径的数值结构基本可以分开处理。

7. 关于装载位约束的一处重要问题

第 843 行称:“唯一的另一处跨路径耦合来自装载位处共享同一位姿”。结合当前论文第 335--347 行的定义,这句话并不严格准确。

当前边界条件写成


\boldsymbol\eta^{\mathrm{park}}(s_{\mathrm{park}})
=\boldsymbol\eta_{\mathrm{load}},

\boldsymbol\eta^{\mathrm{exit}}(0)
=\boldsymbol\eta_{\mathrm{load}},

而正文明确说明 \boldsymbol\eta_{\mathrm{load}} 是由上层系统给出的固定值。若它确实是常量,那么这只是两组分别等于同一常量的边界约束:


h_{\mathrm{park}}(\mathbf z_{\mathrm{park}})=0,
\qquad
h_{\mathrm{exit}}(\mathbf z_{\mathrm{exit}})=0.

第一组不含 $\mathbf z_{\mathrm{exit}}$,第二组不含 $\mathbf z_{\mathrm{park}}$,所以它们不会在 Jacobian 或 Hessian 中产生跨路径非零块。两条路径在几何上共享同一个已知端点,但在导数结构上没有直接耦合。

在当前问题定义下,固定的 \boldsymbol\eta_{\mathrm{load}} 不会形成跨路径导数耦合。只有在另外重新定义约束时,才可能形成真正的跨路径约束,例如:

  1. 直接施加

    
    \boldsymbol\eta^{\mathrm{park}}(s_{\mathrm{park}})
    -\boldsymbol\eta^{\mathrm{exit}}(0)=0;
    
  2. 由上层模型额外引入一个待优化的共享位姿变量,并让两条路径的边界条件同时依赖该变量。这个做法已经改变了当前论文中“装载位姿由上层系统给定”的问题定义。

因此,按照论文当前“装载位姿固定”的问题定义,真正的跨路径导数耦合只来自 $J_\varPsi$。第 843 行建议相应修改。

8. 可微性表述还需要哪些条件

第 841 行称 J_\varPsi\mathbf z 整体可微,这需要附加条件:

  • 当两个路径点完全重合,即 d_{ij}=0 时,欧氏范数 \|\mathbf r_{ij}\| 的梯度没有唯一方向;当前核函数在 d=0 处的径向导数通常又不为零,因此复合函数在重合点处不可微。
  • 在截断点 d=\rho_\varPsi 处,若 $m_\varPsi>1$,一阶导数可连续衔接到零;若还希望二阶导数连续,通常需要 $m_\varPsi>2$。

这不一定造成实际求解失败,因为车辆路径点通常不会精确重合,且参数可以选择足够高的 $m_\varPsi$。但论文若要声称“整体可微”,最好明确参数条件,并对 d=0 使用平滑距离,例如


d_\varepsilon=\sqrt{\|\mathbf r\|^2+\varepsilon^2}.

9. 用一句话重新理解第 841--843 行

这几行的核心意思是:

大部分目标项和约束都只在各自路径内部产生带状导数结构;交互项 J_\varPsi 同时依赖两条路径,因此能在一次 NLP 求解中推动双方分离。由于核函数只作用于距离小于 \rho_\varPsi 的点对,交互项产生的跨路径 Hessian 块通常是稀疏的。

按照当前“装载位姿为固定常量”的定义,不应再把装载位边界条件称为跨路径导数耦合。

10. 建议替换原文的表述

可以将第 841--843 行改写为:

式 (joint_psi_discrete) 同时依赖泊入与驶离路径的位置变量,故其关于两组变量的梯度均非零,两条路径可在同一次求解中相互推离。由有限支撑核的定义,仅当配置点对的距离小于 \rho_\varPsi 时,该点对才对梯度及 Hessian 产生贡献;因此,交互项所形成的跨路径 Hessian 块仅在空间上相近的配置点对处非零。除 J_\varPsi 外,其余目标项与约束均只作用于单条路径内部:配置约束在各自路径内耦合相邻配置点,形成带状结构;物理上界及走廊约束也不连接两条路径。由于 \boldsymbol\eta_\mathrm{load} 是给定常量,两条路径分别等于该位姿的边界条件不产生跨路径导数耦合。因此,联合问题仅通过稀疏的 J_\varPsi 块发生跨路径耦合。