这是一个新手问题。我正在尝试最小化以下 QP 问题:
x'Qx + b'x + c,对于 Ax >= lb 其中:
- x 是坐标向量,
- Q 是一个稀疏、强对角占优的对称矩阵,通常大小为 500,000 x 500,000 到 1M x 1M
- b 是常数向量
- c 是一个常数
- A 是单位矩阵
- lb 是一个包含向量 x 下界的向量
以下是我尝试过的软件包:
Optim.jl:他们有一个简单的“盒子”约束的原始内点算法。我尝试过使用 inner_optimizer,将其设置为 GradientDescent()/ConjugateGradient()。无论如何,这对我的问题集来说似乎很慢。
IterativeSolver.jl:他们有一个共轭梯度求解器,但他们没有办法为 QP 问题设置约束。
MathProgBase.jl:他们有一个用于二次规划的专用求解器,称为 Ipopt()。它对于通常在 3Kx3K 矩阵左右的小型数据集非常有效,但对于我正在查看的那种数据集来说它需要的时间太长了。我知道将线性系统求解器从 MUMPS 更改为 HSL 或 WSMP 可能会产生显着的改进,但是有没有办法通过 Julia 将第三方线性系统求解器添加到 Ipopt() 中?
OSQP.jl:对于我感兴趣的数据集,这又需要很长时间才能收敛。
另外我想知道是否有人使用过大型数据集,他们能否提出一种方法来使用现有的包在 Julia 中快速解决这种规模的问题?