我需要解决具有两个非线性等式约束的优化问题。我的函数评估非常快(不到一秒),并且我还提供fmincon了我的目标函数和约束函数的梯度。但是,当fmincon有大约 2000 个变量时,when 很慢,当有 6000 个变量时,它非常慢。考虑到我的函数评估速度超快,我猜瓶颈是fmincon. 我怎么可能加快速度fmincon?如果没有,任何人都可以建议任何其他优化包吗?
当有很多变量时,如何在 MATLAB 中加速 fmincon?MATLAB 优化工具箱的替代品?
计算科学
优化
matlab
约束优化
2021-12-22 07:19:56
1个回答
在不了解您的问题的情况下,很难提出具体的建议。我在这个问题中提出了一些关于非线性规划求解器的一般性建议。总结一下:
- IPOPT 是一个很好的内点法 (IPM) 求解器
- SNOPT 是一个很好的顺序二次规划 (SQP) 求解器
- CONOPT 是一个非常好的广义缩减梯度 (GRG) 求解器
在您的情况下,如果只有两个活动约束(不包括约束约束),我认为 GRG 求解器可能会做得相当好,并且 SQP 不会那么有用,但是对于 6000 个变量的问题,所有这些方法都是可行的。这些都是凸求解器,并且由于您的问题具有非线性等式约束,因此您的问题很可能是非凸的,在这种情况下,这些求解器将返回局部最优解。但是,fmincon也会返回一个局部最优解。
如果您想要一个全局最优解,您应该转而查看全局优化求解器,例如 BARON、Couenne、Bonmin 和 DICOPT。
如果您有访问权限,请考虑使用 GAMS 或 CVX 等建模环境,它可以让您选择一次提出问题,并从许多不同的求解器中进行选择,看看哪一个最适合您的问题。
从对 MATLAB 源代码的搜索来看,似乎fmincon大部分都是在纯 MATLAB 中实现的,这可以解释为什么它很慢。最好使用以编译语言在求解器中实现核心数学算法的求解器,这样会(显着)更快。
其它你可能感兴趣的问题