当给定更多变量或更少约束时,Levenberg 优化器会快速停止

计算科学 优化 迭代法 稳定 非线性规划
2021-12-05 02:39:21

我正在使用 g2o C++ 优化库来使用加速度计数据优化 GPS 轨迹。

该程序在表示加速度计的位置和方向(四元数的向量部分)的数据点上使用 Levenberg-Marquardt 优化器。唯一的约束是局部参考系中的加速度。

误差测量为加速度计读数与数据点跟踪的路径的局部二阶导数之间的差异 - 从 (a 到 b) 到 (b 到 c) 的速度变化,不考虑方向变化,加上向上加速度抵消重力。

初始路径是在 GPS 读数之间绘制的多边形。

优化器运行了五次梯度下降迭代,并且似乎做出了很好的调整。多边形的角有点圆润。但随后它似乎卡住了,Levenberg 的 lambda 在程序终止之前上升了五次迭代。

如果我使用来自陀螺仪的数据进一步限制它,它会做更多的改进。然而,并没有我预期的那么多,而且陀螺仪数据需要人为地高费舍尔信息。

处理整个问题的各个部分不会很快终止。它仅使用加速来进行更多改进。

可能出了什么问题?无法仅通过加速来细化初始估计似乎表明存在严重问题。

2个回答

仅使用加速度计数据时,您的优化问题可能会非常糟糕。换句话说,加速度计数据可能无法充分约束参数,因此许多不同的路径足以适合数据。就最小化问题而言,这意味着您将在具有几乎相同目标值的不同路径的最小值处有一个大的“平坦点”。

要对此进行测试,请查看JTJ在最优轨迹。如果这个矩阵是病态的,那么你确实有一个条件很差的问题。

这可以解释 LM 的增加λ. 如果JTJ正在接近奇点,LM 会增加λ来克服这种独特性。这导致步骤越来越短,最终 LM 代码放弃了。

初始估计中的最后一个顶点(数据点)没有被初始化。

我不确定为什么这会阻塞求解器。与从一个异常点传播到其他数据点的误差有关,并将所有内容拉出最小值。但是,在如此少的迭代之后将所有内容都拉出仍然没有任何意义,并且在检查过早的解决方案时效果并不明显。