选择具有已知导数的廉价黑盒函数全局优化的求解器/软件

计算科学 优化 pde 约束优化 曲线拟合
2021-12-28 12:03:44

我正在尝试估计我的连续非线性 PDAE 模型的一些未知参数(通过有限体积方法空间离散化和通过线法进行时间步进进行模拟)。我计划通过最小化模型输出到实验数据的最小二乘误差来做到这一点。

我阅读了可以使用的各种优化求解器。但是,我遇到了一个奇怪的情况。我没有我的函数的精确分析形式(因为它是一个 PDAES 系统,在离散化后会产生很多 DAE)。虽然这很常见,推荐的方法是线条法,但我的情况略有不同。我确实有雅可比矩阵(通过自动微分包'CASADI'评估)。

我想真正利用雅可比矩阵的力量,即解决方案的方向信息。此外,我的函数评估非常便宜,因为我的仿真模型是手动优化的,并利用了各种内在的 CPU 指令。

考虑到这种情况,推荐使用什么软件包来实现参数估计的全局优化?

3个回答

由于您有雅可比矩阵,您可以在 Gauss-Newton 或 Levenberg-Marquardt 方法中应用它来有效地逼近最小二乘目标函数的 Hessian 和梯度(梯度为,Hessian 是一阶。) JTfJTJ

您还可以使用雅可比行列式计算最小二乘目标函数的梯度,然后使用任何基于梯度的方案(例如 BFGS 或有限内存 BFGS 方法)解决问题。如果参数数量为的方程组另一种方法是使用迭代方法来求解出现在 GN 或 LM 方法中的正规方程。JTJ

所有这些方法都可以(在适当注意细节的情况下)保证从任何起始解决方案收敛到最小二乘目标的局部最小值。这有时被混淆地称为“全局收敛”,尽管它并不意味着收敛到全局最小值。

假设您的最小二乘目标是非凸的(很可能),那么您将需要考虑将局部非线性最小二乘求解器与某种随机搜索相结合,以期找到全局最小值。最简单的方法是使用“多开始”,您可以从许多随机选择的解决方案中运行本地搜索,然后选择您看到的最佳局部最小值。

您可以使用一些无衍生优化,有几个可用的包,或者:如果除了 jacobian 之外,您还可以获得 hessian,那么您可以编写许多方法。如果您没有约束,牛顿法和最速下降法很容易编写,并且如果您有一个估计步长的好方法(armijo 条件等),那么工作得相当好,约束方法需要更多的编程工作。我向您推荐 J Nocedal 的参考 Numerical Optimization,它包含伪代码和对可以帮助您解决问题的软件的引用。

让我从我之前的评论中澄清一下,我想到了线性最小二乘问题,非线性最小二乘需要满足几个条件才能成为凸的。我会为非线性最小二乘问题寻找一些简单的代码(基本上是非线性方法,利用问题的结构来减少计算,例如 Gauss-newton 和 levenberg-marquardt)并修改它以添加 jacobian和你程序中的粗麻布。您可能需要对执行此操作的方法有所了解。大多数软件包都希望您提供目标函数。