什么是做非线性最小二乘的推荐方法, min,盒子约束?在我看来(傻瓜们冲进来)可以使框约束二次,并最小化 where是形状像 \_ _ _/, 的“桶函数” 。 这在理论上有效,在实践中有效吗? (关于 NLS+ 的理论论文似乎很多,但我的兴趣是实用的—— 真实或现实的测试用例将帮助我在方法中进行选择。)
(专家,请添加标签:“最小二乘”?)
什么是做非线性最小二乘的推荐方法, min,盒子约束?在我看来(傻瓜们冲进来)可以使框约束二次,并最小化 where是形状像 \_ _ _/, 的“桶函数” 。 这在理论上有效,在实践中有效吗? (关于 NLS+ 的理论论文似乎很多,但我的兴趣是实用的—— 真实或现实的测试用例将帮助我在方法中进行选择。)
(专家,请添加标签:“最小二乘”?)
添加平方惩罚项以消除约束是一种简单的方法,仅给出 1 阶/惩罚因子的准确性。因此,除非您在计算过程中让惩罚达到无穷大,否则不建议使用高精度。但是高惩罚因子使 Hessian 非常病态,这限制了在不明确考虑约束的情况下可实现的总精度。
请注意,绑定约束比一般约束更容易处理,因此它们实际上永远不会转换为惩罚。
求解器 L-BFGS-B(与大约 5 维历史一起使用)通常在两个低高维中都非常可靠且快速地求解有界约束问题。例外情况是在问题上的错误收敛,这些问题可能与解决方案相去甚远,在这种情况下很容易陷入下降法。
我们在许多不同维度上对非常多样化的函数进行了大量实验,提供了许多不同的求解器,因为我们需要一个非常强大的边界约束求解器作为我们全局优化软件的一部分。L-BFGS-B 显然作为通用方法脱颖而出,尽管其他求解器在一些小型问题上的表现当然要好得多。因此,我会推荐 L-BFGS-B 作为首选,并且会尝试替代技术,以防 L-BFGS-B 不能很好地处理您的特定类别的问题。
我会简单地使用通用 NLP 求解器 IPOPT。它是我尝试过的最强大的求解器。
除非您有一些非常特殊的要求,否则您没有理由坚持使用仅适用于具有框约束的 NLS 的特定于问题的求解器。
需求的变化(例如,添加非线性约束)会导致特定问题的求解器非常头疼。如果您使用通用的IPOPT,您将不会有这样的问题。
求解过程可以变得更快,但代价是破坏 IPOPT 显着的稳健性。在我看来,如果可用,请使用精确的导数。只有当我已经证明有性能问题时,我才会开始使用近似值(例如 L-BFGS)。
R minpack.lm CRAN 包提供了带有框约束的 Levenberg-Marquardt 实现。
一般来说,对于最小二乘问题,Levenberg-Marquardt 比 L-BFGS-B 更适合。它会(很多)更好地解决具有挑战性的问题。它也将比通用 IPOPT 快得多,因为它是针对非线性最小二乘问题量身定制的。
R 包选择了一种非常直接的投影方法来强制执行约束(请参阅源代码)。根据您使用的 LM 实现,包含它可能很简单。
现在,使用转换的评论中的建议(例如 scipy 中的正弦转换)也是将无约束 LM 算法转换为受约束算法的一个很好、简单的替代方案。如果雅可比是解析的,您还需要在雅可比中包含变换。
(多年后)两个处理框约束的求解器:
Scipy least_squares 有 3 种方法,具有广泛的文档: