寻找开源数值求解器

计算科学 凸优化 约束优化
2021-11-27 19:47:15

我正在尝试解决优化问题

minf(x)subject to AxbxR10000, bR10000

A有点稀疏(通常少于 5%),我可以有效地评估的 Hessian 矩阵的计算时间太长了。是一个凸的、非线性的、平滑的函数。f(x)f(x)f(x)f(x)

我尝试了 Matlab 的内置求解器fmincon,但即使我在具有 32GB 内存的系统上运行,我仍不断收到内存错误。我使用的确切 Matlab 设置是

options = optimoptions(@fmincon,'GradObj', 'on','SubproblemAlgorithm', 'cg', 'Display', 'iter','Hessian',{'lbfgs',20}, 'MaxIter', 50, 'Diagnostics', 'on');
[x,fval] = fmincon(@(x)myObjFunc(x),x0,A,b,[],[],lb,[],[],options);

如果有人可以推荐一个合适的开源求解器,我会非常高兴,我可以用它来解决这个问题 - 最好使用一些 Matlab 接口 - 甚至更好:Matlab 的更精细设置fmincon以规避内存问题。

我已经找到了tomopt包裹。但是,这不是开源的。如果我找不到任何开源替代品,我会检查一下。

1个回答

IPOPT是一个很好的凸非线性问题的内点法求解器,并且有一个MATLAB 接口,虽然我没有使用过 MATLAB 接口。(从 GAMS 调用的求解器非常好。)

CVX也是一个很好的凸问题包,YALMIP稍微通用一些;这两个包都提供了一种用于构建非线性程序的建模语言,这可能是也可能不是您想要的。

COIN-OR 项目下有一大批开源优化软件,如果你熟悉 GAMS 或 AMPL,你也许可以使用 NEOS 服务器提交你的问题作为作业并使用封闭- 以及他们可用的开源求解器。