非线性优化包,允许用户定义的 Hessian

计算科学 优化
2021-12-11 00:01:47

我们目前的实验室使用 SNOPT 作为空气动力学形状优化的优化器。为了提高收敛速度和限制,我目前正在构建近似 Hessian。不幸的是,SNOPT 只允许我定义一个初始的 Hessian。

是否有一个 FORTRAN 包可以让我在每次设计迭代时输入 Hessian?

1个回答

您正在寻找牛顿法,而不是 SNOPT 使用的准牛顿法。您可以考虑使用 KNITRO,它可以处理 SNOPT 可以处理的任何优化问题类型,但具有更多的算法选项。

KNITRO 中的算法选项包括顺序二次规划 (SQP)。SQP 由 SNOPT 使用,但仅与 Quasi-Newton 结合使用。KNITRO 可以使用牛顿法运行其任何算法选项(SQP 和其他),该方法利用用户提供的拉格朗日 Hessian 或准牛顿法。如果您希望使用牛顿法并具有非线性约束,您不仅需要评估目标函数的 Hessian 矩阵,还需要评估非线性约束的 Hessian 矩阵。对于 Quasi-Newton,KNITRO 提供了 BFGS 或 SR1 的选择,SR1 在一些非凸问题上比 BFGS 工作得更好,而 SNOPT 只提供 BFGS。

KNITRO 还提供内点算法选择,在您的问题中可能会或可能不会比 SQP 更好。另外值得注意的是,KNITRO 的 SQP 使用信任区域,而 SNOPT 使用线搜索。这“允许”在 KNITRO 中使用 SR1 作为选项,但不在 SNOPT 中。

KNITRO 没有本机 FORTRAN 接口,但您可以使用 C 包装器调用它。请参阅https://www.artelys.com/tools/knitro_doc/2_userGuide/otherProgInterfaces.html

一种不如 KNITRO 灵活且可能不如 KNITRO 健壮的开源替代方案是 IPOPT,它也可以通过 C 包装器http://www.coin-or.org/Ipopt/documentation/node25.html从 FORTRAN 调用。它只提供内点选项,没有 SQP 选项。但它确实提供了牛顿(用户提供的 Hessian)或准牛顿的选择。